我创建了一个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)
...
答案 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)
对于玻璃鱼,请参阅吹制链接。 http://allinoneissues.blogspot.jp/2012/05/orgjnpinterfacesnamingcontext-failed-to.html
答案 2 :(得分:0)
我猜你使用的是错误的端口号。您可以通过查看命令netstat -a
的输出来检查此信息。如果没有进程正在侦听端口1199,则必须检查JBoss配置。
答案 3 :(得分:0)
默认端口是1099,你有没改变它?如果没有尝试从1199切换端口。
此外,如果您使用的是Linux,则可能需要尝试127.0.0.1而不是localhost。