1

我创建了一个 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

4 回答 4

1

对于玻璃鱼,请参阅打击链接。 http://allinoneissues.blogspot.jp/2012/05/orgjnpinterfacesnamingcontext-failed-to.html

于 2012-05-29T06:02:20.757 回答
1

正如其他已经指出的那样,JBoss命名服务器默认侦听端口 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();

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

于 2010-01-09T15:28:52.697 回答
0

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

于 2009-10-07T16:43:08.040 回答
0

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

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

于 2009-10-07T16:43:47.150 回答