我正在尝试从阅读有关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中,我也无法看到remote / MailerEJB Bean。
我正在使用jboss-5.0.1.GA + JBDS + java 1.7.0
有人可以帮帮我吗?
答案 0 :(得分:1)
首先,您要确保在JBoss中正确部署EJB及其给出的绑定名称,因此如果您无法在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 {... }
此外,在this post中,您可以找到有关如何从简单的命令行Java程序远程调用EJB的具体说明。