为什么netbeans使用不同的方法来调用企业bean?

时间:2013-06-14 19:38:41

标签: java-ee netbeans ejb

我正在使用Netbeans来了解Java EE。我使用'insert code'和'call enterprise bean'来获取一个远程bean,其接口位于我项目中包含的库中。如果我的项目是Web应用程序netbeans,执行此操作将插入如下所示的函数。 (这是一个jndi查找,对吗?)

private CategoryBeanRemote lookupCategoryBeanRemote() {
    try {
        Context c = new InitialContext();
        return (CategoryBeanRemote) c.lookup("java:global/Shop2-ear/Shop2-database-ejb/CategoryBean!shop2.database.CategoryBeanRemote");
    } catch (NamingException ne) {
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
        throw new RuntimeException(ne);
    }
}

当您在企业应用程序客户端中执行相同操作时,netbeans只提供

@EJB
private static BeverageBeanRemote beverageBean;

为什么会这样?

如果我尝试在Web应用程序中手动创建第二个,这是正常的,服务器会出现如下错误:

SEVERE: Unexpected error occurred
org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor 'public com.myapp.wicket.HomePage()'. Might be it doesn't exist, may be it is not visible (public).  
at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:193)
at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:66)
at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:133)
...
Caused by:
java.lang.reflect.InvocationTargetException     
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:174)
... 40 more Caused by: java.lang.NullPointerException
at com.myapp.wicket.HomePage.<init>(HomePage.java:27) 
... 45 more

1 个答案:

答案 0 :(得分:0)

在Java EE中,配置非常重要。不幸的是,当你使用IDE时,如果正确配置你的应用程序真的很难(但没有IDE它可能更难:P)

我不是专家但是......

我的猜测是,当您创建客户端应用程序时,您将其绑定到某个企业应用程序。它保存在配置文件中。这样客户端应用程序“知道”Remote Bean的位置......并且不需要jndi查找。

我建议使用一些教程(这样你可能会知道场景背后会发生什么)和/或创建像SVN这样的存储库,并且在IDE完成的每个操作之后检查配置文件中的更改。

除此之外我觉得你还没有打印完整的堆栈跟踪......但也许我错了