2009-10-07 178 views
1

我创建了一个EJB 2.我将它部署在JBoss-IDE 1.6上,然后创建了一个JUnit测试来访问它。这里是我使用的客户端代码:EJB客户端错误

public class DossierBeanTest extends TestCase { 
     protected DossierHome dossierHome; 
     protected Dossier dossier; 

     public DossierBeanTest(String argo){ 
       super(arg0); 
     } 

     protected void setUp() throws Exception { 
       super.setUp(); 
       Hashtable env=new Hashtable(); 


       env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 
       env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 
       env.put(Context.PROVIDER_URL,"jnp://localhost:1199"); 
       Context context=new InitialContext(env); 

       Object finderRef=context.lookup(dossierHome.JNDI_NAME); 
       dossierHome=(DossierHome)PortableRemoteObject.narrow(finderRef,DossierHome.class); 
       dossier=dossierHome.create(); 

      } 

      public void testGetString() throws RemoteException { 
       assertEquals("Test",dossier.getTest()); 
      } 

但问题是,这个客户端失败,出现错误:

 javax.naming.CommunicationException: Could not obtain connection to any of these 
     urls: localhost:1199 and discovery failed with error : 
     javax.naming.CommunicationException: Receive timed out [Root Exception is 
     java.net.SocketTimeoutException: Receive timed out][Root exception is 
     javax.naming.CommunicationException: Failed to connect to server localhost:1199 
     .... 


     at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1416) 

....

回答

0

我猜你正在使用错误的端口号。您可以通过查看命令netstat -a的输出来查看。如果没有进程正在监听端口1199,则必须检查JBoss配置。

+0

应该更改哪个配置文件? – Attilah 2009-10-07 17:12:21

+0

查看文件“jboss-service.xml”,然后在。 – tangens 2009-10-07 18:19:08

0

默认端口是1099,你有改变吗?如果不尝试从1199切换端口。

此外,如果你在Linux上,你可能想尝试127.0.0.1而不是本地主机。

+0

我试着切换到127.0.0.1。这是同样的错误。 – Attilah 2009-10-07 17:00:59

+0

此主题可能有帮助 http://forums.sun.com/thread.jspa?forumID=58&tstart=0&threadID=288759&trange=15 – 2009-10-07 17:22:48

1

至于其他已经指出,JBoss的naming server默认监听端口1099。所以,除非你在conf/jboss-service.xml改变了这个值(服务名称jboss:service=Naming),你应该写:

env.put(Context.PROVIDER_URL,"jnp://localhost:1099); 

话虽这么说,我通常更喜欢在jndi.properties文件(放在类路径中)中提供JNDI环境设置。在你的情况,有以下内容:

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 

,并使用空参数的构造函数InitiatContext()

Context context = new InitialContext(); 

这使得代码可移植(可能不是在测试方面的问题,好吧,我宁愿不要硬编码这样的东西)。