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 interfaces與remote interfaces。它應該提供一組公用程式類別以便能夠隱藏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,都有一個interface來讓用戶端能夠建立與移除一個bean instance。以Entity為例,home interface 提供一些方法以允許用戶端對於一個bean instance來作定位用。這個interface遵循Java RMI interface的規定。每個home interface都繼承自一個遠端介面,即EJBHome。
Remote
一個bean的remote interface 描述對於一個bean instance中可供用戶端呼叫的方法集合。這個interface 遵循Java RMI interface的規定。每個remote interface都繼承自一個遠端介面,即EJBObject。
Session beans
Session beans為 particular client所建立。如果經過一段被稱為timeout的指定空閑時間之後,就不再存在。
Session synchronization
Session beans 可選擇性地實做Session Synchronization interface。這樣可以允許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.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
File: Main.java
import 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.java
package 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.java
package 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.java
package bean;
import javax.ejb.Local;
import javax.ejb.Remote;
@Local
public interface EmployeeServiceLocal{
public void doAction();
}
File: EmployeeServiceRemote.java
package bean;
import javax.ejb.Stateless;
import javax.jws.WebService;
public interface EmployeeServiceRemote {
public void doAction();
}