[转帖]EJB base_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2057 | 回复: 1   主题: [转帖]EJB base        下一篇 
大红薯
注册用户
等级:少校
经验:1440
发帖:159
精华:0
注册:2011-7-21
状态:离线
发送短消息息给大红薯 加好友    发送短消息息给大红薯 发消息
发表于: IP:您无权察看 2015-3-24 9:20:03 | [全部帖] [楼主帖] 楼主

EJB base


第一章 教程提示 
第二章 EJB技术概述 
2.1 简介 
2.2 两层和三层环境 

Two-tier Computing Environments: Application -----------network--------> Database Server


三层    客户机-------》应用程序服务器--------》数据库服务器 

第三章 EJB规范 
3.2 EJB容器 
容器容纳和管理 Enterprise Bean 
Java Web 服务器容纳 Servlet 
HTML浏览器容纳 Java Applet 

EJB 容器在运行时管理 Enterprise Bean 的各个方面,包括远程访问 bean、安全性、持续、事务、并行性和资源的访问与合用。 

EJB Container >Transaction Management
>Persistence Management
>Security Management
>EJBContext, JNDI ENC
>Callback Methods


由于客户机应用程序不能直接访问 bean -- 容器位于客户机和 bean 之间。 

Enterprise Bean 通过以下三种机制之一与容器交互: 
回调方法 
每个 bean 都会实现 EnterpriseBean 接口的子类型,该接口定义了一些方法,称作回调方法。每个回调方法在 bean 的生命周期期间向它提示一个不同事件,当容器要合用某个 bean、将其状态存储到数据库、结束事务、从内存中除去该 bean 等操作时,它将调用这些方法来通知该 bean。回调方法可以让 bean 在事件之前或之后立即执行内部调整。 

EJBContext接口 
每个 bean 都会得到一个 EJBContext 对象,它是对容器的直接引用。EJBContext 接口提供了用于与容器交互的方法,因此那个 bean 可以请求关于环境的信息,如其客户机的身份或事务的状态,或者 bean 可以获取它自身的远程引用。 

Java 命名和目录接口 (JNDI) 
JNDI 是 Java 平台的标准扩展,用于访问命名系统,如 LDAP、NetWare、文件系统等。每个 bean 自动拥有对某个特定命名系统(称作环境命名上下文 (ENC))的访问权。ENC 由容器管理,bean 使用 JNDI 来访问 ENC。JNDI ENC 允许 bean 访问资源,如 JDBC 连接、其它 Enterprise Bean,以及特定于该 bean 的属性。 

3.5 远程和本地接口 
远程和本地接口分别扩展 javax.ejb.EJBObject 和 javax.ejb.EJBHome 接口。这些 EJB 接口类型定义了一组标准的实用程序方法,并为所有远程和本地接口提供了常用基本类型。 

Remote Interface:java.rmi.Remote ----->javax.ejb.EJBObject ------->Customer
Home Interface: java.rmi.Remote ----->javax.ebj.EJBHome -------->CustomerHome
CustomerHome home = // ... obtain a reference that implements the home interface.
// Use the home interface to create a
// new instance of the Customer bean.
Customer customer = home.create(customerID);
// using a business method on the Customer.
customer.setName(someName);
The customer interface:
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Customer extends EJBObject {
      public Name getName() throws RemoteException;
      public void setName(Name name) throws RemoteException;
      public Address getAddress() throws RemoteException;
      public void setAddress(Address address) throws RemoteException;
}


实体 Bean,它表示持久商业对象(数据存储在数据库中的商业对象)。实体 Bean 表示数据库中的商业数据,并添加特定于该数据的行为。 

会话 Bean 

import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface HotelClerk extends EJBObject {
      public void reserveRoom(Customer cust, RoomInfo ri, Date from, Date to)
      throws RemoteException;
      public RoomInfo availableRooms(Location loc, Date from, Date to)
      throws RemoteException;
}


HotelClerk bean 充当代理程序,因为它代表用户执行任务,但它自己在数据库中并不是持久的。您不需要有关 HotelClerk 的信息;您需要旅馆店员为您执行任务。这是会话 Bean 的典型行为。 

实体Bean 

import javax.ejb.EntityBean;
public class CustomerBean implements EntityBean {
      Address myAddress;
      Name myName;
      CreditCard myCreditCard;
      snip getter and setter
      ...
}
Bean Class : javax.ejb.EnterpriseBean -- > javax.ejb.EntityBean -- > CustomerBean


3.9 生命周期方法 

import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.rmi.RemoteException;
public interface CustomerHome extends EJBHome {
      public Customer create(Integer customerNumber) throws RemoteException, CreateException;
      public Customer findByPrimaryKey(Integer customerNumber) throws RemoteException, FinderException;
      public Enumeration findByZipCode(int zipCode) throws RemoteException, FinderException;
}


create() 方法用于创建新的实体。这将在数据库中产生新的记录。本地接口可能有许多 create() 方法。每个 create() 的自变量数量和数据类型由 bean 开发人员指定,但返回类型必须是远程接口数据类型。这种情况下,在 CustomerHome 接口上调用 create() 将返回 Customer 的实例。 

第四章 实体Bean 
实体Bean: 容器管理的持续(CMP)   bean管理的持续(BMP) 
容器管理的持续 
容器管理的字段可以是任何原语数据类型或可串行化类型。本例中使用原语 int (customerID) 和可串行化对象(Address、Name、CreditCard)。 

4.4 本地接口 

public interface CustomerHome extends javax.ejb.EJBHome {
      public Customer create(Integer customerNumber) throws RemoteException,CreateException;
      public Customer create(Integer customerNumber, Name name) throws RemoteException,CreateException;
      public Customer findByPrimaryKey(Integer customerNumber) throws RemoteException, FinderException;
      public Enumeration findByZipCode(int zipCode) throws RemoteException, FinderException;
}


调用本地接口示例: 

CustomerHome home = // Get a reference to the CustomerHome object
Name name = new Name("John", "W", "Smith");
Customer customer = home.create(new Integer(33), name);


4.5 远程接口 

import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Customer extends EJBObject {
      public Name getName() throws RemoteException;
      public void setName(Name name) throws RemoteException;
      public Address getAddress() throws RemoteException;
      public void setAddress(Address address) throws RemoteException;
      public CreditCard getCreditCard() throws RemoteException;
      public void setCreditCard(CreditCard card) throws RemoteException;
}


远程接口调用示例: 

Customer customer = // ... obtain a remote reference to the bean
// get the customer's address
Address addr = customer.getAddress();
// change the zip code
addr.zip = "56777";
// update the customer's address
customer.setAddress(addr);


4.6 回调方法 
回调方法在 javax.ejb.EntityBean 接口中定义,此接口由所有实体 Bean 实现,包括 CustomerBean 类。 

public interface javax.ejb.EntityBean {
      public void setEntityContext();
      public void unsetEntityContext();
      public void ejbLoad();
      public void ejbStore();
      public void ejbActivate();
      public void ejbPassivate();
      public void ejbRemove();
}


使用回调方法的CustomerBean: 

import javax.ejb.EntityBean;
public class CustomerBean implements EntityBean {
      int customerID;
      Address myAddress;
      Name myName;
      CreditCard myCreditCard;
      EntityContext ejbContext;
      // CALLBACK METHODS
      public void setEntityContext(EntityContext cntx) {
            ejbContext = cntx
      }
      // BUSINESS METHODS
      public void setCreditCard(CreditCard card) {
            if (card.type.equals("WorldWide"))
            if (ejbContext.isCallerInRole("Manager"))
            myCreditCard = card;
            else
            throw new SecurityException();
            else
            myCreditCard = card;
      }
      ...snip...


4.8 Bean管理的持续 
bean 使用数据库 API(通常是 JDBC)来读取其字段并将字段写入数据库,但容器会告诉它何时执行每个同步操作,并会自动管理 bean 的事务。bean 管理的持续可以让 bean 开发人员灵活地执行对于容器来说太过于复杂的持续操作,或者使用容器不支持的数据源 -- 例如,定制或旧的数据库。 

public class CustomerBean_BMP extends CustomerBean {
      public void ejbLoad() {
            // override implementation
      }
      public void ejbStore() {
            // override implementation
      }
      public void ejbCreate() {
            // override implementation
      }
      public void ejbRemove() {
            // override implementation
      }
      private Connection getConnection() {
            // new helper method
      }
}


ejbLoad() 和 ejbStore() 方法必须包括数据库访问逻辑,只有这样,当 EJB 告诉 bean 要装入和存储数据时,它才能这么做。容器会在适当时自动执行 ejbLoad() 和 ejbStore() 方法。 

ejbCreate() 方法将新记录插入数据库,而 ejbRemove() 方法从数据库中删除实体的数据。 

获得ID Integer primaryKey = (Integer)ejbContext.getPrimaryKey(); 

第五章 会话Bean 
会话 Bean 用于管理实体 Bean 和其它会话 Bean 的交互、访问资源,它们通常代表客户机执行任务。会话 Bean 对应于“模型-视图-控制器”体系结构中的控制器,因为它们都封装三层体系结构中的商业逻辑。 
会话Bean有两种基本类型:无状态和有状态。 

5.2 无状态会话Bean 
无状态会话 Bean 是没有状态的,它们更易于 EJB 管理,因此它们处理请求更快且使用较少资源。但是这种性能优点是要付出代价的;无状态会话 Bean 很笨。它们记不住一个方法调用到另一个调用之间发生的事情。 

// remote interface
public interface CreditService extends javax.ejb.EJBObject {
      public void verify(CreditCard card, double amount) throws RemoteException, CreditServiceException;
      public void charge(CreditCard card, double amount) throws RemoteException, CreditServiceException;
}
// home interface
public interface CreditServiceHome extends java.ejb.EJBHome {
      public CreditService create() throws RemoteException, CreateException;
}


无状态会话 Bean 没有查找方法,因为无状态 bean 全都相同,而且不是持久的。换句话说,在数据库中不能找到唯一的无状态会话 Bean。因为无状态会话 Bean 不是持久的,因此它们都是过渡服务。每个使用同一个会话 Bean 的客户机都得到同一个服务。 

public interface HotelClerkBean implements SessionBean {
      InitialContext jndiContext;
public void ejbCreate() {}
      ...snip...


5.4 有状态会话Bean 
有状态会话 Bean 专用于客户机,并维护方法调用之间的对话状态。 

import javax.ejb.SessionBean;
import javax.naming.InitialContext;
public class HotelClerkBean implements SessionBean {
      InitialContext jndiContext;
      //conversational-state
      Customer cust;
      Vector resVector = new Vector();
public void ejbCreate(Customer customer) {}
      cust = customer;
}
public void addReservation(Name name, RoomInfo ri,
Date from, Date to) {
      ReservationInfo resInfo =
      new ReservationInfo(name,ri,from,to);
      resVector.addElement(resInfo);
}
...snip...


第六章 部署EJB技术 

第七章 EJB客户机 

第八章 联系 

第九章 总结
--转自
北京联动北方科技有限公司




赞(0)    操作        顶端 
lijun.fang
注册用户
等级:上尉
经验:751
发帖:29
精华:0
注册:1970-1-1
状态:离线
发送短消息息给lijun.fang 加好友    发送短消息息给lijun.fang 发消息
发表于: IP:您无权察看 2015-3-24 10:27:17 | [全部帖] [楼主帖] 2  楼

北京联动北方科技有限公司



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论