近日在项目里要在standalone的小程序中调用已部署好的JEE应用程序模块。由于是在不同的JVM中,因此便使用了REMOTE SESSION BEAN来开放这部分功能已供调用。在实现的时候遇到了一些问题,最后一一解决,特在此共享一下。
1.client 调用时总是报"com.ibm.ws.naming.wsn.factory.initial is not set"的错误。
最后发现是由于client端运行时少引用了几个包。只要把naming.jar和namingclient.jar放入classpath下即可,这两个包在was根目录下的lib目录中可以找到。
2.报"ClassNotFoundException: XXXXEJB_stub not found"错误。
这个错误是由于我们开发的方式引起。为了在jee程序中解耦,我们将home接口和EJB接口与SESSION BEAN的放入了不同的项目下,结果在client端只引入了home接口和EJB接口所在的project, 导致生成的stub无法找到。
3.报"CORBA MASHAL"错误。
这个错误一般是由于在EJB中传递复杂对象时所可能造成。因为是跨JVM调用,所以如果要传递自定义的复杂对象,则一定要保证该对象实现了Serializable接口,否则就有可能导致这个错误。(多数情况下会报这个错误而不是ClassCastException)
注意,你的remote method的参数中如果有复杂对象,则也必须保证这个参数对象实现了Serializable接口。