2014-09-26 56 views
0

我正在研究一個拖拽項目,EJB項目(我擁有所有的EJB Remote),另一個項目是一個簡單的使用main方法的java應用程序。但是當我嘗試通過JNDI查找無狀態和遠程的EJB時,它不起作用。如何將EJB遠程處理從EJB應用程序查找到Java應用程序中?

真的,我用了很多方法,但沒有好的結果。

這是代碼和CONSOL錯誤。

1)我的Ejb項目,當我清理並安裝它,它給了我一個jar文件。 2)我使用Jboss EAP6。 3)我有一個jndi.properties insid的src /主/ ressouces其中i有這樣的:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory 
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces 
java.naming.provider.url = localhost:1099 

PersonalFactory.java(EJB項目的EJB)

import javax.ejb.Remote; 
import javax.ejb.Stateless; 
import com.lazrak.common.logging.CommonLogger; 
import com.lazrak.remotes.IPersonFactoryRemote; 

@Remote(IPersonFactoryRemote.class) 
@Stateless 
public class PersonFactory implements IPersonFactoryRemote 

@Override 
public void findMe() { 
System.out.println("I'am inside of the method findMe"); 
} 

MyMainClass.java(其中我有主要的方法,它是在第二個Java項目)

全部導入...

public class MyMainClass { 
public static void main(String[] args) throws Exception { 

System.out.println("Main start "); 
    invokeStatelessBean(); 
} 

private static void invokeStatelessBean(){ 

    Hashtable props = new Hashtable(); 
    props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 
    props.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");  
    props.put(Context.PROVIDER_URL,"jnp://localhost:1099"); 
    InitialContext context = null; 

try { 
     context = new InitialContext(props); 
    } catch (NamingException e) { 
     System.out.println("Faild to add properties to InitialContext"+e.getMessage()); 
    } 

try { 
    final IPersonFactoryRemote statelessRemoteCalculator = (IPersonFactoryRemote) context 
       .lookup("ejb:"+moduleName+"/"+PersonFactory.class.getSimpleName();+"/"+IPersonFactoryRemote.class.getName()); 
    } catch (NamingException e) { 
     System.out.println("EJB Remot doesn't been fined\n"+e.getMessage()); 
    } 
} 
} 

當我運行我的主要應用,它給我說:​​

Main start 
enter 2014-09-26 15:57:26,098 DEBUG org.jboss.logging - InitialContextFactory.java:64 - Logging Provider: org.jboss.logging.Log4jLoggerProvider 
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/remoting3/spi/ConnectionProviderFactory 
at org.jboss.naming.remote.client.InitialContextFactory.<clinit>(InitialContextFactory.java:99) 
at org.jboss.naming.remote.client.InitialContextFactory.<clinit>(InitialContextFactory.java:99) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:270) 
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:72) 
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:61) 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 
at javax.naming.InitialContext.init(InitialContext.java:242) 
at javax.naming.InitialContext.<init>(InitialContext.java:216) 
at RemoteEJBClient.invokeStatelessBean(RemoteEJBClient.java:42) 
at RemoteEJBClient.main(RemoteEJBClient.java:18) 
Caused by: java.lang.ClassNotFoundException: 
org.jboss.remoting3.spi.ConnectionProviderFactory 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 11 more 
+0

我測試過這個,但它並沒有爲我工作: https://docs.jboss.org/author/顯示/ AS71/EJB +調用+從+ a +遠程+客戶端+使用+ JNDI ,當然EJB jar項目被部署在jboss EAP6 – 2014-09-26 15:52:09

回答