【问题标题】:How to access an EJB?如何访问 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

【问题讨论】:

    标签: java jboss jakarta-ee ejb-3.0 stateless-session-bean


    【解决方案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 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多