企业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!!!!!!!!!!!!!
分享到:
相关推荐
**企业级JavaBeans(EJB)2.1详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的组件模型。EJB 2.1是其第二个主要版本,发布于2003年,是Java EE(Java Platform, Enterprise Edition)的...
EJB2.1/EJ2EE 规范教程,个人觉得很不错的
《企业JavaBeans (EJB) 2.1规格标准》:构建分布式商业应用的基石 在探讨企业级软件开发的领域内,企业JavaBeans(EJB)架构自诞生以来便成为了构建可扩展、事务处理及多用户安全的分布式业务应用程序的关键技术之...
【Eclipse xDoclet 开发EJB2.1】是一个关于使用Eclipse集成开发环境(IDE)配合xDoclet工具来开发Enterprise JavaBeans (EJB) 2.1版本的教程。EJB是一种Java技术,用于构建可部署在Java应用服务器上的组件,主要用于...
在EJB 2.1中实现Web Service是一个关键的技术进步,这一版本的更新主要针对了对Web Service的支持,这是由于企业级JavaBean(EJB)需要适应Web Service的需求,同时也应对了微软.NET框架的挑战。EJB 2.1通过引入一...
【EJB 2.1 到 EJB 3.0 迁移详解】 EJB (Enterprise JavaBeans) 是 Java 平台中用于构建分布式企业级应用程序的重要组件模型。EJB 3.0 是一个重大改进,它显著简化了EJB的开发流程,降低了对开发者的技术门槛。从 ...
### 解析J2EE1.4新特性(4)-EJB2.1的新特性 #### 一、EJB2.1中新特性的综述 EJB2.1(Enterprise JavaBeans 2.1规范)是Java 2 Platform Enterprise Edition (J2EE) 1.4的一部分,它带来了一系列重要的新功能和技术...
《EJB2的3本好书第3本 EJB Cookbook》是一本专注于EJB2.1实践操作的书籍,旨在帮助中级开发者快速理解和掌握EJB2.1的关键概念和最佳实践。 **EJB核心概念** 1. **会话Bean(Session Beans)**:会话Bean作为客户端...
【Xdoclet生成SessionBean和EntityBean代码(初识ejb)】 Xdoclet是一个强大的文档生成工具,尤其在Java Enterprise Edition(JEE)环境中,它能够自动生成EJB(Enterprise JavaBeans)所需的代码和配置文件,从而...
在 ejb2.rar_bmp ejb2_ejb2_ejb2 cmp b 这个压缩包中,我们看到的是针对EJB 2.1规范的一个登录实例,它涉及到了两种主要的实体Bean管理策略:CMP(Container-Managed Persistence,容器管理持久化)和 BMP(Bean-...
EJB 2.1是EJB的一个早期版本,尽管在功能上不如后来的EJB 3.x简洁和灵活,但在许多遗留系统中仍然广泛使用。 "agent-ejb-2.1.6.jar"这个文件名暗示了这是一个EJB模块,其版本为2.1.6,且被封装在.jar(Java Archive...
标签: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
1. **消除复杂接口与回调方法**:EJB2.1要求开发者创建多个接口并实现冗余的回调方法,而EJB3.0则简化了这一流程,消除了不必要的Remote、Home、EJB接口,大大减少了开发工作量。 2. **采用POJO模型**:实体Bean在...
开发EJB 2.1应用时,首先创建一个新的EJB项目,命名为ex8ejb2,指定目标运行时环境和EJB模块版本。接着,编写组件接口(如Advice.java)和Home接口(如AdviceHome.java),它们分别扩展了EJB的相关接口。然后,实现...
本书是阐述ejb2.1的相关知识,最令人兴奋的就是ejb的规范