Jakarta ee 可以从不同的应用程序/EAR注入EJB吗?

Jakarta ee 可以从不同的应用程序/EAR注入EJB吗?,jakarta-ee,ejb,Jakarta Ee,Ejb,我正在完成一个将在其他一些项目中使用的EJB服务,因此我需要将它注入到一些ManagedBeans、其他EJB甚至Servlet中 我们已经有一些应用程序依赖项,但它始终是单个依赖项,因此我们习惯于以这种方式部署: App1Ear | libs | AppXModel.jar AppXEJB.jar | App1Model.jar App1EJB.jar App1Web.war | 我正在使用的项目将在4个应用程序中使用,因此如果我们遵循此模型,我们将按如下方式部署应

我正在完成一个将在其他一些项目中使用的EJB服务,因此我需要将它注入到一些ManagedBeans、其他EJB甚至Servlet中

我们已经有一些应用程序依赖项,但它始终是单个依赖项,因此我们习惯于以这种方式部署:

App1Ear
|
 libs
   |
    AppXModel.jar
    AppXEJB.jar
|
App1Model.jar
App1EJB.jar
App1Web.war 
|
我正在使用的项目将在4个应用程序中使用,因此如果我们遵循此模型,我们将按如下方式部署应用程序:

App1Ear
|
 libs
   |
    MyNewServiceJB.jar
|

App2Ear
|
 libs
   |
    MyNewServiceJB.jar
|

App3Ear
|
 libs
   |
    MyNewServiceJB.jar
|
等等

因此,我开始思考,如果可能的话,在.EAR中“独立”部署新的EJB应用程序并将其远程注入其他应用程序是否会更好,这样我们就不会在服务器上运行很多相同的东西——顺便说一下,WebSphere application server 8.0

我的想法是:

MyNewService.EAR
 |
  MyNewServiceEJB.jar
 |
我已经做了一项关于注入远程EJB的研究,但我发现的大部分结果都是关于注入来自不同应用程序但在同一个.EAR中的EJB,而且我尝试的测试根本不起作用

我试图以这种方式注入Servlet

@EJB(lookup="java:global/MyNewServiceEAR/MyNewServiceEJB/BusinessImpl!com.bla.bla.bla.RemoteInterface")
RemoteInterface remoteService;
上面的这个JNDI是在部署时从控制台获得的,所以我打赌它没有错

我得到的是:

Caused by: com.ibm.wsspi.injectionengine.InjectionConfigurationException: Failed to process xml from Deployment Descriptor
    at com.ibm.ws.injectionengine.AbstractInjectionEngine.processXML(AbstractInjectionEngine.java:746)
    at com.ibm.ws.injectionengine.AbstractInjectionEngine.processInjectionMetaData(AbstractInjectionEngine.java:456)
    at com.ibm.ws.injectionengine.AbstractInjectionEngine.processInjectionMetaData(AbstractInjectionEngine.java:379)
    at com.ibm.ws.injectionengine.ReferenceContextImpl.process(ReferenceContextImpl.java:965)
    ... 82 more
Caused by: com.ibm.wsspi.injectionengine.InjectionConfigurationException: The com.app.service.BusinessImpl interface specified for <ejb-ref> or <ejb-local-ref> could not be found
    at com.ibm.ws.injectionengine.processor.EJBInjectionBinding.loadClass(EJBInjectionBinding.java:1379)
    at com.ibm.ws.injectionengine.processor.EJBInjectionBinding.getEJBInjectionType(EJBInjectionBinding.java:1161)
    at com.ibm.ws.injectionengine.processor.EJBProcessor.processXML(EJBProcessor.java:200)
    at com.ibm.ws.injectionengine.AbstractInjectionEngine.processXML(AbstractInjectionEngine.java:736)
    ... 85 more
Caused by: java.lang.ClassNotFoundException: com.app.service.BusinessImpl
    at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:240)
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:701)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:680)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:133)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:663)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:599)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:663)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:567)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:663)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:567)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:663)
    at com.ibm.ws.injectionengine.processor.EJBInjectionBinding.loadClass(EJBInjectionBinding.java:1363)
    ... 88 more
以及界面:

import javax.ejb.Remote;

@Remote
public interface RemoteInterface {
        public void doSomething(BusinessVO businessVO);
}

jdni名称看起来不错。它实际上找到了SessionBean,但无法创建对它的远程引用。因为它找不到BusinessImpl(它甚至不应该知道类是相关的)。BusinessImpl和接口的代码是什么?我假设MyNewService应用程序启动时没有出现问题?.Thx请注意,我使用interface/impl代码编辑了原始帖子,因为现在它只有一种方法,因为服务正在开发中。您是否尝试过另一种方法,即使用
@Remote(InterfaceName.class)
标记bean?jdni名称看起来不错。它实际上找到了SessionBean,但无法创建对它的远程引用。因为它找不到BusinessImpl(它甚至不应该知道类是相关的)。BusinessImpl和接口的代码是什么?我假设MyNewService应用程序启动时没有出现问题?。请注意,我使用interface/impl代码编辑了原始帖子,因为现在它只有一种方法,因为服务正在开发中。您是否尝试过另一种方法,即使用
@Remote(InterfaceName.class)
标记bean?
import javax.ejb.Remote;

@Remote
public interface RemoteInterface {
        public void doSomething(BusinessVO businessVO);
}