【发布时间】:2014-03-27 18:31:05
【问题描述】:
嗨,我有一个名为“service-ejb”的 EJB 项目:
@Stateless
@Remote(ServiceRemote.class)
public class Services implements ServiceLocal, ServiceRemote {
[...business code...]
}
我有本地界面,在同一个项目中:
@Local
public interface ServiceLocal { }
和远程接口,在一个名为“service-lib”的类库项目中:
@Remote
public interface ServiceRemote {
public boolean checkIfOk();
}
我可以毫无问题地单独或在 Java EE 应用程序中部署它。关键是我不明白如何告诉 NetBeans 我希望从另一个应用程序调用该 bean。例如,我有另一个带有 war 组件的 java EE 项目,我在 servlet 中写道:
@EJB
private ServiceRemote serviceTest;
当然它会编译失败,所以我尝试了:
InitialContext ic = new InitialContext();
ServiceRemote serviceTest = (ServiceRemote) ic.lookup("ServiceRemote");
没有运气...在 NetBeans 中我可以告诉它使用“service-lib”作为参考吗?我不希望它被添加为库然后用耳朵部署,我只希望 NetBeans 正确编译代码。
对不起,如果这个问题听起来很愚蠢,但我已经阅读了文档,但我不明白我错过了什么......
--- 编辑---
我会尽量说得更清楚。 “service-ejb”引用“service-lib”,所以我已将“service-ejb”部署到 glassfish。没错,我有:
glassfish_applications_directory $ find -name "service*"
./__internal/service-ejb
./__internal/service-ejb/service-ejb.jar
./service-ejb
./service-ejb/com/tecytal/components/email/beans/Service.class
./service-ejb/com/tecytal/components/email/interfaces/local/ServiceLocal.class
./service-ejb/service-lib.jar
然后我打开一个 java EE 项目,我们称它为“myEngine”,带有一个战争模块“myEngine-war”。当然,我尝试向“myEngine-war”添加对“service-lib”的引用,在这种情况下它编译得很好。关键是我可以做任何事情,告诉netbeans不要将“service-lib”与战争打包,但是当我部署“myEngine”时,我得到:
glassfish_applications_directory $ find -name "service*"
./myEngine/lib/service-lib.jar
./__internal/service-ejb
./__internal/service-ejb/service-ejb.jar
./service-ejb
./service-ejb/com/tecytal/components/email/beans/Service.class
./service-ejb/com/tecytal/components/email/interfaces/local/ServiceLocal.class
./service-ejb/service-lib.jar
我不想在我的服务器中有两个 service-lib.jar,一个在 service-ejb 中,一个在 myEngine 中,我不明白如何在 netbeans 中使用远程 ebj 告诉他不要部署相同的库 3214899213 次 :)
【问题讨论】:
标签: java jakarta-ee netbeans ejb