企业Bean分为实体Bean、会话Bean和消息驱动Bean,其中会话Bean又分为有状态会话Bean和无状态会话Bean。
Enterprise Java Bean = EJB
|--Entity Bean
|--Session Bean
| |--Stateful Session Bean = SFSB
| |--Stateless Session Bean = SLSB
|--Message Driven Bean = MDB
Remote Method Invocation = RMI
Container Managed Persistent = CMP
Container Managed Relationships = CMR
Bean Managed Persistent = BMP
Container Managed Transaction = CMT
Bean Managed Transaction = BMT
EJB不支持嵌套事务。
Business Interface[EJBObject]
Home Interface[EJBHome]
Bean Class[EnterpriseBean]
Client通过JNDI找到Server的Stub,然后找到Home Interface,用Home Interface生成一个Business Interface,Business Interface代理了Bean Class。
Business Interface中的方法和Bean Class中的业务方法存在一一对应的关系,需要手工或者IDE来确保这一点。
接下来是从《Head First EJB》中的第一章EJB入门里实现的例子。
首先是Bean Class,
package com.bms;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class AdviceBean implements SessionBean {
private static final long serialVersionUID = 1L;
public String advice() {
return "this is for EJB 2.1";
}
@Override
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
@Override
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
@Override
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
@Override
public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {
// TODO Auto-generated method stub
}
}
接着是Business Interface,
package com.bms;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface Advice extends EJBObject {
public String advice() throws RemoteException;
}
最后是Home Interface,
package com.bms;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface AdviceHome extends EJBHome {
public Advice create() throws CreateException, RemoteException;
}
ejb-jar.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<display-name>bpm-ejb </display-name>
<!--
<ejb-client-jar>bpm-ejbClient.jar</ejb-client-jar>
-->
<enterprise-beans>
<session>
<display-name>AdviceBean</display-name>
<ejb-name>AdviceBean</ejb-name>
<home>com.bms.AdviceHome</home>
<remote>com.bms.Advice</remote>
<ejb-class>com.bms.AdviceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity/>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
最后部署在weblogic server上,增加一个JNDI对象。
文件weblogic-ejb-jar.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">
<!--weblogic-version:10.3.6-->
<wls:weblogic-enterprise-bean>
<wls:ejb-name>TaskBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>com/bms/TaskBeanRemote</wls:jndi-name>
<wls:local-jndi-name>com/bms/TaskBeanLocal</wls:local-jndi-name>
</wls:weblogic-enterprise-bean>
<wls:weblogic-enterprise-bean>
<wls:ejb-name>QueryBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>QueryBean</wls:jndi-name>
</wls:weblogic-enterprise-bean>
<wls:weblogic-enterprise-bean>
<wls:ejb-name>AdviceBean</wls:ejb-name>
<wls:stateless-session-descriptor></wls:stateless-session-descriptor>
<wls:jndi-name>AdviceBean</wls:jndi-name>
</wls:weblogic-enterprise-bean>
</wls:weblogic-ejb-jar>
这3个Java文件和两个部署描述的XML准备好了,就可以把整个EJB项目部署到weblogic上了。
客户端的调用代码如下:
package com.bms;
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
public class Ejb2InvocationTest {
public static void main(String[] args) {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7001");
p.put(Context.SECURITY_PRINCIPAL, "weblogic");
p.put(Context.SECURITY_CREDENTIALS, "welcome1");
InitialContext ctx;
try {
ctx = new InitialContext(p);
Object stub = ctx.lookup("AdviceBean");
AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(stub,
AdviceHome.class);
Advice bean = home.create();
System.out.println(bean.advice());
} catch (NamingException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
}
}
控制台打印出“this is for EJB 2.1”。
Done!!!!!!!!!!!!!
分享到:
相关推荐
EJB2.1/EJ2EE 规范教程,个人觉得很不错的
EJB 2.1 入门操作实践,自己录制的,方便同学们学习。
EJB 2.1 技术规范pdf文档
EJB 2.1中实现Web Service.doc
主要描述用EClipse xDoclet开发EJB的步骤,和注意事项
从EJB 2.1迁移到EJB 3.0 的實例
EJB2.1中的新特性主要集中于有关SOAP和WSDL的Web服务,包括两种新推出的Web服务应用程序接口(JAX-RPC和JAXM)。它们可以用来与其他Web服务模块通信,并适当地在Web模块中运用无状态的bean和消息驱动bean。也就是说,...
入门及教材 逐步讲解如何在myeclipse下搭建SessionBean 和 EntityBean 如何部署至jboss 如何测试 ejb为2.1规范
标签:agent-ejb-2.1.2.jar,agent,ejb,2.1.2,jar包下载,依赖包
本书是关于EJB 2.1的经典书籍,是EJB开发者必备的参考书。全书共分为3篇。第1篇对EJB编程基础进行介绍,它概要性地对EJB进行了阐述,无论是EJB初学者,还是资深EJB专家,这部分内容都值得阅读;第2篇重点关注EJB编程的具体...
该示例使用Eclipse 3.3 Europa IDE、JDK 6.0... EJB 3.0相比EJB 2.1的应用书写比较简单,配置也很简单。但是却保留了EJB 2.1强大的分布式功能,它应该未来流行的企业级应用技术。如果有问题,请mail: arklis@126.com
pdf书籍加源代码 非常不错的一本ejb2.1的书籍,比较有针对性,内容也少,只有300页,比较适合中级读者
ejb2.1规范下编写的cmp与bmp登陆实例
本书是阐述ejb2.1的相关知识,最令人兴奋的就是ejb的规范
本书是关于EJB 2.1的经典书籍,是EJB开发者必备的参考书。全书共分为3篇。第1篇对EJB编程基础进行介绍,它概要性地对EJB进行了阐述,无论是EJB初学者,还是资深EJB专家,这部分内容都值得阅读;第2篇重点关注EJB编程...
maven-ejb-plugin-2.1.jar
官方版本,亲测可用
官方版本,亲测可用
Spring 是分层的 Java SE/EE 应用 full-... 2003 年, EJB2.1 发布 2006 年, EJB3.0 发布 Rod Johnson(spring 之父) Expert One-to-One J2EE Design and Development(2002) 阐述了 J2EE 使用 EJB 开发设计的优