项目结构如下:
HelloWorldClient类是HelloWorld的ejb3客户端调用类
IHelloWorldRemote是接口(两年没做C++,还是喜欢C++的表示法)
HelloWorldBean是IHelloWorldRemote的实现类
所需的jar包如下:
appserv-deployment-client.jar
appserv-ext.jar
appserv-rt.jar
javaee.jar
这些jar包在glassfish_home/lib目录下均可找到
IHelloWorldRemote代码如下:
package my.ejb3.iface;
public interface IHelloWorldRemote
{
public String sayHello();
}
HelloWorldBean代码如下:
package my.ejb3.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import my.ejb3.iface.IHelloWorldRemote;
@Stateless(mappedName="HelloWorldBean")
@Remote(IHelloWorldRemote.class)
public class HelloWorldBean implements IHelloWorldRemote
{
public String sayHello()
{
return "Hey, Hello World!";
}
}
@Stateless标签表明这个类是一个无状态会话Bean,mappedName最好设置,理由后面解释
@Remote(IHelloWorldRemote.class)表明IHelloWorldRemote接口是一个远程接口,只能以远程方式来访问
至此,一个简单的EJB3会话Bean已完成,打包helloworld.jar
打开glassfish web控制台,部署helloworld.jar至“EJB模块”
HelloWorldBean的客户端调用代码:
import ... //此处省略
public class HelloWorldClient
{
public static void main(String[] args)
{
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");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
try
{
InitialContext ctx = new InitialContext(props);
IHelloWorldRemote helloWorld = (IHelloWorldRemote)ctx.lookup("HelloWorldBean");
String result = helloWorld.sayHello();
System.out.println(result);
}
catch (NamingException e)
{
e.printStackTrace();
}
}
}
当然这里由于glassfish是在本机所以Host设置为localhost,如果非本地,请改为对应IP
glassfish的EJB端口默认为3700,如果安装过程有改动,请改为对应端口
如果顺利的话,控制台将打印出:
Hey, Hello World!
如果客户端和服务器是在同一台机器上,客户端的调用代码可以简化为:
public class HelloWorldClient
{
public static void main(String[] args)
{
try
{
InitialContext ctx = new InitialContext();
IHelloWorldRemote helloWorld = (IHelloWorldRemote)ctx.lookup("HelloWorldBean");
String result = helloWorld.sayHello();
System.out.println(result);
}
catch (NamingException e)
{
e.printStackTrace();
}
}
}
这是因为InitialContext默认会读取jndi.properties文件,而appserv-rt.jar包中提供了一个这样的jndi.properties文件。另外,Host默认是localhost,端口默认是3700。
至此,一个HelloWorld的EJB3无状态会话Bean已完成。
注意:
mappedName就是在InitialContext lookup时使用的名称。
如果我们不设置这个mappedName,那么部署后的EJB名称是什么呢?在jboss中将会是HelloWorldBean/remote,而在glassfish中将使用IHelloWorldRemote接口的全名,即my.ejb3.iface.IHelloWorldRemote(注意是接口的全名)。为了去掉这些不必要的麻烦,建议设置mappedName。
glassfish上开发ejb的一些参考资料:
http://groups.google.com/group/glassfish_china/web/ejb
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment

- 大小: 8.1 KB
分享到:
相关推荐
**企业级JavaBeans (EJB) 3.0:核心概念与Session Bean详解** 企业级JavaBeans(Enterprise JavaBeans,...在深入学习EJB 3.0之前,建议阅读"**EJB3.0开发Session Bean.pdf**"这个文档,它将提供更详细的指导和实例。
总结,EJB3.0无状态SessionBean的例子展示了如何利用注解简化开发流程,以及如何通过本地和远程接口进行组件间的通信。理解并掌握这些概念对于构建可扩展、健壮的企业级Java应用至关重要。通过学习这个示例,开发者...
EJB分为三种类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。在这个Demo中,我们可能看到会话Bean的示例,它们作为业务逻辑的代理,负责处理客户端请求。 2. ...
EJB(Enterprise JavaBeans)..."EJB消息驱动bean Demo"为你提供了一个实际操作的例子,通过它你可以学习如何设置和使用MDB,以及如何利用JMS进行通信。理解并熟练掌握这些概念对于开发企业级的Java应用程序至关重要。
3. Glassfish, WildFly, TomEE等:Java EE应用服务器,提供运行Session Bean的环境。 4. JNDI浏览器:用于查看和管理服务器上的JNDI资源。 5. IDE插件:例如Eclipse的EJB插件,简化Bean的创建和配置。 在实际应用中...
在EJB中,Session Bean是一种重要的组件类型,主要处理客户端的交互逻辑。本教程将深入探讨基于Java的EJB中的有状态和无状态Session Bean。 1. 有状态Session Bean(Stateful Session Bean) 有状态Session Bean...
在实际开发中,"sessionbean1.exe"可能是一个用于演示或教学目的的示例程序,它可能包含了Session Bean的实例,帮助开发者更好地理解Session Bean的工作原理和配置过程。通过运行这个程序,开发者可以直观地看到...
GlassFish V2 是一个比较完整的ejb3服务器,性能也有了很大的提高,因此最近试用了一下,并通过Tomcat进行了分布式调用。 Session Bean: com.test.session.TestSessionBean, TestSessionRemote web项目: test...
**EJB3(Enterprise JavaBeans 3)**是Java EE平台的一个重要组成部分,它提供了一种规范来创建可部署在服务器上的组件,主要用于企业级应用的开发。EJB3引入了许多改进,使得开发者能够更方便地使用Java进行企业级...
3. **EJB3 Session Bean**:创建EJB3 Session Bean来封装业务逻辑。Session Bean可以调用JPA API来操作数据库,如`EntityManager`和`EntityManagerFactory`。使用`@Stateless`或`@Stateful`注解标记Bean的类型。 4....
**EJB3.0开发入门 Step by Step** Enterprise JavaBeans(EJB)是...通过阅读"EJB3.0开发Entity.pdf"、"EJB3.0开发Session Bean.pdf"和"EJB3.0开发Message Driven Bean.pdf",你将能深入学习并掌握EJB3.0的相关知识。
SessionBean是EJB中最常用的一种类型,用于实现业务逻辑。SessionBeans分为无状态和有状态两种。 - **16.5.2 开发无状态 SessionBean** 无状态SessionBean是最常用的SessionBean类型,它不维护与特定客户端相关...
3. **定义EJB组件**:通过New -> Session Bean或Entity Bean,可以快速创建EJB3组件,并通过注解设置其属性和行为。 4. **部署与测试**:Eclipse 3.5允许在内置服务器(如Tomcat或Glassfish)上部署和测试EJB3应用...
本实例开发将深入探讨EJB2.0的核心概念,特别是会话bean的实例化与使用。 1. **会话Bean(Session Beans)**:会话bean是EJB的一种类型,主要负责业务逻辑处理。它们可以代表客户端对象在服务器端执行操作,通常...
EJB3的核心包括Entity Beans(实体bean)、Session Beans(会话bean)和Message-driven Beans(消息驱动bean),其中Entity Beans主要用于数据持久化,Session Beans用于处理业务逻辑,而Message-driven Beans则用于...
3. **部署服务器:**常见的EJB容器有GlassFish、WildFly等。 #### 四、EJB3 核心API - **javax.ejb:**包含所有EJB核心接口和注解。 - **@Stateless、@Stateful、@Singleton:**分别用于声明不同的会话Bean类型。 ...
EJB3应用通常部署在Java EE应用服务器上,如Glassfish、WildFly或WebLogic等。开发者需要创建一个包含所有必需bean和元数据的ejb-jar文件,并将其打包进war或ear文件中。 ### 10. 持续集成与测试 EJB3支持单元测试...
通过这些图文教程,你可以逐步掌握EJB 3.0的基本要素,包括实体bean、消息驱动bean和session bean的开发和使用。在实践中,结合IDE(如Eclipse或NetBeans)和应用服务器(如GlassFish或JBoss),你将能更好地理解和...
在本教程中,我们将深入探讨EJB(Enterprise JavaBeans)3中的本地接口和无状态bean的开发。EJB是Java企业级应用的核心组件,用于构建可扩展、安全且可靠的分布式系统。EJB 3是其重要的一个版本,引入了诸多简化开发...
你可以选择创建EJB类型,如Entity Bean、Session Bean或Message Driven Bean。对于快速开发,通常选择无状态Session Bean(Stateless Session Bean),因为它们更易于理解和管理。 四、配置EJB元数据 在新建的EJB类...