EJB入门问题,远程客户端调用服务器remote和local方法~第一次提问,望高手不吝指教!

我定义了一个接口:
interface ServiceRemote{
remoteMethod();
}
和一个接口
interface ServiceLocal{
localMethod();
}

接着是一个实现类:
@stateless
@Remote({ServiceRemote.class})
@Local({ServiceLocal.class})
public class ServiceImpl() implements ServiceRemote,ServiceLocal{
private String a = "哈哈哈哈";
public void localMethod(){
System.out.println("本地方法"+a);
}
remoteMethod(){
System.out.println("远程方法"+a);
}
}

我现在在远程客户端:把ServiceRemote复制过来(此时它只有一个remoteMethod,跟服务器端一致),并且为它增加了一个localMethod()方法(这一步是为了测试能不能访问本地方法)。

第一次提问,望高手不吝指教!

现在在远程客户端调用的时候发现竟然可以引用localMethod(即可以通过它访问到a字符串)!

按理说,我上面已经定义了ServiceLocal是本地接口了,虽然实现类有它的方法,但是客户端应该也不能直接引用吧?

求教,ejb远程客户端引用的规则!

[quote]@stateless
@Remote({ServiceRemote.class})
@Local({ServiceLocal.class})
public class ServiceImpl() implements ServiceRemote,ServiceLocal{
private String a = "哈哈哈哈";
public void localMethod(){
System.out.println("本地方法"+a);
}
remoteMethod(){
System.out.println("远程方法"+a);
}
} [/quote]

你的这个ServiceImpl类,可以被远程调用,因为实现了Remote接口。

而你的通过客户端的存根对象,调用方法时,调用传到了Server端的ServiceImpl,而在ServiceImpl中恰好有 localMethod方法。所以就被调用了。

[b]看看你的客户端代码,以及工程的结构、部署的情况。[/b]

[quote]可以调用remote.localMethod()和remote.remoteMethod()[/quote]

你的Remote是ServiceRemote的实例,怎么可能调用localMethod()的方法呢?这在编译时就会出错的。

手动添加?? 难道你的客户端还有ServiceLocal这个接口??

客户端应该放的只是存根接口。