0

我试图从我正在阅读的关于 JBoss 5 (JBoss AS 5 Developmet) 的书中构建一个示例,但是即使直接来自书中的代码也无法正常工作。

这是我的界面:

@Remote
public interface Mailer {

    public void sendMail(String aToEmailAddr, 
                         String aSubject, String aBody);

}

这是实现此接口的 EJB

@Stateless  
@RemoteBinding(jndiBinding="remote/MailerEJB")

public  class MailerBean implements Mailer {... }

这是尝试查找 bean 的客户端应用程序。

public class MailClient {
     public static void main(String[] args) throws Exception
       {
          InitialContext ctx = new InitialContext();
          Mailer mailer = (Mailer) ctx.lookup("remote/MailerEJB");


       }

}

当我尝试运行 MailClient 类时,我得到了以下异常

Exception in thread "main" javax.naming.NameNotFoundException: remote not bound

我也有 jndi.properties 文件,我将它添加到构建路径中,它看起来像这样>

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jnp.interfaces

即使在 jmx-console 中,我也根本看不到远程/MailerEJB Bean。

我正在使用 jboss-5.0.1.GA + JBDS + java 1.7.0

有人可以帮帮我吗?

4

1 回答 1

1

首先,您必须确保 EJB 已正确部署在 JBoss 中并为其提供了绑定名称,因此如果您在 JMX 控制台的 JNDIView 中看不到 bean,则肯定是部署问题。为确保它已正确部署,您可以在部署 EJB(您的 ejb-jar 或 ear)时检查 JBoss 日志,查找类似于以下内容的行:

EJBBindingName - EJB3.x Default Remote Business Interface

在您的情况下,如果您定义的绑定是正确的,它应该是:

remote/MailerEJB - EJB3.x Default Remote Business Interface

这一行表示为 EJB 提供的真实 JNDI 名称,它是您在远程调用中必须使用的名称。

另一方面,尝试删除注释和类定义之间的界线:

@Stateless  
@RemoteBinding(jndiBinding="remote/MailerEJB")
public  class MailerBean implements Mailer {... }

此外,在这篇文章中,您可以找到有关如何从简单的命令行 Java 程序远程调用 EJB 的具体说明。

于 2012-12-11T14:53:54.463 回答