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框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...
在JavaEE环境中,RMI经常与EJB结合使用,尤其是无状态SessionBean,因为它们不需要维持客户端的会话状态,适合RMI的轻量级通信模式。 当一个EJB被标记为远程接口时,它可以通过RMI在不同 JVM(Java Virtual ...
"javaee思维导图版笔记-吉林大学" 本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。...
包括会话Bean(Session Beans)负责业务逻辑,实体Bean(Entity Beans)作为持久化对象,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。 6. **JMS (Java Message Service)**:JMS允许应用程序之间异步通信...
- **会话Bean**:在整个用户会话期间保持,用于跟踪用户状态。 - **应用Bean**:在整个应用程序范围内共享,用于全局数据。 **自定义标签(Custom Tags)**提供了一种扩展JSP语法的方式,通过定义标记库描述符(TLD...
Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...
分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),分别处理业务逻辑、持久化数据和消息通信。 5. **JMS(Java Message Service)**:JMS是JavaEE的消息中间件接口...
EJB是JavaEE的核心,提供了三种类型的Bean:会话Bean(Session Beans)处理业务逻辑,实体Bean(Entity Beans)代表持久化数据,消息驱动Bean(Message-Driven Beans)处理消息队列。Spring框架则以其依赖注入和面向...
第四章 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*...
EJB是Java企业级应用的组件模型,分为会话bean、实体bean和消息驱动bean。它们提供了一种在分布式环境中构建可复用的、事务处理的服务器端组件的方法。虽然现代JavaEE应用更多采用轻量级框架如Spring,但了解EJB的...
EJB分为三种类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)用于处理JMS消息。 4. **JMS**:Java Message Service允许在...