我正在使用 JBoss 6 和 Eclipse 下的 JEE5 项目。目前,本地业务接口有多个,远程业务接口只有一个。该项目分为模块,以便接口与其实现分开,我正在尝试从这样的 POJO 进行远程调用
public static void main(final String[] args) throws Throwable {
final SomethingBusinessRemote remote = (SomethingBusinessRemote) getInitialContext().lookup("java:global/com/something/SomethingBusiness/remote");
System.out.println(remote.getById(102));
}
public static Context getInitialContext() throws NamingException{
final Hashtable hashtable = new Hashtable();
hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
hashtable.put(Context.PROVIDER_URL, "localhost:1099");
return new InitialContext(hashtable);
}
如果我将项目依赖项添加到实现模块,我会得到以下结果(如预期的那样):
Something[id=102]
但是,如果该依赖项不在客户端的库中,我会得到以下堆栈跟踪:
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy3.getById(Unknown Source)
at Teste.main(Teste.java:14)
Caused by: java.lang.ClassNotFoundException: com.something.SomethingHibernate
at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:103)
at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:94)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
我记得我设法让 JBoss 5 将编组结果与实现一起发送,但我无法让它与 JBoss 6 一起使用。
我尝试在 /deploy中更改ejb3-connectors-jboss-beans.xml并将loaderport=3873添加到getStringBinding方法配置中,但它根本没有帮助我。所以,问题是:
如何配置 JBoss 以向我发送必要的实现,以便解组不会引发异常,并且我不需要客户端直接访问实现模块,只需访问接口模块?
谢谢你们!