EJB3 - Session bean
description
其實session bean是最一開始就看的, 回過頭來看再記重點有點心浮氣躁.reference
EJB3 in Action - CH3 - Building business logic with session beansFocal Points
- 屬性有name, mappedName, description
- name屬性用來指定bean的name, 有的container用來和JNDI綁定. 如果name沒有設定就會是bean的class name.
- mappedName是vender-specific(特定于厂商), 也就是依不同container有不同的情形. 以GlassFish來說是將mappedName的值綁定到JNDI name.
- 一個@Remote interface可以繼承java.rmi.Remote
public interface TestRemote extends Remote { ... }
就算程序裡面沒寫繼承Remote, container還是會在byte code階段插入繼承Remote的動作 - 沒有程序上繼承java.rmi.Remote的好處就是不用處理java.rmi.RemoteException
- @Remote business interface有個需求就是所有的參數與回傳值都必須是Serializable, 因為這樣才能通過RMI
@Stateful(name="SimpleStatefulBean", mappedName="ejb/SimpleStatefulBean") public class SimpleStatefulBean implements SimpleStatefulRemote { private Logger logger = Logger.getLogger("SimpleStatefulBean"); private byte[] b = new byte[100000]; { for ( int i = 0; i < b.length; i++ ) { b[i] = (byte) 100; } } public String simpleShow() { return this + ":This is simple show" + b; } @PostConstruct public void postConstruct() { logger.info("create " + this); } @PreDestroy public void preDestroy() { logger.info("destroy " + this); } @PostActivate public void postActivate() { logger.info("activate " + this); } @PrePassivate public void prePassivate() { logger.info("passivate " + this); } @Remove public void remove() { logger.info("remove " + this); } }放interceptor的lifecycle callback
@Stateless
@Interceptors(value={SimpleInterceptor.class})
public class SimpleStatelessBean implements SimpleStatelessLocal {
private Logger logger = Logger.getLogger("SimpleStatelessBean");
@Resource(name="TestQueueConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(name="jms/TestQueueDestination")
private Destination destination;
public String simpleShow() {
try {
Connection conn = connectionFactory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText("This is text message");
messageProducer.send(message);
messageProducer.close();
session.close();
conn.close();
} catch (JMSException ex) {
throw new RuntimeException( ex );
}
return this + ":This is simple show";
}
}
public class SimpleInterceptor {
Logger logger = Logger.getLogger("SimpleStatefulBeanInterceptor");
@PostConstruct
public void onCreate(InvocationContext ic) {
try {
logger.info("create " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
@AroundInvoke
public Object aroundInvoke(InvocationContext ctx) throws Exception {
logger.info(ctx + " is invoked.");
return ctx.proceed();
}
@PreDestroy
public void onDestroy(InvocationContext ic) {
try {
logger.info("destroy " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
stateful bean的@PrePassivate, @PostActivate也可放interceptor
@Interceptors(value={SimpleInterceptor.class})
@Stateful(name="SimpleStatefulBean", mappedName="ejb/SimpleStatefulBean")
public class SimpleStatefulBean implements SimpleStatefulRemote {
private byte[] b = new byte[100000];
{
for ( int i = 0; i < b.length; i++ ) {
b[i] = (byte) 100;
}
}
public String simpleShow() {
return this + ":This is simple show" + b;
}
@Remove
public void remove() {
Logger.getLogger("SimpleStatefulBean").info("remove " + this);
}
}
public class SimpleInterceptor {
@PostConstruct
public void onCreate(InvocationContext ic) {
try {
Logger.getLogger(SimpleInterceptor.class.getName()).info("create " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
@PostActivate
public void onActivate(InvocationContext ic) {
try {
Logger.getLogger(SimpleInterceptor.class.getName()).info("activate " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
@PrePassivate
public void onPassivate(InvocationContext ic) {
try {
Logger.getLogger(SimpleInterceptor.class.getName()).info("passivate " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
@AroundInvoke
public Object aroundInvoke(InvocationContext ctx) throws Exception {
Logger.getLogger(SimpleInterceptor.class.getName()).info(ctx + " is invoked.");
return ctx.proceed();
}
@PreDestroy
public void onDestroy(InvocationContext ic) {
try {
Logger.getLogger(SimpleInterceptor.class.getName()).info("destroy " + this);
ic.proceed();
} catch (Exception ex) {
Logger.getLogger(SimpleInterceptor.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Stateless(name="SimpleStatelessBean1") public class SimpleStatelessBean1 implements SimpleStatelessLocal { ... } @Stateless(name="SimpleStatelessBean2") public class SimpleStatelessBean2 implements SimpleStatelessLocal { ... } public class SimpleStatelessServlet extends HttpServlet { @EJB(beanName="SimpleStatelessBean1") private SimpleStatelessLocal simpleStatelessLocal1; @EJB(beanName="SimpleStatelessBean2") private SimpleStatelessLocal simpleStatelessLocal2; ... }
发表评论
-
JMS(2)
2009-06-17 16:02 642异步队列消息的接收有一点区别,但发送的代码不用改变: ... -
JMS(1)
2009-06-17 16:00 700开发任何JMS应用之前,首先要做的事是在应用服务器中配置JMS ... -
EJB3(6)
2009-06-17 13:49 735有状态会话bean的开发,首先创建远程接口: @Rem ... -
EJB3(5)
2009-06-17 13:47 773Web服务客户端可以通过bean的Web服务端点实现类来访问无 ... -
WebService(1)
2009-06-17 13:43 788新建web项目,然后创建一个WEB服务: @WebServ ... -
EJB3(4)
2009-06-17 13:39 643同一个会话bean也可以实现多个远程接口,不过代码上有些地 ... -
EJB3(3)
2009-06-17 13:16 741如果一个远程接口有两个实现,需要用mappedName来区 ... -
EJB3(2)
2009-06-17 13:12 614一个会话bean即可以远程访问,也可以本地访问,尽管这种现象不 ... -
EJB3(1)
2009-06-17 13:06 968以下代码建立在glassfish v2基础上: 新建一个EJ ... -
Log4j全面配置参考
2009-05-27 16:49 751在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件 ... -
Hibernate3.2 核心包作用
2009-05-17 15:47 671Hibernate3.2 核心包作用 ... -
Spring集成Hibernate的BeanCreationException解决方法
2009-05-12 17:58 876现象:严重: Exception sending conte ...
相关推荐
**EJB2 SessionBean**是Java企业版...尽管现代Java EE(现称为Jakarta EE)已经发展到了EJB3.x和更高级别,但理解EJB2 SessionBean的基本概念和工作原理对理解整个企业级应用开发的历史和演进仍然是非常有价值的。
### EJB3图文教程之开发Session Bean:详细解析与实践指南 #### 一、环境搭建:JBuilder2007与JBoss4.0的完美结合 在开始EJB3.0的Session Bean开发之前,首先需搭建一个适宜的开发环境。本教程将指导你如何在...
它可以是无状态的(Stateless Session Bean),为每个请求创建新的实例,或者有状态的(Stateful Session Bean),维护与特定客户端会话的状态。 - **Entity Bean**:用于表示数据库中的持久化对象,实现业务实体的...
3. **本地接口的SessionBean** 本地接口通常用于同一应用内部的组件间通信。在示例中,`EJB-HelloWorld`可能包含了名为`HelloWorldLocal`的本地接口,其中定义了业务方法,如`sayHello()`。然后,在Bean类中,通过`...
**EJB Session Bean详解** Enterprise JavaBeans (EJB) 是Java平台企业版(Java EE)的核心组成部分,它为构建可扩展、安全且事务处理的分布式应用程序提供了强大的框架。EJB中的Session Bean是其中一类重要的组件...
在"ejb sessionbean demo"中,我们主要探讨的是如何使用EJB的Session Bean进行开发和演示。Session Bean通常用于实现业务逻辑,它们可以是无状态的,意味着每个请求都会创建一个新的Bean实例,不保留任何先前会话的...
**企业级JavaBeans (EJB) 3.0:核心概念与Session Bean详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建可部署在服务器端的企业级应用的重要组件模型。EJB 3.0是EJB规范的一个重大...
3. **Entity Beans 3.0(EJB 3.0引入)**:简化了Entity Bean的使用,采用了注解(Annotations)方式,使得持久化过程更为简洁,与JPA(Java Persistence API)紧密集成。 **EJB的生命周期** 无论是Session Bean...
【ejb入门录像 sessionBean】是针对企业级Java应用(Enterprise JavaBeans,简称EJB)技术的初学者设计的一段教学视频。EJB是Java EE(Java Platform, Enterprise Edition)框架的重要组成部分,它提供了一种标准的...
3. **部署描述符** - 编写ejb-jar.xml文件,其中包含关于EJB的元数据,如Bean的类型、JNDI名称等。 4. **容器配置** - 在应用服务器中配置EJB容器,指定EJB的部署位置和资源。 5. **客户端调用** - 客户端通过JNDI...
通过上述步骤,我们不仅学习了如何在JBuilder2007中配置和使用JBoss4.0,还掌握了EJB3.0 SessionBean的开发流程,从项目创建、SessionBean设计、方法实现到最终的部署和测试。这为开发复杂的企业级应用提供了一个...
1. SessionBean类:包含@Stateless或@Stateful注解的Java类,表示业务逻辑。 2. EntityBean类:带有@Entity注解的Java类,对应数据库表的实体。 3. 数据源配置文件:如context.xml或application.xml,定义JNDI数据源...
3. **EJB3 Session Bean**:创建EJB3 Session Bean来封装业务逻辑。Session Bean可以调用JPA API来操作数据库,如`EntityManager`和`EntityManagerFactory`。使用`@Stateless`或`@Stateful`注解标记Bean的类型。 4....
对于无状态session bean(Stateless session bean),EJB容器会在启动时预先创建一定数量的bean实例放入实例池。当客户端请求服务时,容器会从池中取出一个实例,处理完请求后,再将实例放回池中。这样,池中的每个...
SessionBean是Java EE(Enterprise Edition)中企业级JavaBeans(EJB)的一部分,主要用于实现服务器端的业务逻辑。它是一个可复用的组件,可以处理客户端的会话状态,提供了在分布式环境中持久化用户会话的能力。本...
JavaBean和Session Bean是Java企业级应用开发中的重要概念,特别是在使用Enterprise JavaBeans(EJB)技术时。本文将深入探讨这两个概念,以及如何在实际项目中使用它们。 首先,让我们了解什么是JavaBean。...
在EJB中,消息驱动bean(Message-Driven Bean,MDB)是一种特殊类型的bean,它用于处理来自消息中间件(如JMS,Java Message Service)的消息。在这个“EJB消息驱动bean Demo”中,我们将深入探讨EJB MDB和JMS如何...