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

我尝试了几个以

java:comp/env/




ejb:/


但没有任何效果。

这是服务器对lookupstrings的说明:

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


本地接口:

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


远程接口:

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


BPMFacadeBeanSimplified接口:

@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的所有访问都应该通过代理进行,这仅仅是因为这是容器可以提供应提供给您的所有服务的唯一方法(拦截器,依赖项注入,安全性,事务...),这就是EJB 3.0规范(第4.7.3节)中EJB规范的设计方式:


  容器对会话业务接口的实现,该实现由部署生成
  工具,实现特定于会话Bean的业务方法。
  每个业务方法的实现都必须激活该实例(如果该实例处于被动状态)
  状态),调用任何业务方法拦截器方法,并在上调用匹配的业务方法
  实例。
  容器提供者负责提供equals和hashCode的实现
  符合3.6.5节要求的业务接口方法


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

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

10-12 04:08
查看更多