我們都使用沒有任何註釋的簡單Java類。當我們在普通的獨立應用程序中使用它時,我們使用'New'關鍵字來創建實例並使用它。該對象在堆上創建。 如果它沒有實例化,我仍然可以訪問或使用它的靜態成員。生命週期EJB容器中的簡單Java類/對象
我的問題是,如果我將這個簡單的類部署到EJB容器,那麼它會發生什麼?我沒有註釋它Stateless
或Stateful
或Entity
,所以容器如何管理它。以下是示例代碼。該POJO這裏(ClientCounter)沒有什麼特別之處,但只是舉例:
@Stateless
public class WelcomeBean implements WelcomeBeanRemote {
private ClientCounter pojo = new ClientCounter();
@Override
public void showMessage() {
System.out.println("welcome client");
pojo.increment();
}
}
class ClientCounter {
private int count;
public void increment() {
count++;
}
}
,並且客戶端:
public class Client {
public static void main(String []args) {
Properties jndiProps = new Properties();
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.remote.client.InitialContextFactory");
jndiProps.put(Context.PROVIDER_URL,"http-remoting://localhost:8080");
jndiProps.put("jboss.naming.client.ejb.context", true);
jndiProps.put(Context.SECURITY_PRINCIPAL, "admin");
jndiProps.put(Context.SECURITY_CREDENTIALS, "admin");
final String appName = "";
final String moduleName = "EJBProject02";
final String sessionBeanName = "WelcomeBean";
final String viewClassName = WelcomeBeanRemote.class.getName();
Context ctx = new InitialContext(jndiProps);
WelcomeBeanRemote bean =(WelcomeBeanRemote) ctx.lookup(appName+"/"+moduleName+"/"+sessionBeanName+"!"+viewClassName);
bean.showMessage();
System.exit(0);
}
}
你應該在耳朵中引用pojo文件的組織。他們如何組裝,以及他們如何提供訪問應用程序的哪一部分? – SacJn
我已添加示例代碼 – gero
您正在作出一個不正確的假設。您**不要**將這個簡單的類部署到EJB容器*中。您將應用程序部署到Java EE應用程序服務器(WildFly,TomEE,Glassfish等),並且所有EJB將由您的應用程序服務器內的EJB容器管理。您的POJO作爲您的ClientCounter將由類加載器作爲普通Java程序中的普通Java類進行管理。請看@Will Hartung的[這個答案](http://stackoverflow.com/a/8088403/1346996)。 – aribeiro