- 浏览: 3502959 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
在服务器部署的EJB最常用的调用是在同一个应用中的Servlet或JSP进行的。但是还有一些其他场景,例如单独运行的EJB客户端,以及跨应用服务
器之间的调用等等。在文档中,这些调用的方法并没有说明得很清楚。下面以Glassfish为例子,说明EJB得几种不同的调用方法。
一. 同一个应用中的EJB调用
在同一个EAR应用当中的EJB调用是EJB最常见的调用。在同一个EAR中既有EJB,又有Servlet。在Servlet中对EJB的调用比较简单。而且在开发EJB的时候,可以使用EJB的本地接口来提高性能。下面是一个EJB3.0调用的代码片断:
@EJB
private NewSessionRemote newSessionBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MyServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Returned string from Session bean is " + newSessionBean.sayHello("Wang Yu")
+ "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
二. 在同一个 Glassfish实例 不同应用的EJB调用
在同一个Glassfish实例 上(同一个JVM)可以部署多个应用,其中应用A中部署了EJB,而应用B中的Servlet可以调用应用A中的EJB。这种情况下,Servlet的调用代码完全和上面的一样,有一些区别是:
- EJB的调用必须通过Remote接口。
- 必须将EJB的Remote接口类放在本地的类路径下(WEB-INF/lib的jar文件或WEB-INF/classes下)
三.在应用容器中的客户端调用(ACC)
通过ACC来进行客户端的调用,在Glassfish种有详细的描述,请见(http://docs.sun.com/app/docs/doc/819-3659/6n5s6m5a6?q=java+ee+5&a=view )。
四. 独立的客户端调用EJB
如果是在一个独立的Java客户端对EJB进行调用,那么必须做到以下几步:
- EJB的调用必须通过Remote接口。
- 必须将EJB的Remote接口类放在本地的类路径下
- 类路径下还要包括其他的几个jar文件,这几个jar文件都在Glassfish的lib目录下,包括javaee.jar,appserv-rt.jar,appserv-ext.jar和appserv-deploy-client.jar
- 在Java命令中需要包括以下的参数,例如:
java -Dorg.omg.CORBA.ORBInitialHost=com.acme.Host1(指定Glassfish的主机名或IP地址,缺省是localhost)
-Dorg.omg.CORBA.ORBInitialPort=9876 (指定EJB所监听的IIOP端口,缺省是3700) -
在代码中进行显示的EJB lookup和调用。例如:
.......
public static void main(String[] args) {
try {
InitialContext ic =new InitialContext();
NewSessionRemote sayhello = (NewSessionRemote) ic.lookup("mypackage.NewSessionRemote");
String result = sayhello.sayHello("dad");
System.out.println(result);
} catch (NamingException ex) {
ex.printStackTrace();
}
}
........
五. 在别的Web容器中调用(Tomcat)
在 别的Web容器中的Servlet和JSP也可以对Glassfish上的EJB进行远程调用,这个调用从原理上就和在(四)中介绍的“独立的客 户端对EJB调用”一样,在调用的代码上有一点区别,就是在这些Web容器中通常对JDNI容器有自己的实现方法和参数设置,需要强制改变这些设置才能成 功调用Glassfish中的EJB,解决方案是加入以下代码:
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
", "puma.prc.sun.com");
props.setProperty("org.omg.CORBA.ORBInitialPort
", "6262");
InitialContext ic = new InitialContext(props);
当然,EJB的Remote接口和那几个Glassfish所带的应用服务器相关的Jar文件也要放到相应的类路径中。
六. 在不同的Glassfish容器之间调用
如果在(五)的场景中,调用者和被调者的应用都在Glassfish上,调用过程可以大大简化。在调用的Web应用中可以通过“corba interop”的技术对远端的EJB进行引用,而在代码中不需要进行任何的修改,就像在同一个Glassfish实例 上的EJB一样。例如,在调用者的Servlet中:
package wangyu;
import java.io.*;
import java.net.*;
import javax.ejb.EJB;
import javax.servlet.*;
import javax.servlet.http.*;
import mypackage.NewSessionRemote;
/**
*
* @author wangyu
* @version
*/
public class CallRemote extends HttpServlet {
@EJB
private NewSessionRemote newSessionBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet CallRemote</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Returned string from Session bean is " + newSessionBean.sayHello("Wang Yudasd") + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
这些代码和(一)中完全一样。但是在sun-web.xml中,需要加上EJB引用的配置:
<ejb-ref>
<ejb-ref-name>wangyu.CallRemote/newSessionBean</ejb-ref-name>
<jndi-name>corbaname:iiop:puma.prc.sun.com:3700#mypackage.NewSessionRemote</jndi-name>
</ejb-ref>
在JNDI的名字中指向另外一个Glassfish实例 (有可能在另外一台机器上)的地址中的EJB。
发表评论
-
字符串分割--java中String.split()用法
2013-03-06 14:25 74151在java.lang包中有String.sp ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3759原文出处:http://blog.chenlb.com/200 ... -
Fitnesse使用
2012-05-05 13:27 23494Fitnesse 的使用 一,介绍 Fitnesse是一种 ... -
Customizing the new FitNesse parser
2012-05-05 13:13 2134FitNesse began its life using ... -
java application中内嵌ActiveX控件
2011-11-14 15:57 5524我这里用的是SWT/JFace开发application,SW ... -
Google Java Developer Tools Downloads
2011-08-09 00:04 2347WindowBuilder Pro原来叫WindowB ... -
Jalita
2011-08-06 00:49 1565Jalita (Java light terminal ada ... -
【转】用Java写字符终端界面
2011-07-29 13:13 2122终端界面GUI开源项目charva。 这个框架让你可以用开发 ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14841大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1711charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22625Java Native Access 项目 在 ... -
JAVA上加密算法的实现用例
2011-06-25 12:38 4884来源:www.ibm.com ... -
如何将GlassFish作为Windows服务运行
2011-05-18 23:21 2375本文档来自GlassFish官方网站,详细介绍了将 G ... -
JAVA UDP打洞必备知识点---NAT
2011-05-05 12:56 8699一、引言 RFCl631 ... -
Keystore概念,Keytool工具使用
2011-04-28 16:20 2906近来由于项目需要做Single Sign On, 研究了一 ... -
利用Eclipse Profile Plugin监控分析Tomcat性能
2011-04-18 16:14 3702目前新版本的Eclipse在启动应用服务器的时候有一个新的选 ... -
m2eclipse: Eclipse is running in a JRE, but a JDK is required
2011-02-04 23:43 2542Eclipse 安装了Maven插件,启动Eclipse ... -
利用JNative实现Java调用动态库
2010-10-18 00:43 2100由于项目要求,需要用J ... -
RHEL5支持大内存
2010-10-08 16:19 3005安装 RHEL 5 ,硬件为 4G 内存,安装完成 ... -
Windows Server 2003 和 Windows 2000 提供大内存支持
2010-10-08 16:19 1854本文介绍物理地址扩展 ...
相关推荐
在Java EE环境中,EJB可以分为几种类型:Session Beans(会话bean)、Message Driven Beans(消息驱动bean)和Entity Beans(实体bean)。这些bean可以相互协作,以实现复杂的企业级应用逻辑。以下是一些关键概念: ...
拦截器是EJB 3.1中用于增强方法行为的一个重要机制,它可以在方法调用前后执行特定的操作。 - **拦截器概念**:拦截器可以用来拦截方法调用,并在方法执行前后添加额外的行为。 - **拦截器类格式**:定义了一个特定...
EJB是一种面向服务的组件,它允许开发者将复杂的企业级功能封装在可重用的模块中。EJB主要分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。 1. **会话...
总结,"Message-Driven Bean EJB实例源代码"涵盖了MDB的基本概念、实现方式以及在Java企业级应用中的使用。通过理解这些源代码,开发者可以学习如何利用MDB和JMS构建高效、可扩展的分布式系统。
EJB分为几种类型: 1. **Session Beans**: 代表客户端的单个会话,可以是无状态的(每次调用都会创建新的bean实例)或有状态的(维护会话期间的客户端状态)。 2. **Message Driven Beans (MDB)**: 用于处理消息...
【ejb-exemplo2:远程EJB计算器】项目是一个典型的Java企业级应用程序示例,它展示了如何使用Enterprise ...通过这个项目,开发者可以深入了解EJB的工作原理,以及如何在实际场景中利用EJB来构建分布式的企业级应用。
【Session Bean】是一种Java EE(Enterprise Edition)中的核心组件,主要负责在服务器端处理业务逻辑,提供会话状态。在企业级应用开发中,Session Bean是Java持久化框架的重要组成部分,它通过Java Naming and ...
在这21天的学习过程中,读者将逐步了解并掌握以下几个关键知识点: 1. **Java基础**:J2EE建立在Java语言之上,因此,首先需要熟悉Java语言的基本语法,包括数据类型、控制结构、类和对象等。 2. **Servlet与JSP**...
EJB有三种类型——会话bean、实体bean和消息驱动bean,掌握它们的工作原理和应用场景至关重要。 4. **JMS(Java Message Service)**:JMS是Java平台上的消息传递API,用于在分布式环境中进行异步通信。了解如何...
教程会展示如何创建和部署EJB,以及如何使用EJB进行远程方法调用。 4. **JMS(Java Message Service)**:JMS允许在分布式系统中发送和接收消息,用于解耦组件间通信。学习JMS可以帮助理解异步处理和消息队列的概念...
笔记可能涉及JNDI的基本操作和在J2EE应用中的应用场景。 6. **JTA(Java Transaction API)**:JTA为分布式事务处理提供了标准接口,确保在多组件环境中的数据一致性。笔记可能会讲解事务的ACID属性和JTA的使用方法...
3. **EJB(Enterprise JavaBeans)**:EJB提供了一种规范来创建可部署在服务器上的组件,主要分为会话bean、实体bean和消息驱动bean。考生需理解其工作原理、生命周期、事务管理以及远程接口的使用。 4. **JPA...
在这个特定的压缩包中,可能包含了JavaEE 7的所有主要组件和服务的详细说明,帮助开发者了解各个API的功能、用法以及调用规范。 JavaEE 7主要涵盖以下几个关键模块和API: 1. **Servlet 3.1**:这是处理HTTP请求的...
例如,在 JSF 中调用 JPA 对象来操作数据库数据,或者使用 CDI 来管理组件的生命周期等。 #### 三、实际应用案例 以一个简单的在线购物系统为例,可以使用 JSF 构建前端页面,利用 JPA 来处理商品信息、订单数据等...