EJB所有返回值必须实现 Serializable接口,否则会报些莫名其妙的错误.
并把 Glassfish 的 appserv-rt.jar 和 javaee.jar 包 客户程序的类路径
@Stateless(mappedName="ejb/MainActionJNDI")//远程JNDI
@Name("MainAction")
@Interceptors({org.jboss.seam.ejb.SeamInterceptor.class})
@AutoCreate
public class MainActionBean implements MainAction,MainActionRemote {
package cn.astrocom.ejb.client;
import java.util.List;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import cn.astrocom.extseam.MainActionRemote;
import cn.astrocom.extseam.bo.MainGrid;
/**
*
* @author fanzhi_kong
*
*/
public class MainActionClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Context jndiContext = getInitialJNDIFileContext();
// Context jndiContext = getInitialPropertiesContext();
/*
* 2.0 Object ref = jndiContext.lookup("ejb/MainActionJNDI");
* MainActionRemote mainAction = (MainActionRemote)
* PortableRemoteObject .narrow(ref, MainActionRemote.class);
*/
// 3.0
MainActionRemote mainAction = (MainActionRemote) jndiContext
.lookup("ejb/MainActionJNDI");
} catch (Exception ne) {
ne.printStackTrace();
}
}
// JNDI上下文 方式一
public static Context getInitialPropertiesContext()
throws javax.naming.NamingException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs",
"com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state",
"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
//EJB容器的ip
props.setProperty("org.omg.CORBA.ORBInitialHost", "172.16.140.103");
//EJB容器端口,默认为:3700
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ic = new InitialContext(props);
return ic;
}
/**
* JNDI上下文 方式二读配置文件 文件为:jndi.properties
*
* @return
* @throws javax.naming.NamingException
*/
public static Context getInitialJNDIFileContext()
throws javax.naming.NamingException {
return new InitialContext();
}
}
# optional. Defaults to localhost. Only needed if web server is running
# on a different host than the appserver
org.omg.CORBA.ORBInitialHost=172.16.140.103
# optional. Defaults to 3700. Only needed if target orb port is not
# 3700.
org.omg.CORBA.ORBInitialPort=3700
java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
分享到:
相关推荐
本教程主要介绍如何在Java客户端访问通过Glassfish发布的EJB,特别是EJB3.0的安全特性。 首先,我们要创建一个包含简单会话bean(session bean)的企业应用程序,并建立一个Java类库项目,该项目包含了会话bean的...
在客户端,我们需要使用JNDI(Java Naming and Directory Interface)来查找并调用远程EJB。首先,配置JNDI上下文,并查找EJB的JNDI名称,这通常是在服务器的部署描述符(如ejb-jar.xml或web.xml)中指定的: ```...
本文将深入探讨如何在Glassfish 4中创建远程EJB Bean以及如何解决堆栈溢出问题。 首先,要创建一个远程EJB Bean,你需要遵循以下步骤: 1. **定义接口**:创建一个接口,该接口将作为客户端与EJB Bean之间的通信...
EJB提供强大的事务管理能力,可以设置不同的事务属性,比如所需的事务级别、传播行为等,确保数据的一致性和完整性。 **安全性**: EJB支持角色基础的访问控制(RBAC),允许对EJB方法的调用进行权限验证,以确保...
在实际应用中,EJB组件需要部署到支持EJB3.0的应用服务器,如GlassFish、WildFly或TomEE等。部署时,Bean类、接口和相关的部署描述符(如果有)会被包含在ejb-jar文件中,然后该文件将被包含在一个更大的应用档案...
- 类似于使用数据库连接池,当收到对EJB方法的访问请求时,EJB容器会提取出一个实例为之服务,服务完毕后,再放回对象池中。 - 由于无状态会话Bean更具性能优势,因此条件允许的情况下,应优先考虑使用无状态会话...
EJB提供了一种标准的方式来实现业务逻辑,使得开发人员可以专注于业务逻辑的实现,而将复杂的分布式系统管理任务交给容器来处理。 在本入门例子中,我们将深入理解EJB的基本概念,包括实体(Entity)、会话...
此外,EJB还提供了安全性机制,如角色基础的访问控制(RBAC),允许管理员定义不同用户角色并限制其对EJB的访问权限。客户端必须具备相应的角色才能调用特定的EJB方法。 总结一下,开发EJB客户端涉及以下关键点: 1...
JNDI提供了一种标准的方式来查找和绑定对象,使得客户端可以透明地访问远程服务器上的EJB。一旦找到EJB,客户端就可以通过代理对象调用其方法,就像调用本地对象一样。 4. 部署与运行: 项目的部署涉及将ejb-...