java - 使用 InitialContext 进行 EJB 查找

标签 java ejb lookup initial-context

我在查找服务器上托管的 EJB 时遇到问题。服务器本身是一个SAP环境,基本上就是一个修改后的tomcat。

我尝试了几个以

开头的查找字符串
java:comp/env/ 

ejb:/ 

但没有任何效果。

这是服务器对查找字符串的描述:

ejb:/appName=mycompany.de/reboard~report~cs, jarName=mycompany.de~reboard~report~cs.jar, beanName=com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedEjb, interfaceName=com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedLocal

对于远程部分:

ejb:/appName=mycompany.de/reboard~report~cs, jarName=mycompany.de~reboard~report~cs.jar, beanName=com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedEjb, interfaceName=com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedRemote

我尝试了此查找字符串的不同组合,但都失败了。我可以使用以下方法获取 Bean 的代理对象:

InitialContext().lookup("ejb:/com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedLocal");

但是我需要的是直接 bean 访问。

以下是 Bean 的定义方式:

@com.sap.engine.services.webservices.espbase.configuration.ann.rt.TransportBindingRT(AltPath="reboard/report/cs~ibsolution.de_com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedEjb")
@UsedReferences(srIds="05bc3ba3-fd85-4381-b6f8-f8a4734b2815, 05bc3ba3-fd85-4381-b6f8-f8a4734b2815, 05bc3ba3-fd85-4381-b6f8-f8a4734b2815", wsdlLocations="ibsolution.de~reboard~report~cs.jar#META-INF/wsdl/consumed/src/wsdl/rootwsdl_BPMFacadeBeanImplService_BPMFacadeBeanImpl.wsdl, ibsolution.de~reboard~report~cs.jar#META-INF/wsdl/consumed/src/wsdl/rootwsdl_BPMFacadeBeanImplService_BPMFacadeBeanImpl.wsdl, ibsolution.de~reboard~report~cs.jar#META-INF/wsdl/consumed/src/wsdl/rootwsdl_BPMFacadeBeanImplService_BPMFacadeBeanImpl.wsdl")
@Stateless(name="com.sap.bpem.facade.api._simplified.adapted.BPMFacadeBeanSimplifiedEjb")
@EJB(name="BPMBean", beanInterface=BPMFacadeBeanSimplifiedLocal.class)
@WebService(
    portName="BPMFacadeBean_simplifiedBindingPort",
    endpointInterface="com.sap.bpem.facade.api._simplified.BPMFacadeBeanSimplified",
    serviceName="BPMFacadeBean_simplifiedBindingService",
    targetNamespace="http://api.facade.bpem.sap.com/_simplified",
    wsdlLocation="META-INF/wsdl/composed/src/wsdl/rootwsdl_importedwsdl_1_BPMFacadeBeanImplService_BPMFacadeBeanImpl_simplified.wsdl")
public class BPMFacadeBeanSimplifiedEjb implements 
    BPMFacadeBeanSimplifiedLocal,
    BPMFacadeBeanSimplifiedRemote

本地接口(interface):

@Local
public interface BPMFacadeBeanSimplifiedLocal
    extends com.sap.bpem.facade.api._simplified.BPMFacadeBeanSimplified {}

远程接口(interface):

@Remote
public interface BPMFacadeBeanSimplifiedRemote
    extends com.sap.bpem.facade.api._simplified.BPMFacadeBeanSimplified {}

BPMFacadeBeanSimplified 接口(interface):

@javax.jws.WebService(name = "BPMFacadeBean_simplified", targetNamespace = "http://api.facade.bpem.sap.com/_simplified")
@javax.jws.soap.SOAPBinding(parameterStyle = javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED, style = javax.jws.soap.SOAPBinding.Style.DOCUMENT, use = javax.jws.soap.SOAPBinding.Use.LITERAL)
public interface BPMFacadeBeanSimplified {

@javax.jws.WebMethod(operationName = "getActiveProcesses", action = "http://api.facade.bpem.sap.com/_simplified/getActiveProcesses")
@javax.xml.ws.RequestWrapper(localName = "getActiveProcesses", targetNamespace = "http://api.facade.bpem.sap.com/", className = "com.sap.bpem.facade.api.GetActiveProcesses")
@javax.xml.ws.ResponseWrapper(localName = "getActiveProcessesResponse", targetNamespace = "http://api.facade.bpem.sap.com/", className = "com.sap.bpem.facade.api.GetActiveProcessesResponse")
@javax.jws.WebResult(name = "return", targetNamespace = "")
public java.util.List<com.sap.bpem.facade.api.ProcessInfo> getActiveProcesses(@javax.jws.WebParam(name = "locale", targetNamespace = "") java.lang.String locale);

/**
 * Java representation of web method [getProcessDescription].
 */
@javax.jws.WebMethod(operationName = "getProcessDescription", action = "http://api.facade.bpem.sap.com/_simplified/getProcessDescription")
@javax.xml.ws.RequestWrapper(localName = "getProcessDescription", targetNamespace = "http://api.facade.bpem.sap.com/", className = "com.sap.bpem.facade.api.GetProcessDescription")
@javax.xml.ws.ResponseWrapper(localName = "getProcessDescriptionResponse", targetNamespace = "http://api.facade.bpem.sap.com/", className = "com.sap.bpem.facade.api.GetProcessDescriptionResponse")
@javax.jws.WebResult(name = "return", targetNamespace = "")
public java.lang.String getProcessDescription(@javax.jws.WebParam(name = "activeVersionId", targetNamespace = "") java.lang.String activeVersionId, @javax.jws.WebParam(name = "locale", targetNamespace = "") java.lang.String locale);

}

在这种情况下正确的查找字符串是什么?

感谢您的帮助!

最佳答案

没有可移植的方法来访问 bean 实例,对 ejb 的所有访问都应该通过代理,因为这是容器可以提供它应该为您提供的所有服务的唯一方法(拦截器、依赖注入(inject)、安全性、事务...),这就是 EJB 规范的设计方式,来自 EJB 3.0 规范(第 4.7.3 节):

The container’s implementation of the session business interface, which is generated by the deployment tools, implements the business methods specific to the session bean. The implementation of each business method must activate the instance (if the instance is in the passive state), invoke any business method interceptor methods, and invoke the matching business method on the instance. The container provider is responsible for providing the implementation of the equals and hashCode methods for the business interface, in conformance with the requirements of section 3.6.5

此外,我无法想象为什么您需要直接访问 bean 实例

关于java - 使用 InitialContext 进行 EJB 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21428133/

相关文章:

java - OSGI bundle 结构以及与 CQ5 中其他 bundle 的通信

java - 只是获取连接到系统的 USB 设备的名称?

jakarta-ee - 使用部署描述符的 EJB 注入(inject)

java - RMI、EJB 和回调

Java 对象而不是在数据库中查找

Java - Netbeans应用程序 - 如何使用Lookup传输数据?

data-modeling - 数据仓库维度查找代码

java - 在java中交换未知字符串中的两个字母

Java:写入 Windows 临时目录中的 tempFile

JBoss 7.1 EJB 客户端的 Maven 依赖项