如何访问 EJB?
Posted
技术标签:
【中文标题】如何访问 EJB?【英文标题】:How to access an EJB? 【发布时间】:2011-04-29 00:05:01 【问题描述】:我正在尝试在 Eclipse 中的 JBOSS 4.2 上开发基本 EJB3 应用程序
我在 eclipse 中创建了一个 EJB 项目。
以下是我的远程和本地接口。
package com.test;
import javax.ejb.Local;
@Local
public interface HelloWorldLocal
public String getGreeting();
package com.test;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote
public String getGreeting();
我的 ejb 实现是
package com.test;
import javax.ejb.Stateless;
@Stateless
public class HelloWorld implements HelloWorldRemote, HelloWorldLocal
public HelloWorld()
// TODO Auto-generated constructor stub
public String getGreeting()
// TODO Auto-generated method stub
return "First EJB People";
我已经将它部署为 JBoss 中的爆炸 JAR,它运行良好。
我的第一个问题是:
我还有什么要添加到这个爆炸的罐子里?
其次,我创建了一个独立的客户端并将上面的 jar 添加到它的类路径中
客户端代码如下
包 com.testejb;
导入 java.io.FileInputStream; 导入 java.util.Properties;
导入 javax.naming.InitialContext;
public class TestBean
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
HelloWorldRemote getMess = null;
try
Properties props = new Properties();
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
props.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ic = new InitialContext(props);
//
getMess = (HelloWorldRemote) ic.lookup("HelloWorldRemote/remote");
System.out.println(getMess.getGreeting());
catch (Exception e)
// TODO: handle exception
e.printStackTrace();
jar 的名称是 FirstEJB。 我已尝试查找为 FirstEJB/HelloWorldRemote/remote。
但是当我运行程序时,我得到了错误
javax.naming.NameNotFoundException: HelloWorldRemote not bound
如果我将查找键入为 HelloWorld/remote,我会收到错误
Caused by: java.io.InvalidClassException: org.jboss.ejb3.remoting.BaseRemoteProxy; local class incompatible: stream classdesc serialVersionUID = 1126421850898582900, local class serialVersionUID = -2711693270411201590
【问题讨论】:
【参考方案1】:我还有什么要添加到这个爆炸的罐子里?
没什么,可以用的。
我已尝试查找为 FirstEJB/HelloWorldRemote/remote
对于 JBoss,JNDI 名称将是:
<myEarName>/<EJB-Name>/remote
如果未指定,则 EJB 名称默认为 Bean 名称。因此,在您的情况下,不使用 EAR 包装,JNDI 名称应该是:
HelloWorld/remote
顺便说一下,这应该在部署时记录在服务器日志中。
如果我将查找键入为 HelloWorld/remote,则会收到错误 (...)
用于查找的 JNDI 名称是正确的,这个错误是另一个与EJBTHREE-1118 非常相似的问题。可以试试 JBoss 4.2.3.GA 吗?
【讨论】:
以上是关于如何访问 EJB?的主要内容,如果未能解决你的问题,请参考以下文章
在 Singleton 的 PreDestroy 方法中访问无状态 EJB
从另一个客户端访问部署在 JBoss 7.0.1 中的 ejb
我无法设置我的 jndi.properties 来访问 Jboss 5 上的远程 EJB