EJB当然可以继承,但是CMP没有必要,因为是数据库的再现。至于数据库,按照3NF做就可以了。即便CMP之间有共同之处也不必继承,例如:
ACMP有getUserName方法,BCMP有getTeacherName方法,难道我们抽象出一个EJB,包含getString方法?^_^
这是PetStore实现继承的例子:
/**
* Session Bean implementation for EJBClientController EJB.
* See the StateMachine for more details.
*/
public class ShoppingClientControllerEJB extends EJBClientControllerEJB {
private ShoppingClientFacadeLocal clientFacade = null;
public void EJBCreate() {
sm = new StateMachine(this, sc);
sm.setAttribute("shoppingClientFacade", getShoppingClientFacade());
}
public ShoppingClientFacadeLocal getShoppingClientFacade() {
if (clientFacade == null) {
try {
InitialContext ic = new InitialContext();
Object o = ic.lookup("java:comp/env/ejb/controller/ClientFacade");
ShoppingClientFacadeLocalHome home =(ShoppingClientFacadeLocalHome)o;
clientFacade = home.create();
} catch (javax.ejb.CreateException cx) {
throw new GeneralFailureException("ShoppingClientControllerEJB: Failed to Create ShoppingClientFacade: caught " + cx);
} catch (javax.naming.NamingException nx) {
throw new GeneralFailureException("ShoppingClientControllerEJB: Failed to Create ShoppingClientFacade: caught " + nx);
} catch (java.rmi.RemoteException rx) {
throw new GeneralFailureException("ShoppingClientControllerEJB: Failed to Create ShoppingClientFacade: caught " + rx);
}
}
return clientFacade;
}
}
/**
* Session Bean implementation for EJBClientController EJB.
* See the StateMachine for more details.
*/
public class EJBClientControllerEJB implements SessionBean {
protected StateMachine sm;
protected SessionContext sc;
public EJBClientControllerEJB() {}
public void EJBCreate() {
sm = new StateMachine(this, sc);
}
/** returns an EventResponse */
public EventResponse processEvent(Event ev)
throws EventException {
return (sm.processEvent(ev));
}
public void setSessionContext(SessionContext sc) {
this.sc = sc;
}
public void EJBRemove() {
sm = null;
}
public void EJBActivate() {}
public void EJBPassivate() {}
}