以下代码建立在glassfish v2基础上:
新建一个EJB模块
先写一个最简单的无状态Session Bean,首先定义一个远程接口:
@Remote
public interface HelloRemote {
String sayHi(String name);
}
用@Remote标注表明这是一个远程接口,在接口里声明一些业务方法。接着定义一个会话Bean实现该接口:
@Stateless
public class HelloBean implements HelloRemote {
public String sayHi(String name) {
return "Hi " + name;
}
}
@Stateless标注表明这是一个无状态会话Bean,完成了这个简单的Demo后,打包部署到服务器上。接着我们来测试这个会话Bean,新建一个WEB模块,我们利用这个web应用来远程调用会话Bean。我们可以在web模块里新建一个Servlet:
public class HelloServlet extends HttpServlet {
@EJB
private HelloRemote helloBean;在Servlet里定义了一个成员变量,@EJB标注表明远程接口的代理将依赖注入到成员变量,在doGet或doPost方法里可以直接使用该代理调用会话Bean的业务方法:
PrintWriter out = response.getWriter();
try {
out.println(helloBean.sayHi("Tom"));
} finally {
out.close();
}
JSP却有所不同,这里不能使用@EJB标注,要使用传统的JNDI lookup方式:
<%
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup(HelloRemote.class.getName());
out.println(helloBean.sayHi("Tom"));
%>
这个测试用web模块已经完成,将WEB模块打包部署后即可以运行
不过,如果我们自己指定了会话Bean的JNDI名,那么以上的测试代码将发生异常,例如:
@Stateless(mappedName="hello")
public class HelloBean implements HelloRemote {
public String sayHi(String name) {
return "Hi " + name;
}
}
这里我们指定了会话bean的JNDI名为"hello",更改后的EJB模块需要重新部署,还要更改相应的Servlet和Jsp中的代码:
@EJB(mappedName="hello")
private HelloRemote helloBean;
Servlet已经更改了,只有一点点不同。
<%
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup("hello");
out.println(helloBean.sayHi("Tom"));
%>
Jsp也做了小小的改动,如此更新后重新部署WEB模块,测试代码即可顺利运行
需要注意的是:
1、根据EJB容器的不同,EJB的JNDI生成规则并不一样,最好还是从各服务器的JNDI树查找
2、如果是远程调用,还需要将EJB模块jar包和服务器的客户端jar包(如weblogic10g,需要wlclient.jar、wl-j2ee-client.jar)拷贝到客户端应用的lib目录下
3、如果是远程调用,还需要指定JNDI服务器上下文环境的配置信息Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL,各服务器具体配置不一样:
服务器 |
Context.INITIAL_CONTEXT_FACTORY |
Context.PROVIDER_URL |
Context.URL_PKG_PREFIXES |
weblogic |
weblogic.jndi.WLInitialContextFactory |
t3://localhost:7001 |
|
jboss |
org.jnp.interfaces.NamingContextFactory |
localhost:1099 |
org.jboss.naming:org.jnp.interfaces |
glassfish |
com.sun.enterprise.naming.SerialInitContextFactory |
localhost:8080 |
|
分享到:
相关推荐
【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...
1. **EJB3核心概念**: - **实体Bean(Entity Bean)**:代表数据库中的持久化对象,EJB3引入了JPA(Java Persistence API),使得实体Bean的定义更简洁,通过注解可以直接映射到数据库表。 - **会话Bean(Session...
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
**EJB3基础教程** Enterprise JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的服务器端应用程序的重要技术。EJB3是EJB规范的一个重大改进版本,它极大地简化了开发过程,引入了许多现代编程...
1. **注解驱动(Annotation-based)**:在EJB3中,开发者可以使用注解来声明组件的角色、生命周期方法和持久化属性,如`@Entity`、`@Stateless`、`@Stateful`、`@SessionBean`等,大大减少了XML配置文件的使用。...
**ejb3进阶案例详解** ejb3(Enterprise JavaBeans 3.0)是Java EE平台中的核心组件之一,它极大地简化了企业级应用程序的开发。ejb3引入了许多新特性和改进,使得开发人员可以更加高效地构建可扩展、可维护的企业...
1. **注解驱动**:EJB3摒弃了EJB2.x中的XML配置,大量使用Java注解来声明bean的角色、事务属性、安全角色等,大大减少了部署描述符的编写工作。 2. **无状态会话bean(Stateless Session Beans,SSB)**:这类bean...
1. **配置Struts的Action**:定义Action类,这些类通常调用EJB3的bean来完成业务操作。 2. **配置Struts的配置文件**:在struts-config.xml或struts2的struts.xml中,定义Action的映射和视图跳转规则。 3. **部署...
本文将深入探讨EJB3中的Entity Bean,它是EJB3中的持久化组件,用于代表数据库中的实体。 1. **实体Bean的概念** 实体Bean是EJB3中的数据存储模型,它与数据库中的记录相对应。在EJB3中,实体Bean不再需要编写...
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
EJB3是EJB规范的一个重大改革版本,引入了许多简化开发的新特性,使得Java开发者能够更高效地构建分布式企业应用。 1. **EJB的概述** EJB是一种组件模型,它定义了如何在服务器端部署和管理业务逻辑。EJB3是基于...
1. **注解驱动(Annotation-Based)**:EJB3引入了注解,使得开发者无需编写大量的XML配置文件,如`@Entity`用于定义实体类,`@Stateless`或`@Stateful`用于声明无状态和有状态会话bean,`@PersistenceContext`和`@...
1. Beginning EJB3 Application Development From Novice to Professional联接http://download.csdn.net/source/1865607 2. EJB3 in Action 2007联接http://download.csdn.net/source/1865636 3. Mastering EJB3联接...
EJB3是Java EE(Java Platform, Enterprise Edition)的一部分,主要用于构建可扩展且易于管理的企业级服务,而Struts1.x则是一个MVC(Model-View-Controller)框架,用于简化Web应用的开发。本实例将讲解如何将EJB3...
1. EJB3概述 EJB3引入了注解驱动的编程模型,消除了XML配置文件的需求,大大减少了开发工作量。它包括三种主要类型的bean:Entity Bean(实体bean)、Session Bean(会话bean)和Message-driven Bean(消息驱动bean...
Struts1和EJB3是Java企业级开发中的两个重要框架。Struts1是一个MVC(Model-View-Controller)框架,主要用于构建Web应用程序的控制层,而EJB3则是Java EE平台的一部分,用于实现业务逻辑和服务层。在这个"struts1+...
### EJB3 最新学习教程知识点详解 #### 一、EJB3 概念与特点 **企业级JavaBean(EJB)**是Java平台的一部分,用于开发和管理基于组件的企业应用程序。EJB3(Enterprise JavaBeans 3)是EJB规范的一个版本,它大大...
EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了重大改进,极大地简化了开发流程,降低了学习曲线,提升了开发效率。 在"EJB3实战的源代码"这个资源中,我们可以深入学习和理解EJB3的各种特性。EJB3引入了...
**EJB3入门** Enterprise JavaBeans(EJB)是Java EE平台的核心组件之一,用于构建企业级分布式应用程序。EJB3是EJB规范的一个重要版本,它极大地简化了开发过程,降低了EJB技术的门槛,使得更多的开发者能够利用...