简单EJB客户端调用的问题

本文介绍了一种使用EJB进行远程调用的方法,并详细记录了客户端代码的实现过程。文章探讨了在不设置和设置安全管理器的情况下遇到的不同权限拒绝异常,并寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写好了一个EJB并且也部署到了jboss下面,部署成功,简单说下组成
远程接口 Hello interface 定义了一个业务方法 public String hello()
本地接口 HelloLocal interface 和远程接口一样 public String hello()
Home接口 HelloHome interface
本地Home接口 HelloLocalHome interface
发布到jboss服务器底下成功
客户端代码如下
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.rmi.*;
import java.util.*;

//import myejb.*;
import examples.HelloHome;
import examples.Hello;

class HelloClientTest
{
public static void main(String[] args) throws Exception {
System.setProperty("java.security.policy","client.policy");

if(System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");

Context ctx = new InitialContext(env);

Object obj = ctx.lookup("Hello");
System.out.println("2.......................................");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(obj,HelloHome.class);
System.out.println("3.......................................");
Hello hello = home.create();
System.out.println(hello.hello());
hello.remove();
}
}
如果我去掉上面的System.setSecurityManager(new RMISecurityManager());
出现的错误是
[java] Exception in thread "main" java.security.AccessControlException: acc
ess denied (java.net.SocketPermission 230.0.0.4 connect,accept,resolve)
[java] at java.security.AccessControlContext.checkPermission(AccessCont
rolContext.java:323)
[java] at java.security.AccessController.checkPermission(AccessControll
er.java:546)
[java] at java.lang.SecurityManager.checkPermission(SecurityManager.jav
a:532)
[java] at java.lang.SecurityManager.checkMulticast(SecurityManager.java
:1188)
[java] at java.net.MulticastSocket.joinGroup(MulticastSocket.java:269)
[java] at org.jnp.interfaces.NamingContext.discoverServer(NamingContext
.java:1071)
[java] at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:
1199)
[java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:51
6)
[java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:50
9)
[java] at javax.naming.InitialContext.lookup(InitialContext.java:392)
[java] at HelloClientTest.main(Unknown Source)
[java] Java Result: 1
如果我加上上面的System.setSecurityManager(new RMISecurityManager())
出现的错误如下
[java] Exception in thread "main" java.security.AccessControlException: acc
ess denied (java.net.SocketPermission 230.0.0.4 connect,accept,resolve)
[java] at java.security.AccessControlContext.checkPermission(AccessCont
rolContext.java:323)
[java] at java.security.AccessController.checkPermission(AccessControll
er.java:546)
[java] at java.lang.SecurityManager.checkPermission(SecurityManager.jav
a:532)
[java] at java.lang.SecurityManager.checkMulticast(SecurityManager.java
:1188)
[java] at java.net.MulticastSocket.joinGroup(MulticastSocket.java:269)
[java] at org.jnp.interfaces.NamingContext.discoverServer(NamingContext
.java:1071)
[java] at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:
1199)
[java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:51
6)
[java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:50
9)
[java] at javax.naming.InitialContext.lookup(InitialContext.java:392)
[java] at HelloClientTest.main(Unknown Source)
[java] Java Result: 1
希望大家帮我看看错误原因,thanks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值