引用Application服务器外部的EJB

时间:2013-11-15 10:13:52

标签: java eclipse java-ee jboss

我想知道你是否有人远程调用过EJB。这是我的情景:

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

我在JBOSS 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 类型:代理工厂是本地的 内容:错误 类型:远程业务接口 内容:com.tchouaffe.remote.interfaces.RemoteBusinessInterface 键入:远程主机URL 内容:socket://127.0.0.1:3873 /

不属于RemoteBusinessInterface

类型

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

感谢您的帮助。

爱德蒙

1 个答案:

答案 0 :(得分:0)

尝试检查以下几点:

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

  

属性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 context = new InitialContext(env);

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