java EJB 与网络应用实例
java EJB 与网络应用实例
Bean Instance(Bean实例)
一个Bean Instance是Bean位于一个容器中的instantiation,如果把bean比作class,那么Bean Instance就是Java Object。
Bean-managed persistence(Bean自己所管理的永续性BMP)
这个术语是用来描述Enterprise Java Bean如何来存储它们的state到数据库教程或者是其他的存储机制。容器将促使Bean呼叫Bean的EjbLoad()和EjbSave()方法。
Container(容器)
一个Bean的容器会实做bean的home inte易做图ces与remote inte易做图ces。它应该提供一组公用程序类别以便能够隐藏bean instances,介入方法调用,维持交易完整性与bean instances池的一般管理。虽然Ejb规则中规定一个容器必须管理超过一种以上的bean,不过通常每个容器只有一个bean。
Container-managed demarcation
对于一个enterprise bean,不论何时,当其中的一个商业方法被呼叫,容器便自动启动一项新的交易。商业方法完成后,交易就结束了。容器启动交易的形式由bean的交易属性来决定,或者,由商业方法本身来决定(如果有指明的话)。
Container-managed persistence(委托容器管理的永续性CMP)
Bean开发者可以委托容器来负责记录Bean的最新状态。Bean的状态必须由Bean中的许多public Fields得到。容器可以确保这些public fields在任何bean的方法被唤醒之前为正确的。public fields必须在deployment descriptor中定义,然后才产生container classes。
Entity beans
Entity beans 代表可以辨认的永续物件。典型的实例就是:它可以代表关系数据库中个别的rows。当然,也可以是档案系统中的档案,或者是任何其他独一无二的可辨识资料。
Home
每一个Enterprise Bean,不论是Session或者是Entity bean,都有一个inte易做图ce来让客户端能够建立与移除一个bean instance。以Entity为例,home inte易做图ce 提供一些方法以允许客户端对于一个bean instance来作定位用。这个inte易做图ce遵循Java RMI inte易做图ce的规定。每个home inte易做图ce都继承自一个远端界面,即EJBHome。
Remote
一个bean的remote inte易做图ce 描述对于一个bean instance中可供客户端呼叫的方法集合。这个inte易做图ce 遵循Java RMI inte易做图ce的规定。每个remote inte易做图ce都继承自一个远端界面,即EJBObject。
Session beans
Session beans为 particular client所建立。如果经过一段被称为timeout的指定空闲时间之后,就不再存在。
Session synchronization
Session beans 可选择性地实做Session Synchronization inte易做图ce。这样可以允许Session beans在交易将完成之前与完成之后被通知。session bean可以使用beforeCompletion()方法来否决交易的成功完成,并且能够使用afterCompletion()来判断交易成功与否。
Transaction Attribute (事务属性)
一项transaction attribute可以用在bean与其特殊的商业方法上。其可能的值有六种,分别是
TX_NOT_SUPPORTED,TX_REQUIRED,TX_SUPPORTS,
TX_REQUIRES_NEW,TX_MANDATORY,TX_BEAN_MANAGED
File: jndi.properties
java.naming.factory.initial=org.jnp.inte易做图ces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.inte易做图ces
java.naming.provider.url=localhost:1099
File: Main.javaimport javax.naming.InitialContext;
import bean.EmployeeServiceRemote;
public class Main {
public static void main(String[] a) throws Exception {
EmployeeServiceRemote service = null;
// Context compEnv = (Context) new InitialContext().lookup("java:comp/env");
// service = (HelloService)new
// InitialContext().lookup("java:comp/env/ejb/HelloService");
service = (EmployeeServiceRemote) new InitialContext().lookup("EmployeeBean/remote");service.doAction();
}
}
File: Employee.javapackage bean;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PostRemove;@Entity
public class Employee implements java.io.Serializable {
private int id;private String firstName;
private String lastName;
@Id
@GeneratedValue
public int getId() {
return id;
}
@PostRemove
public void postRemove()
{
System.out.println("@PostRemove");
}public void setId(int id) {
this.id = id;
}public String getFirstName() {
return firstName;
}public void setFirstName(String first) {
this.firstName = first;
}public String getLastName() {
return lastName;
}public void setLastName(String last) {
this.lastName = last;
}
}
File: EmployeeBean.javapackage bean;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;@Stateless(name = "EmployeeBeanEJB")
@WebService(serviceName = "EmployeeBeanWebService",
targetNamespace = "http://www.java2s.com/ejb3/credit")
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {public EmployeeBean() {
}@WebMethod(operationName = "CreditCheck")
public boolean validateCC(String cc) {
return true;
}public void doAction() {
System.out.println("Processing...");}
}
File: EmployeeServiceLocal.javapackage bean;
import javax.ejb.Local;
import javax.ejb.Remote;
@Localpublic inte易做图ce EmployeeServiceLocal{
public void doAction();
}
File: EmployeeServiceRemote.java
package bean;
import javax.ejb.Stateless;
import javax.jws.WebService;
public inte易做图ce EmployeeServiceRemote {
public void doAction();
}
补充:Jsp教程,J2EE/EJB/服务器