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

Websphere 部署EJB并使用远程和本地引用访问它,websphere,ejb-3.0,websphere-7,java-ee-5,Websphere,Ejb 3.0,Websphere 7,Java Ee 5,我有一个企业应用程序,它有一个无状态的EJB和一个基于JAX-WS的web服务。Web服务在被调用时将在内部调用 EJBlib文件夹包含EJB和WAR所需的公共库。 在以不同方式访问EJB时,我面临两个问题。当我通过web服务访问它时,它工作正常 这是部署在IBMWASV7上的这是EAR的结构 MyProject.EAR webservice.war ejb.jar lib abc.jar xyz.jar 现在在EJB中,我有一个类,它公

我有一个企业应用程序,它有一个无状态的EJB和一个基于JAX-WS的web服务。Web服务在被调用时将在内部调用 EJB
lib
文件夹包含EJB和WAR所需的公共库。 在以不同方式访问EJB时,我面临两个问题。当我通过web服务访问它时,它工作正常

这是部署在IBMWASV7上的这是EAR的结构

MyProject.EAR
    webservice.war
    ejb.jar
    lib
        abc.jar
        xyz.jar
现在在EJB中,我有一个类,它公开为
Remote
Local

@Stateless
public class MyAccountBean implements AccountLocal,AccountRemote{

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

AccountLocal accLocal=(AccountLocal)ctx.lookup("ejblocal:com.my.test.account.AccountLocal");
这个很好用

第一期:-

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

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();
}
这将导致类强制转换异常,错误500:java.lang.ClassCastException:无法将类org.omg.stub.java.rmi.\u Remote\u stub强制转换到接口com.my.test.account.AccountRemote

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

更新:
我从科德兰奇的警察那里得到了详细的答复。与第一个问题的第一个答案类似,请参见信息中心主题的“本地客户端视图”部分。具体来说,相同的本地接口类需要对两个应用程序都可见(从类加载器的角度)。这通常通过使用服务器范围的共享库来完成


对于第二个问题,我猜您的“不同服务器”没有_AccountRemote_存根。另一台服务器是WebSphere Application server v7还是更高版本?如果没有,您可能需要使用
WAS\u HOME/bin/createjbsubs
命令生成存根。否则,请更新您的答案,以显示ClassCastException的完整堆栈跟踪(WebSphere Application Server v7或更高版本应自动生成存根,也许完整堆栈跟踪会给出提示)。

类似的问题(不完全相同)这里讨论了JBOSS上的远程was版本是7.0.0.29,我不确定为什么存根没有自动生成。如果您想包括堆栈跟踪,我可以试着看一下。否则,这可能是一个产品问题,您可以尝试与IBM一起打开PMR。