企业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!!!!!!!!!!!!!
分享到:
相关推荐
【Xdoclet生成SessionBean和EntityBean代码(初识ejb)】 Xdoclet是一个强大的文档生成工具,尤其在Java Enterprise Edition(JEE)环境中,它能够自动生成EJB(Enterprise JavaBeans)所需的代码和配置文件,从而...
#### 第一章 初识Java ##### 1.1 Java简介 - **定义**: Java是一种高级的、面向对象的编程语言,它支持跨平台特性,即“一次编写,到处运行”(Write Once, Run Anywhere, WORA)。Java程序经过编译后会转换成字节...
第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的安装与配置 1 1.2.2 MyEclipse 7.0的安装和运行 4 1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的...
javaee电子商城系统课程设计样本.doc
scratch少儿编程逻辑思维游戏源码-糖果大爆险.zip
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
GIS安装施工综合方案.doc
内容概要:本文详细介绍了选题系统源码,涵盖PHP、CSS、JavaScript和MySQL四种核心技术。系统采用B/S架构,支持管理员、审核员、教师和学生四种身份登录,每种身份有独立的功能权限。文中提供了详细的环境搭建指南,如使用phpStudy和Navicat进行项目管理和数据库操作。此外,还展示了关键代码片段,如登录验证、权限管理、数据库设计以及界面优化方法。同时,针对性能优化提出了建议,如解决N+1查询问题的方法。 适合人群:适用于有一定编程基础,尤其是对PHP和Web开发感兴趣的开发者和技术爱好者。 使用场景及目标:① 学习并掌握B/S架构的应用开发流程;② 实践多角色登录和权限管理的具体实现;③ 提升Web应用的界面优化和用户体验;④ 掌握数据库设计和性能优化技巧。 其他说明:本文不仅提供了完整的代码示例,还包括了详细的开发文档和支持材料,帮助读者快速上手并深入理解整个项目的构建过程。
scratch少儿编程逻辑思维游戏源码-下水道冒险猫.zip
scratch少儿编程逻辑思维游戏源码-下雨时向北的路.zip
内容概要:本文深入探讨了三相下垂双逆变器同步并联控制技术,重点介绍了下垂控制的基本原理及其在微电网中的应用。文章详细解释了下垂控制如何通过调整频率和电压幅值来实现负载的自动分配,并讨论了在多台逆变器并联时可能出现的环流问题以及解决方案,如虚拟阻抗法。此外,还介绍了同步环节的关键技术,特别是改进型锁相环的应用,并提供了具体的实现代码示例。最后,文章分享了一些实用的调试技巧和经验,强调了参数整定的重要性。 适用人群:从事电力电子、微电网控制领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解三相下垂双逆变器同步并联控制技术的工程师和科研人员,旨在帮助他们掌握核心技术,解决实际工程中的问题。 其他说明:文中提供的代码示例和调试方法有助于读者更好地理解和应用相关技术,提高系统的稳定性和性能。
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
GEPLC机组自动化装置编程使用说明书.doc
scratch少儿编程逻辑思维游戏源码-我的领土.zip
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-我的世界 MMO V1.6.zip
scratch少儿编程逻辑思维游戏源码-坦克(1).zip
GSM移动通信网容量解决方案.doc
scratch少儿编程逻辑思维游戏源码-天台狂飙.zip