gpt4 book ai didi

websphere - 部署 EJB 并使用远程和本地引用访问它

转载 作者:行者123 更新时间:2023-12-05 05:27:16 24 4
gpt4 key购买 nike

我有一个企业应用程序,它有一个 Stateless EJB 和一个基于 JAX-WS 的 Web 服务。 Web 服务在被调用时将在内部调用EJB。 lib 文件夹包含 EJB 和 WAR 所需的公共(public)库。在以不同方式访问 EJB 时,我遇到了两个问题。当我通过网络服务访问它时它工作正常

这是部署在 IBM WAS v7 上的 EAR 的结构

MyProject.EAR
webservice.war
ejb.jar
lib
abc.jar
xyz.jar

现在在 EJB 中我有一个暴露为 RemoteLocal 的类。

@Stateless
public class MyAccountBean implements AccountLocal,AccountRemote{

}

如上所述,在 Web 项目中,我们使用本地引用调用 EJB。

AccountLocal accLocal=(AccountLocal)ctx.lookup("ejblocal:com.my.test.account.AccountLocal");

这很好用。

第一期:-

我们有另一个 EAR 应用程序部署在与 WAS 相同的 JVM 上。从这个应用程序,我们试图访问 MyProject.EAR 中可用的 EJB。是否可以使用 JNDI 查找获取此信息,因为它们都在同一个 JVM 上?我们尝试了以下代码,

AccountLocal accLocal=(AccountLocal)ctx.lookup("jndiOfAccountLocal");

但它给出了类转换异常。

Error 500: java.lang.ClassCastException: com.my.test.account.EJSLocal0SLDAccount_e303bda3 incompatible with com.my.test.account.AccountLocal

第二期:-

我们遇到的第二个问题是远程 EJB 查找。下面是我们用来从部署在不同服务器上的 Web 应用程序获取远程 EJB 引用的代码。

Properties props = new Properties();
props.put( Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory" );
props.put( javax.naming.Context.PROVIDER_URL, "iiop://localhost:2809" );

AccountRemote remote = null;
try{
InitialContext ctx = new InitialContext( props );

lobj = ctx.lookup( "dcpejbsvc" );

AccountRemote remoteObj = (AccountRemote)PortableRemoteObject.narrow( lobj, AccountRemote.class );

InputVO input = constructInput();

OutputVO output = remoteObj.getAccountInfo( input );
}
catch( NamingException e ){
// TODO Auto-generated catch block
e.printStackTrace();
}

这给出了类转换异常 Error 500: java.lang.ClassCastException: cannot cast class org.omg.stub.java.rmi._Remote_Stub to interface com.my.test.account.AccountRemote

你能指导我解决这些问题吗?

已更新:我从 post 得到了详细的回复在代码中。类似于第一个答案

最佳答案

对于第一个问题,请参阅 EJB modules 的“本地客户端 View ”部分信息中心的主题。具体来说,同一个本地接口(interface) Class 需要对两个应用程序可见(从 ClassLoader 的角度来看)。这通常是通过使用服务器范围的共享库来完成的。

对于第二个问题,我的猜测是你的“不同的服务器”没有_AccountRemote_Stub。其他服务器是 WebSphere Application Server v7 或更高版本吗?如果不是,您可能需要使用 WAS_HOME/bin/createEJBStubs 命令生成 stub 。否则,请更新您的答案以显示 ClassCastException 的完整堆栈跟踪(WebSphere Application Server v7 或更高版本应自动生成 stub ,完整堆栈跟踪可能会给出提示)。

关于websphere - 部署 EJB 并使用远程和本地引用访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904130/

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