??xml version="1.0" encoding="utf-8" standalone="yes"?>
1.对于直接定义在BeancM的回调,其格式应该是public void <Method()>?br />
2.对于Beancd独提?单个或多?回调监听器类(拦截?而言Q其格式是public void<METHOD(InvocationContext ctx)>。java.interceptor.InvocationContext提供了调用上下文信息?br />
3.不能够抛出应用异常,但可以抛行期异常。如果在事务中抛Zq行期异常,事务回滚?br />
4.不能够ؓ(f)回调监听器实施依赖注入?br />
注释
描述
典型实现(无状?
典型实现(有状?
@PostConstruct
在实例化Beancd,Ejb容器?x)调用?/span>
Ҏ(gu)Bean实例的需求来完成相应的初始化工作Q比如将传入的参数Dl成员变量?/span>
Ҏ(gu)Bean实例的需求来完成相应的初始化工作Q比如将传入的参数D值给成员变量?/span>
@PrePassivate
在挂起Bean实例前,容器?x)立卌用?׃内存中存在太多的Bean实例Q因此需要将?x)话状态保存到盘?
未用?/span>
释放Bean实例可能持有的Q何资源?/span>
@PostActivate
在激zBean实例后,容器?x)立卌用?׃客户需某Bean实例Q因此需要将以前的会(x)话状态交换到内存?
未用?/span>
Bean实例重新获得所需要的M资源Q比如哪些在执行@PrePassivate回调期间释放的资源?/span>
@PreDestroy
在结束对@RemoveҎ(gu)的调用之后,而在销毁Bean实例之前QEjb容器?x)立卌用?/span>
为销毁Bean实例做准备。释攑ַ分配l它的所有资源?/span>
为销毁Bean实例做准备。释攑ַ分配l它的所有资源?/span>
当你?/span>EJB3?/span>deploy to jboss的情况下Q?/span>ejb client调用EJB3分两U情况:(x)
1) 发布?/span>jboss?/span>web app作ؓ(f)client来调?/span>EJB
EJB和调?/span>EJB?/span>WEB 应用都发布在Jboss 集成环境下。在Jboss下发?/span>WEB 应用Q需要把WEB 应用打包?/span>war 文g。另?/span>在此环境下调?/span>EJB 不需要把EJB 的接口类攑օ/WEB-INF/classes/目录?/span>Q否则在调用Stateful Bean ׃(x)发生cd冲突Q引发下面的例外
java.lang.ClassCastException: $Proxy84
org.apache.jsp.StatefulBeanTest_jsp._jspService(org.apache.jsp.StatefulBeanTest_jsp:55)
如果EJB和调?/span>EJB?/span>WEB 应用都发布在Jboss 集成环境下,那么EJB?/span>Local?/span>Remote接口都可以被调用
发布?/span>Jboss 下的客户端不需要明设|?/span>JNDI 讉K的上下文环境Q可以直接通过
InitialContext ctx = new InitialContext()
获得上下文环境,容器?x)自动赋l?/span>InitialContext 正确的环境,例如Q?/span>
InitialContext ctx = new InitialContext();//客户端和jbossq行在同一?/span>jvm,不需要传?/span>props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
如果给InitialContext 讄了访问属性,反而会(x)带来不可UL的问?/span>Q因Z的应用有可能部v?/span>weblogic {应用服务器。(本教E考虑到部分同学可能需要在独立?/span>J2se 中调?/span>EJBQؓ(f)了教学的方便Q把讉K属性都设上了,q样不管?/span>jboss?/span>j2se 或独?/span>tomcatQ都能获得正的InitialContextQ?/span>
2) 在单独的Tomcat?/span>J2SEQ如junit testQ中调用EJB
在正式的生环境下,大部分调?/span>EJB 的客L(fng)可能是单独的Tomcat ?/span>Resin。下面介l如何在单独?/span>Tomcat服务器中调用EJB?/span>在单独的Tomcat 服务器中调用EJB 需要有以下步骤Q?/span>
A) 把调?/span>EJB 所依赖?/span>Jar 包拷贝到tomcat 下的/shared/lib 目录?/span>WEB 应用?/span>WEB-INF/lib?/span>,所依赖?/span>Jar?/span>jboss 安装目录?/span>client目录?/span>。你可以?/span>eclipse里设|一个自定义?/span>library “ejb3 library”Q把q些jars都添加到?/span>library里,然后在你?/span>EJB project里把“ejb3 library” add to classpath
B) ?/span>EJB 接口拯到应用的/WEB-INF/classes/目录?/span>
C) 客户端访?/span>EJB 时必L设|?/span>InitialContext 环境属性,代码如下:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);//客户端和jbossq行在同一?/span>jvm,不需要传?/span>props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
Tip: 除了上面通过编码设|环境属性的方式外,q可以在应用?/span>classpath 下放|一?/span>jndi.properties 文g
注意Q在单独?/span>tomcat?/span>J2SE里不能调?/span>EJB ?/span>Local 接口Q因Z?/span>JBOSS 不在同一?/span>VM 中?/span>J2se中调?/span>EJB3 同样需要把上述jar ?/span>EJB 接口攄在应用的c\径下?/span>(如果?/span>JBossQ则需要把JBoss_HOME/client下的 jbossall-client.jar ?/span>jnp_client.jar引入C的工E里)