`
sillycat
  • 浏览: 2488471 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

EJB基础笔记(一)

    博客分类:
  • JAVA
阅读更多
EJB基础笔记(一)

第一章 教程提示
第二章 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();


分享到:
评论

相关推荐

    Weblogic EJB 学习笔记

    Weblogic EJB 学习笔记 ejb 基础知识 EJB 组成 EJB 配置描述器 建立ejb 档案文件 容器管理的事务 ejb 引用

    EJB笔记,但愿对喜欢EJB的朋友有所帮助

    比较详细得EJB基础笔记,希望对爱好EJB的朋友有所启发和帮助,这是在tarena培训时的笔记,分为5天,每天一讲,我这还有WEB方面得不少笔记,如有需要,请留言我,谢谢

    EJB学习资料

    有《Jboss EJB3.0实例教程》和《EJB3.0实例教程》两本pdf书籍,以及两本外文pdf书籍及源码,分别为ejb-3_0-fr-spec-persistence.pdf和ejb-3_0-fr-spec-simplified.pdf,以及EJB课堂笔记.doc和EJB基础.chm、EJB学习...

    学习EJB3基础知识笔记

    NULL 博文链接:https://blessht.iteye.com/blog/1102598

    Java从零基础到精通详细笔记高清完整PDF版

    本文档为详细笔记,doc格式,共173页。包含内容: Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式。另附学习视频链接地址,欢迎下载。

    Java 从入门到精通全程笔记(JavaSE+JavaEE :史上最全笔记)

    JavaSE+JavaEE企业级开发 全程笔记免费下载,内容详尽,doc文档,共173页,六号字体,双栏排版。 *、Java 基础, *、web, *、数据库(Mysql Oracle jdbc Hibernate hql/sql), *、JSP, *、Ajax *、Struts, *、...

    java详细学习笔记零基础到精通.zip

    为详细笔记,有批注,一百多页,适合初学者。包含内容: Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式。

    java基础笔记

    java基础笔记整理( Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, Ejb, java和模式 )

    Java笔记---Unix,JSP,Struts, Ajax,Spring,Ejb

    Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, Ejb, java和模式 笔记很详细,重点突出,强烈推荐给大家。。。 因为下载资源没有积分,才选择要资源分,抱歉。

    java从入门到精通全过程笔记.doc

    Java 从入门到精通笔记整理 ...Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,java和模式 对于初学者而言,一个好的笔记有时候比一本好书更有用!

    Java从零基础到精通详细笔记

    本文档为详细笔记,Setup格式,共173页。包含内容: Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式。另附学习视频链接地址,欢迎下载。

    java从零基础到精通的整个详细笔记(带批注)

    包含内容Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql),web、JSP,Struts,Ajax、Spring,Ejb,java和模式

    java从零基础到精通 学习笔记 (带批注) 完整版PDF

    Java应用广泛,涉及个人PC、数据...《java从零基础到精通》为详细笔记,doc格式,共173页。包含内容: Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式。

    java学习笔记

    java学习笔记大全:java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 java se课程介绍 java面向对象编程(基础) java...

    Java从零基础到精通详细笔记.rar

    Java从零基础到精通详细笔记是来自51cto的资料,本文档为PDF格式,共173页,记录了包含:Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,Ajax,Spring,Ejb,Java和模式等内容

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 ...1995 sun正式发布java第一个版本,目前最新是jdk7.0

    Java从零基础到精通详细笔记(DOC)

    Java从零基础到精通,详细笔记,doc格式,共173页。包含内容:Unix,Java 基础,数据库(Oracle jdbc Hibernate pl/sql),web,JSP,Struts,AjaxSpring,Ejb,Java和模式。

Global site tag (gtag.js) - Google Analytics