gpt4 book ai didi

java - 使用 InitialContext 进行 EJB 查找

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:11 25 4
gpt4 key购买 nike

我在查找服务器上托管的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com