写好了一个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
分享到:
相关推荐
调用EJB的客户端程序,通过远程接口方式调用
1. **EJB客户端接口**:了解EJB客户端如何与远程服务器上的EJB组件进行交互,包括定义Home接口和Remote接口,以及调用EJB方法的步骤。 2. **JNDI查找**:学习如何通过Java Naming and Directory Interface (JNDI) ...
1. **客户端调用**: 客户端通过JNDI(Java Naming and Directory Interface)查找目标EJB的JNDI名称,获取到Bean的Home接口实例。 2. **创建Session Bean**: 如果是Session Bean,客户端通过Home接口的`create()`...
EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于...通过接口定义、EJB实现、JNDI查找和客户端调用,我们可以构建起可靠的分布式系统。此示例提供了一个简单但实用的起点,帮助开发者理解并实践这一技术。
本文将详细探讨EJB3客户端调用EJB的两种情况。 1. **在JBoss集成环境下调用EJB** 当EJB3应用部署在JBoss服务器上,且调用者也在同一个环境中时,调用EJB相对简单。在这种情况下,Web应用可以作为客户端直接调用...
- Remote Method Invocation(RMI):这是EJB之间最基础的调用方式,允许一个EJB实例调用另一个EJB的远程接口方法。 - Local Interface:如果调用方和被调用的EJB在同一应用服务器内,可以使用本地接口,这样可以...
5. **客户端调用**:客户端通过JNDI查找EJB的Home接口,然后创建并调用Bean实例。 **三、WebSphere中调用EJB** 在WebSphere中,调用EJB需要注意以下几点: 1. **JNDI配置**:确保WebSphere服务器配置了正确的JNDI...
本文将深入探讨EJB客户端开发的相关知识点,帮助开发者更好地理解和实践这一技术。 首先,我们需要了解EJB的基本概念。EJB是一种服务器端组件,分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity ...
EJB客户端调用EJB通常包括以下步骤: 1. **查找EJB**:客户端通过JNDI(Java Naming and Directory Interface)查找EJB的JNDI名称,从而获取到EJB的引用。 2. **创建会话**:客户端使用EJB的引用创建会话,这可能...
这意味着每个客户端调用的实例都是独立的,不会在不同的调用之间保持数据。这对于执行一次性操作或提供计算服务非常有用。 在EJB 3.0中,我们可以通过以下步骤创建一个无状态会话Bean: 1. **定义Bean接口**:首先...
4. **添加业务方法**:向会话bean中添加实际的业务逻辑处理方法,这些方法会被客户端调用来执行特定的操作。 5. **部署企业应用程序**:将包含会话bean的整个企业应用程序部署到Glassfish服务器上。部署后,EJB就...
EJB客户端从不直接访问真实的EJB组件,而是通过容器来间接访问。容器充当EJB组件的代理,负责创建、管理和销毁这些组件。 #### 二、EJB容器的作用 EJB容器提供了运行在其内的组件(即EJBs)所需的高级管理功能。...
5. **调用EJB3方法**:通过代理对象,客户端可以像调用本地方法一样调用EJB3组件的方法,所有的网络通信和事务管理都在后台自动处理。 6. **分布式EJB3**:如果EJB3组件部署在多个服务器上,JNDI查找可能返回一个...
当没有客户端调用时,容器可以自由销毁实例。 **编写一个无状态的SessionBean程序** 1. **定义接口**:包括`remote`和`local`接口。 2. **实现无状态会话Bean**:实现定义的接口。 3. **配置部署描述符**:使用`...
- **远程方法调用(Remote Method Invocation, RMI)**:客户端通过RMI调用EJB的接口,实现跨JVM的通信。适用于客户端不在同一个应用服务器上的情况。 - **本地方法调用(Local Method Invocation)**:当客户端和...
- **远程方法调用 (Remote Method Invocation, RMI)**:客户端通过接口调用EJB的方法,该接口由EJB容器生成并暴露,实现跨JVM通信。 - **本地方法调用 (Local Method Invocation)**:当EJB和客户端在同一JVM中运行...