我曾经使用jboss 4.2.3 GA,一切都运行正常(至少从客户端调用远程接口)。现在我尝试使用Jboss 7.0.1 FINAL
进行部署我(在服务器项目上)这个类:
@Remote(ConfigurationHelperRemote.class)
@Local(ConfigurationHelperLocal.class)
@Stateless
public class ConfigurationHelper implements ConfigurationHelperRemote, ConfigurationHelperLocal {
...
}
我有远程接口
@Remote
public interface ConfigurationHelperRemote {
...
}
现在,我曾经借助上下文从客户端调用远程接口,如下所示:
configurationHelper = (ConfigurationHelperRemote) ctx.lookup("ear-1.0.0/ConfigurationHelper/remote");
但这不再适用了。现在我收到此错误消息
javax.naming.NameNotFoundException: Name 'ear-1.0.0' not found in context ''
我的ear文件名为 ear-1.0.0.ear ,内部客户端名为 client-1.0.0.war ,服务器名为服务器1.0.0.jar
这是ear文件中的application.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>ear</display-name>
<module>
<web>
<web-uri>client-1.0.0.war</web-uri>
<context-root>/client</context-root>
</web>
</module>
<module>
<ejb>server-1.0.0.jar</ejb>
</module>
</application>
我需要在哪里配置上下文名称?或者我做错了什么?
非常感谢和许多问候, Hauke
PS。:我刚打印出所有JNDI上下文信息,并且只有数据库中的数据源。我这样做了:
public static void showJndiContext( Context ctx, String name, String space )
{
if( null == name ) name = "";
if( null == space ) space = "";
try {
NamingEnumeration<NameClassPair> en = ctx.list( name );
while( en != null && en.hasMoreElements() ) {
String delim = ( name.length() > 0 ) ? "/" : "";
NameClassPair ncp = en.next();
System.out.println( space + name + delim + ncp );
if( space.length() < 40 )
showJndiContext( ctx, ncp.getName(), " " + space );
}
} catch( javax.naming.NamingException ex ) {
}
}
答案 0 :(得分:1)
对于Portable JNDI语法,查找名称如下:
您可以在http://java.sun.com/javaee/6/docs/tutorial/doc/gipjf.html#girgn
查看更多详情因此,对于您的代码,请尝试
configurationHelper = (ConfigurationHelperRemote) ctx.lookup("java:global/ear-1.0.0/server-1.0.0/ConfigurationHelper");
我在远程bean的代码中使用的这种格式......