ejb即企业bean,用于部署企业应用。
企业bean是可以移植的,不仅仅是指可以移植到不同的jvm上,更重要的是可以移植到不同的应用服务器上,如同样的bean可以部署在WebLogic、WebSphere、jboss等服务器上。“一次编写,到处部署”WODA。
EJB是J2EE的一个子集,即J2EE服务器应该包含一个EJB容器,除此之外可能还有web 容器,用于控制servlet,jsp等组件的容器。EJB组件必须在EJB兼容的应用服务器上使用,应用服务器提供了bean所需要的其他诸如安全、事务、并发、网络等服务。EJB组件只能存活在EJB容器中。企业bean里的大部分方法都是由容器本身调用的,客户端绝对不可用直接调用企业bean的业务方法。bean就是实现业务逻辑的类,如果没有服务器,除了有bean来实现业务逻辑外,将一无所有。
每次客户向bean发出方法调用时,服务器都会介入到客户和bean之间,插入一些“服务”,如安全、事务等。EJB对象EJBObject用于截获客户对bean的调用。客户绝对不会与bean直接对话。只有服务器才能建立EJBObject对象,是在部署bean时实现的。
bean的三种类型:
实体bean:它的一个实例就是数据库表中的一条记录。
消息驱动bean:它可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动bean,如果想让消息驱动bean做点什么,客户必须向一个消息服务器发送一条消息。这说明消息驱动bean没有相应的EJBObject。它是JMS消息服务的消费者。
会话bean:实体bean是表示的是一种东西,会话bean表示的是一个过程。
有状态的bean,可以记住方法调用之间的会话状态,而无状态会话bean对于方法调用之间的客户情况则是什么也记不住。
构建bean的五个步骤:1,编写提供所有业务方法的bean类
2,为bean编写两个接口,也就是home接口和远程业务接口
3,创建一个xml部署描述文件,告诉服务器你的bean是什么,该怎么管理。这个部署描述文件的名字必须是ejb-jar.xml。
4,把bean,接口和部署描述文件放到一个ejb-jar文件里
5,用服务器开发商提供的工具把bean部署到服务器上。
1,首先建立bean,这里选择会话bean。注意实际应用中要想好选择什么bean,因为不能的bean实现的接口是不同的。
package sessionBean;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
//业务逻辑bean
public class AdviceBean implements SessionBean { //注意不实现组件接口,但必须有何组件接口相同的方法。
// 不建议实现组件接口,因为客户实际是调用EJBObject的对象的方法。客户端绝对不会和bean直接交互。
private String[] adviceStr = { // 要返回给客户的字符串
"helo", "second", "third" };
// 以下四个方法是SessionBean接口中定义的方法
public void ejbActivate() throws EJBException, RemoteException {
System.out.println("in ejbActivate");
}
public void ejbPassivate() throws EJBException, RemoteException {
System.out.println("in ejbPassivate");
}
public void ejbRemove() throws EJBException, RemoteException {
System.out.println("in ejbPassivate");
}
public void setSessionContext(SessionContext arg0) throws EJBException,
RemoteException {
System.out.println("in setSessionContext");
}
public String getAdvice() { // 业务方法
System.out.println("in get advice");
int random = (int) (Math.random() * adviceStr.length);
return adviceStr[random];
}
public void ejbCreate() { // 必须有这个方法,不是SessionBean接口的方法,
System.out.println("in ejbCreate");
}
}
package inf;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
//组件接口,申明所有的业务方法,要把客户想调用的方法在此声明,必须扩展EJBObject或EJBLocalObject接口
public interface Advice extends EJBObject { //EJBObject截获用户的请求
public String getAdvice() throws RemoteException; //该接口内的方法,都必须声明抛出RemoteException异常
}
package inf;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
//HOME接口,客户使用home接口来请求组件接口的一个引用。可以看成是bean的引用工厂。可以制作出bean的引用
public interface AdviceHome extends EJBHome { //必须扩展自EJBHome或EJBLocalHome
public Advice create()throws RemoteException,CreateException; //返回的是接口
}
客户端:
package client;
import java.rmi.RemoteException;
import inf.Advice;
import inf.AdviceHome;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
public class AdviceClient { //客户端如果调用远程的bean的
public static void main(String[] args) {
new AdviceClient().go();
}
private void go() {
try {
Context ct = new InitialContext();
Object o = ct.lookup("AdviceBean");
AdviceHome home = (AdviceHome) PortableRemoteObject.narrow(o,AdviceHome.class);
Advice advisor = home.create(); //客户端需要访问两个接口,需要实现这两个接口的桩类,否则编译不能成功。
System.out.println(advisor.getAdvice());
} catch (NamingException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
}
}
部署文件ejb-jar.xml
<?xml version="1.0" ?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.2//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_2.dtd">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>AdviceBean</ejb-name>
<home>inf.AdviceHome</home>
<remote>inf.Advice</remote>
<ejb-class>sessionBean.AdviceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
EJB中的角色和职责1,Bean的提供者
交付结果:ejb-jar文件(包括一个或多个bean和一个部署文件)
职责:编写和设计企业JavaBean,知道一个特定类型 的组件中应该有什么样的业务逻辑
2,应用组装人员
交付结果:ejb-jar文件(包括一个或多个bean和一个部署文件,这个部署文件不仅有bean提供者提供的信息,还有应用组装信息)。
职责:把一个或多个bean合并到一个更大规模的应用中。
3,部署人员
主要职责:将bean部署到服务器上。如果bean依赖于一个特定资源,将bean提供者指定的逻辑名映射为服务器上资源的实际名上。
分享到:
相关推荐
### EJB概述(下): Java数据库操作 #### Application Assembler程序组装器与EJB Beans提供者的角色 在深入了解EJB(Enterprise JavaBeans)时,我们不仅要关注其技术细节,还要理解不同参与者在构建EJB应用过程中的...
**EJB概述** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组成部分,主要用于构建可扩展、安全且事务处理能力强的企业级应用程序。EJB为开发人员提供了组件模型,使他们能够将业务逻辑从用户界面...
### EJB概述(上): Java数据库操作 #### EJB技术体系结构介绍 EJB(Enterprise JavaBeans)是一种基于Java的企业级应用开发模型,它通过组件化的形式为开发者提供了构建复杂业务逻辑的能力。EJB技术的核心在于它将...
吉林大学软构件和中间件技术
1. **EJB概述** - EJB是Java平台为企业级应用设计的组件模型,分为三种类型:Session Beans(会话Bean)、Message-driven Beans(消息驱动Bean)和Entity Beans(实体Bean)。 - Session Beans负责业务逻辑处理,...
一、EJB概述 EJB是一种组件模型,用于在Java EE环境中实现业务逻辑。它有三种主要类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。会话bean代表一次用户交互或...
一、EJB 概述 EJB 是 Java EE(Java Enterprise Edition)中的一种核心组件,用于开发企业级应用程序。EJB 是一种分布式对象技术,允许开发者创建高性能、可扩展、可靠的企业级应用程序。 二、EJB 的优点 EJB 的...
1. **EJB概述**:介绍EJB的历史、版本和基本概念,包括EJB 2.x和EJB 3.x的主要区别,以及EJB 3.x引入的简化和面向POJO的改进。 2. **EJB类型**:讲解三种主要的EJB组件——Session Beans(会话bean)、Message ...
EJB概述** EJB是Java EE(Java Platform, Enterprise Edition)的一部分,它提供了一种标准的组件模型,让开发者可以创建在服务器端运行的业务逻辑组件。这些组件由容器管理,负责提供服务如安全性、事务处理、生命...
1. **EJB概述**: EJB是一种面向服务的组件模型,它为开发企业级应用提供了标准API。EJB组件可以在Java EE容器中运行,由容器提供资源管理、事务处理、安全性、并发控制等服务。 2. **EJB类型**: - **会话bean...
EJB概述 EJB是一种组件模型,最初设计用于在Java EE(Java Platform, Enterprise Edition)环境中处理复杂的业务逻辑。EJB3是2006年发布的,相较于早期版本,它降低了学习曲线,引入了注解驱动的开发,消除了XML...
1. **EJB概述**: - EJB是Java EE(Java Platform, Enterprise Edition)的一部分,旨在简化企业级应用的开发,提供事务管理、安全性、持久性等服务。 - EJB分为三个主要组件:会话bean(Session Beans)、实体...
一、EJB概述 EJB是Java企业级应用的服务器端组件,它为开发分布式、面向服务的业务应用提供了框架。EJB容器负责管理EJB实例的生命周期,提供安全性、事务管理、持久化和并发控制等服务。EJB分为三种主要类型:会话...
1. **EJB概述**:EJB提供了一种标准的方法来构建分布式、多层的企业应用。它定义了服务器端组件的接口和生命周期管理,以及这些组件如何与客户端交互。 2. **EJB类型**: - **会话bean(Session Beans)**:它们...
**EJB概述** EJB是Java EE(Java Platform, Enterprise Edition)的一部分,主要设计用于处理服务器端的业务逻辑。它们分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean...
### EJB概述 EJB为开发者提供了标准的接口和容器管理服务,使得开发者可以专注于业务逻辑,而不必关心底层的复杂性,如事务管理、安全性和资源调度等。EJB分为三个主要组件类型: 1. **会话Bean(Session Beans)*...
**EJB概述** EJB是一种服务器端组件模型,它定义了三种核心组件:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。会话bean负责处理业务逻辑,实体bean则持久化数据,...
#### 一、EJB概述与工作流程 EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,专为构建大型分布式企业级应用而设计。它提供了一种在服务器端实现业务逻辑的方式,允许开发者将业务逻辑封装在组件中,从而...