EJB客户端错误

时间:2009-10-07 16:29:15

标签: java java-ee ejb jboss-tools

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

   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) 

...

4 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样,JBoss naming server默认侦听端口1099.所以,除非你在conf/jboss-service.xml(服务名jboss:service=Naming)中更改了这个值,否则你应该写:< / p>

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();

这使得代码可移植(在测试环境中可能不是问题,好吧,我更喜欢不对这些东西进行硬编码)。

答案 1 :(得分:1)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

此外,如果您使用的是Linux,则可能需要尝试127.0.0.1而不是localhost。