`
suhuanzheng7784877
  • 浏览: 701461 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47681
社区版块
存档分类
最新评论

JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----7

阅读更多

1.      EJB的容器式依赖对象注入

就像Spring IOC所倡导的那样(其实是Spring设计时借鉴的EJB的思想),当一个Bean完成一项任务的时候需要其他的组件配合使用才能完成,这个时候就出现了依赖,此Bean依赖于另一个Bean的某些服务才能完成自己的服务。那么我们最原始的办法就是new一个Bean出来是吧?当然这是十分,不太成熟的做法。在《Effective Java》这本书中第一章节就提倡类和类之间调用不要用new,构造函数也尽量用工厂去创建等等……总之依赖注入就是为了解耦。在JBoss这种应用服务器中的EJB容器组件如果需要互相调用该怎么办呢,同样为了不硬编码、解耦合。就需要容器注入了。我们来看例子

接口1

 

@Local

public interface XMLUtilBean {

    public String readXml();

}

实现类1

 

 

 

@Stateless

 

public class XMLUtilBeanEAOImpl implements XMLUtilBean {

   

    @Override

    public String readXml() {

       return "xml服务…………";

    }

}

接口2

 

 

 

@Remote

 

public interface ServerBean {

    public boolean insert(String name);

}

实现类2

 

@Stateless

public class ServerBeanEAOImpl implements ServerBean {

 

    @EJB(beanName = "XMLUtilBeanEAOImpl")

    private XMLUtilBean xMLUtilBean;

 

    @Override

    public boolean insert(String name) {

       String xml = xMLUtilBean.readXml();

       System.out.println(xml + "::::" + name);

       return true;

    }

}

此处实现类用了@EJB(beanName = "XMLUtilBeanEAOImpl")注解将EJB组件名为XMLUtilBeanEAOImpl的组件给注入了进来。所以在insert方法中可以直接调用xMLUtilBean对象了。

测试代码如下:

 

    public void test01() throws Exception {

       Context context = init();

       ServerBean serverBean = (ServerBean) context

              .lookup("ServerBeanEAOImpl/remote");

       System.out.println(serverBean.insert("蜕变妖狼"));

    }

执行后JBoss控制台信息如下:

 

16:04:19,450 INFO  [STDOUT] xml服务…………::::蜕变妖狼

证明被注入的组件使用正常。

2.      EJB的容器式资源注入

以上是EJB组件之间的调用可以使用@EJB注解作为依赖注入,如果该EJB使用了容器的某些类,比如应用上下文对象、数据源等等,其实大可不必手工创建这些资源,在EJB中直接采用资源注入就可以了。如下代码

 

@Stateless

@TransactionManagement(TransactionManagementType.CONTAINER)

@TransactionAttribute(TransactionAttributeType.REQUIRED)

public class ResourceDIServerBeanEAOImpl implements ResourceDIServerBean {

 

    @Resource(mappedName="java:/jbossdemo")

    private DataSource dataSource;

 

    @Resource

    private SessionContext sessionContext;

 

    @Override

    public void insert() {

       Connection connection = null;

       Statement statement = null;

       try {

           connection = dataSource.getConnection();

           statement = connection.createStatement();

           String insert1 = "insert into person values(9,'剑藏玄')";

           String insert2 = "insert into person values(10,'傲笑红尘')";

           statement.executeUpdate(insert1);

           statement.executeUpdate(insert2);

           statement.close();

           connection.close();

       } catch (Exception e) {

           System.out.println("事务回滚~~");

           sessionContext.setRollbackOnly();

           e.printStackTrace();

       }

    }

}

在这个会话Bean中就注入了数据源和容器会话上下文。这样开发者就省去了自己实例化的步骤,直接引用容器给你注入的资源就好了。

3.      计时器进行任务调度

类似于Spring集成了Quartz似的,EJB自己有一个任务调度管理器。也可以指定某个时间执行某些特殊的任务,比如在晚上0点的时候银行清点所有分行的账务、统计局在每个月的月底集中统计某些“和谐”后的统计数字等等……下面我们看简单实用例子

接口

 

@Remote

public interface ITimeEAO {

    void setTimeServer(Date date, long timeLong);

    void gc(Timer timer);

}

实现类如下

 

 

 

 @Stateless

public class TimeEAOImpl implements ITimeEAO {

 

    @Resource

    TimerService timerService;

 

    /**

     * 实际执行的方法

     *

     * @Timeout就是定义执行的方法

     */

    @Override

    @Timeout

    public void gc(Timer timer) {

       // TODO Auto-generated method stub

       System.out.println("timer.getInfo():" + timer.getInfo());

       System.out.println("建议服务器赶紧进行垃圾回收");

       System.gc();

    }

 

    /**

     * 对于定时器的一些设置

     */

    @Override

    public void setTimeServer(Date date, long timeLong) {

       /**

        * 每隔timeLong时间就执行一次gc方法

        */

       timerService.createTimer(date, timeLong,"执行任务");

    }

 

}

如果调用timerService.createTimer(date, timeLong)那么只执行一次。还有就是注意timeLong单位是秒。测试代码如下

 

    public void test01() throws NamingException {

       context = init();

       ITimeEAO imeEAO = (ITimeEAO) context.lookup("TimeEAOImpl/remote");

       imeEAO.setTimeServer(new Date(), 2);

    }

分享到:
评论

相关推荐

    JavaEE5学习笔记07-Web层与EJB集成总结

    ### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...

    JavaEE5学习笔记02-JNDI与RMI

    在JavaEE环境中,RMI经常与EJB结合使用,尤其是无状态SessionBean,因为它们不需要维持客户端的会话状态,适合RMI的轻量级通信模式。 当一个EJB被标记为远程接口时,它可以通过RMI在不同 JVM(Java Virtual ...

    javaee思维导图版笔记-吉林大学

    "javaee思维导图版笔记-吉林大学" 本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。...

    JavaEE2017最新版基础班学习笔记

    包括会话Bean(Session Beans)负责业务逻辑,实体Bean(Entity Beans)作为持久化对象,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。 6. **JMS (Java Message Service)**:JMS允许应用程序之间异步通信...

    javaee学习笔记

    - **会话Bean**:在整个用户会话期间保持,用于跟踪用户状态。 - **应用Bean**:在整个应用程序范围内共享,用于全局数据。 **自定义标签(Custom Tags)**提供了一种扩展JSP语法的方式,通过定义标记库描述符(TLD...

    Java/JavaEE 学习笔记

    Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...

    JavaEE基础笔记.zip

    分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),分别处理业务逻辑、持久化数据和消息通信。 5. **JMS(Java Message Service)**:JMS是JavaEE的消息中间件接口...

    JavaEE学习笔记

    EJB是JavaEE的核心,提供了三种类型的Bean:会话Bean(Session Beans)处理业务逻辑,实体Bean(Entity Beans)代表持久化数据,消息驱动Bean(Message-Driven Beans)处理消息队列。Spring框架则以其依赖注入和面向...

    J2EE学习笔记(J2ee初学者必备手册)

    第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean...

    达内培训笔记

    - **EJB(Enterprise JavaBeans)**:分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),用于实现业务逻辑和持久化数据。 - **JPA(Java Persistence API)与ORM*...

    javaWeb学习笔记+狂神说

    EJB是Java企业级应用的组件模型,分为会话bean、实体bean和消息驱动bean。它们提供了一种在分布式环境中构建可复用的、事务处理的服务器端组件的方法。虽然现代JavaEE应用更多采用轻量级框架如Spring,但了解EJB的...

    JAVA-EE-master (4).zip

    EJB分为三种类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)用于处理JMS消息。 4. **JMS**:Java Message Service允许在...

Global site tag (gtag.js) - Google Analytics