我想知道你是否有人远程调用过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以外的类型。
感谢您的帮助。
爱德蒙
答案 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包含在远程接口中。