私はJava EEとJSPを学んでいます。NetBeans でエンタープライズ アプリケーション プロジェクトを作成しました。EJB project
すべての Bean がある場所と、すべてWAR project
の Web/クライアントのものがある場所があります。私の問題は、注釈@EJB
が WAR アプリケーションで Bean をインスタンス化しないことです。@EJB
EJB アプリケーションの外部で使用できますか?
EJB プロジェクトには、次のファイルがあります。
CustomerRemote.java
@Remote
public interface CustomerRemote {
public Customer createCustomer();
public Customer getCustomer(int customerId);
public void removeCustomer();
}
CustomerBean.java
@Stateless
public class CustomerBean implements CustomerRemote {
@PersistenceContext(unitName="testPU")
private EntityManager entityManager;
@Override
public Customer createCustomer() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void removeCustomer() {
}
@Override
public Customer getCustomer(int customerId) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
WAR プロジェクトには、JSP ページが EJB と通信するために使用するファイルがあります。問題は、CustomerRemote オブジェクトがインスタンス化されないことです。customerRemote
@EJB アノテーションは、常に null であるため機能しないようです。しかし、メソッドでインスタンス化すると、lookup
うまくいきます! では、なぜ機能しない@EJB
のでしょうか。
public class CustomerProxyBean {
@EJB
private CustomerRemote customerRemote;
public CustomerProxyBean() {
// try {
// InitialContext context = new InitialContext();
// customerRemote = (CustomerRemote)context.lookup("java:app/SimpleShop-ejb/CustomerBean");
//
// } catch (NamingException ex) {
// Logger.getLogger(CustomerProxyBean.class.getName()).log(Level.SEVERE, null, ex);
// }
}