java - 使用 context.lookup 加载远程接口(interface)时出现问题

标签 java ejb-3.1 jboss7.x

我曾经使用jboss 4.2.3 GA,一切正常(至少从客户端调用远程接口(interface))。现在我尝试使用 Jboss 7.0.1 FINAL 进行部署

我(在服务器项目上)这个类:

@Remote(ConfigurationHelperRemote.class)
@Local(ConfigurationHelperLocal.class)
@Stateless
public class ConfigurationHelper implements ConfigurationHelperRemote,  ConfigurationHelperLocal {
   ...
}

我有远程接口(interface)

@Remote
public interface ConfigurationHelperRemote {
  ...
}

现在我曾经在上下文的帮助下从客户端调用远程接口(interface),如下所示:

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,服务器名为 server-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>

我需要在哪里配置上下文名称?或者我做错了什么?

非常感谢和问候, 豪克

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 ) {

      }
   }

最佳答案

对于可移植 JNDI 语法,查找名称如下所示:

  1. java:global[/应用程序名称]/模块名称/企业 Bean 名称[/接口(interface)名称]
  2. java:模块/企业 Bean 名称/[接口(interface)名称]
  3. java:app[/模块名称]/企业 Bean 名称[/接口(interface)名称]

您可以在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 代码中使用了这种格式...

关于java - 使用 context.lookup 加载远程接口(interface)时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293710/

相关文章:

java - JlibModbus Java 库的 Modbus 读取超时错误

jakarta-ee - 如何使用 WAS7 创建 EJB 3 应用程序

jakarta-ee - EJB 3.1 : Does it allow injection of beans into resources not managed by the container?

jakarta-ee - 当容器管理的 tx EJB 提交时,如何捕获和包装 JTA 抛出的异常?

jboss7.x - 系统属性在 standalone-full.xml

JavaFX- float 菜单

java - 如何写入 Tomcat 日志文件

java - JPA的内部运作

java - 访问安全域时出现 EJBAccessException

java - 如何只获取窗口的可见部分(Windows、gdi32、user32 等)