0

我想知道你们中是否有人曾经远程调用过 EJB。这是我的场景:

我在自己的 jar 文件中有一个远程接口包。然后是依赖于前一个的EJB模块(另一个jar文件)将接口实现为@Stateless会话bean。

我已经在 J​​BOSS 5.1.0.GA 中部署了 EJB 模块。当我尝试从 Eclipse 中调用 EJB 时,返回的对象未被识别为接口类型。以下是不同的java代码。

业务界面:

@Remote
public interface RemoteBusinessInterface
{
 public CustomerResponse getCustomerData( final CustomerRequest customerRequest );
}

在自己的jar文件中实现类包:

@Stateless
public class RemoteEJBBean implements RemoteBusinessInterface
{

   public CustomerResponse getCustomerData( final CustomerRequest customerRequest )
{...

以及调用远程 EJB 的代码:

public class TestRemoteEjb
{

public static void main( final String[] args )
{
    try
    {
        InitialContext initialContext = new InitialContext();
        Object ref = initialContext.lookup( "java:/CustomerServiceBean/remote" );
        System.out.println( ref );
        if ( ref instanceof RemoteBusinessInterface )
        {
            System.out.println( "RemoteBusinessInterface" );
        }
        else
        {
            System.out.println( "Not of type RemoteBusinessInterface" );
        }

    }
    catch ( NamingException e )
    {
        e.printStackTrace();
    }
}

}

输出内容如下:

参考类名称:代理:com.tchouaffe.remote.interfaces.RemoteBusinessInterface 类型:ProxyFactoryKey 内容:ProxyFactory/remote-ejb-1.0.0-SNAPSHOT/CustomerServiceBean/CustomerServiceBean/remote 类型:EJB 容器名称内容:jboss.j2ee:jar =remote-ejb-1.0.0-SNAPSHOT.jar,name=CustomerServiceBean,service=EJB3 类型:代理工厂是本地内容:false 类型:远程业务接口 内容:com.tchouaffe.remote.interfaces.RemoteBusinessInterface 类型:远程主机 URL内容:socket://127.0.0.1:3873/

不是 RemoteBusinessInterface 类型

我一直想知道为什么返回的对象是 RemoteBusinessInterface 以外的类型。

谢谢你的帮助。

埃德蒙

4

1 回答 1

0

尝试检查以下几点:

似乎您没有初始化InitialContext对象。根据 JBoss 5文档,所需的属性是:

属性 env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.NamingContextFactory"); env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); env.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); InitialContext 上下文 = 新 InitialContext(env);

另外,尝试检查您的客户端代码是否具有必要的依赖项。文档对什么是 jar 文件不够清楚,但此链接可以帮助您识别它们。您还需要将 jar 包含在远程接口中。

于 2013-11-18T13:39:13.627 回答