- 浏览: 103698 次
- 性别:
- 来自: 北京
最新评论
对于初学像我这样初学EJB的菜鸟来讲,EJB的配置是一件非常繁琐的事情,不堪回首啊。呵呵,今天终于明白了昨天晚上遇到的一个白痴错误,所以将一个简单的例子写下来。
我这个例子的前提是EJB已经发布成功,在servlet中对已经发布的EJB的调用。
首先已要做的就是将已发布的EJB组件的jar文件拷贝到当前Web工程的lib下,其目录结构为:
EJB端:
EJBFolderName
|
|------classes
| |
| |-------hello
| | |---------hello.class //Remote
| | |---------helloHome.class //Home
| | | ---------helloBean.class //Bean
| |
| |--------META-INF
| |------ejb-jar.xml //EJB配置文件
| |------MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
|
|-----------src
|
|-------hello
| |---------hello.java //Remote
| |---------helloHome.java //Home
| | ---------helloBean.java //Bean
|
|--------META-INF
|----ejb-jar.xml //servlet配置文件
|-----MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
servlete端:
ServletFolderName
|
|----------src
| |-------hello
| | |--------TestEJB.java //被Servlet(只为目标清晰,也可直接写到Servlet内)
| |
| |-------TestEJBServlet.java //一个Servlet 调用 包hello 中的方法。
|
|
|----------WebRoot
|----------META-INF
| |--------MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
|
|----------WEB-INF
|----------classes
| |-----------TestEJBServlet.class
| |
| | -----------hello | |----------TestEJB.class
|-----------lib
| |----------FirstEJB.jar //EJB打好的一个Jar包!EJB2.0不可缺少
|
|------------web.xml //Servlet配置文件
基本文件结构就是这样。结束!
*/下面是针对每个文件的详细说明://首先是Servlet端,Servlet有一个servlet文件,实现doGet方法和doPost方法,还有一个Servlet配置文件 web.xml
//TestEJBServlet.java:
//TestEJB.java:
//Servlet 配置文件 web.xml
接下来是EJB端:三个java文件(Home.java,Remote.java,Bean.java)和一个ejb-jar配置文件
helloHome.java(就是Home.java 本地接口)
hello.java(就是Remote.java 远程接口)
helloBean.java(就是Bean.java 实现类)
还有一个配置文件ejb-jar.xml
最后还想说一下对EJB的调用的集中方式,主要有三种:
1、用property帮助设置环境
2、用Hashtable帮助设置环境
3、WAS默认的方法
我这个例子的前提是EJB已经发布成功,在servlet中对已经发布的EJB的调用。
首先已要做的就是将已发布的EJB组件的jar文件拷贝到当前Web工程的lib下,其目录结构为:
EJB端:
EJBFolderName
|
|------classes
| |
| |-------hello
| | |---------hello.class //Remote
| | |---------helloHome.class //Home
| | | ---------helloBean.class //Bean
| |
| |--------META-INF
| |------ejb-jar.xml //EJB配置文件
| |------MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
|
|-----------src
|
|-------hello
| |---------hello.java //Remote
| |---------helloHome.java //Home
| | ---------helloBean.java //Bean
|
|--------META-INF
|----ejb-jar.xml //servlet配置文件
|-----MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
servlete端:
ServletFolderName
|
|----------src
| |-------hello
| | |--------TestEJB.java //被Servlet(只为目标清晰,也可直接写到Servlet内)
| |
| |-------TestEJBServlet.java //一个Servlet 调用 包hello 中的方法。
|
|
|----------WebRoot
|----------META-INF
| |--------MANIFEST.MF //Manifest-Version: 1.0 Class-Path:
|
|----------WEB-INF
|----------classes
| |-----------TestEJBServlet.class
| |
| | -----------hello | |----------TestEJB.class
|-----------lib
| |----------FirstEJB.jar //EJB打好的一个Jar包!EJB2.0不可缺少
|
|------------web.xml //Servlet配置文件
基本文件结构就是这样。结束!
*/下面是针对每个文件的详细说明://首先是Servlet端,Servlet有一个servlet文件,实现doGet方法和doPost方法,还有一个Servlet配置文件 web.xml
//TestEJBServlet.java:
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import hello.TestEJB; public class TestEJBServlet extends HttpServlet { protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { this.doPost(request,response); //直接以页面的形式调用Servlet 调用的事doGet方法, //也可以直接在doGet方法中调用EJB } public void doPost(HttpServletRequest request, HttpServletResponse response){ try{ new TestEJB("iiop://localhost:2809/").test(); //调用 TestEJB.java 中的test()方法。 } catch(Exception e){ e.printStackTrace(); } } }
//TestEJB.java:
package hello; import javax.naming.Context; import java.util.Properties; import javax.naming.NamingException; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import java.rmi.RemoteException; import javax.ejb.CreateException; public class TestEJB { private static final String JNDI_NAME = "HelloEJB"; //EJB上传websphere时用的JNDI Name private String url; private HelloHome home; public TestEJB(String url) throws NamingException{ this.url = url; home = lookUpHome(); } private Context getInitialContext() throws NamingException { Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); prop.put(Context.PROVIDER_URL, url); return new InitialContext(prop); } private HelloHome lookUpHome() throws NamingException{ Context ctx = getInitialContext(); Object home = ctx.lookup(JNDI_NAME); return (HelloHome)PortableRemoteObject.narrow(home,HelloHome.class); } public void test() throws RemoteException,CreateException,NamingException { Hello hello = (Hello)PortableRemoteObject.narrow(home.create(),Hello.class); System.out.println(hello.sayHello()); } /*public static void main(String args[]) throws Exception{ try{ new TestEJB("iiop://localhost:2809/").test(); }catch(Exception e){ e.printStackTrace(); } }*/ }
//Servlet 配置文件 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>TestEJB</servlet-name> <servlet-class>TestEJBServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestEJBServlet</servlet-name> //Servlet映射到web服务器上的名字 <url-pattern>/servlet/TestEJBServlet</url-pattern>//Servlet映射到web服务器上的路径 </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file>//默认开始页面(可有可无) </welcome-file-list> </web-app>
接下来是EJB端:三个java文件(Home.java,Remote.java,Bean.java)和一个ejb-jar配置文件
helloHome.java(就是Home.java 本地接口)
package hello; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface HelloHome extends EJBHome { public Hello create()throws CreateException,RemoteException; }
hello.java(就是Remote.java 远程接口)
package hello; import java.rmi.RemoteException; import javax.ejb.EJBObject; public interface Hello extends EJBObject { public String sayHello()throws RemoteException; }
helloBean.java(就是Bean.java 实现类)
package hello; import java.rmi.RemoteException; import javax.ejb.EJBException; import javax.ejb.CreateException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class HelloBean implements SessionBean { private SessionContext ctx; private String words ; public String sayHello(){ System.out.println("i am in an EJB server."+words); return words; } public void ejbCreate() throws CreateException{ this.words = "hello world"; } public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbPassivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void ejbRemove() throws EJBException, RemoteException { // TODO Auto-generated method stub } public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException { this.ctx = arg0; } }
还有一个配置文件ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <display-name>HelloEjb</display-name> <enterprise-beans> <session> <ejb-name>FirstEJB</ejb-name> <home>hello.HelloHome</home> <remote>hello.Hello</remote> <ejb-class>hello.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>FirstEJB</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
最后还想说一下对EJB的调用的集中方式,主要有三种:
1、用property帮助设置环境
Properties properties = System.getProperties(); properties.put(Context.PROVIDER_URL, "iiop://localhost:2809"); properties.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); Context ctx = new InitialContext(properties);
2、用Hashtable帮助设置环境
Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); environment.put(Context.PROVIDER_URL, "iiop://localhost:2809"); //可选,同“corbaloc:iiop:localhost:2809”的效果一样。 Context ctx= new InitialContext(environment);
3、WAS默认的方法
Context ctx = new InitialContext(); Object ref = ctx.lookup("ejb/TestEJB"); TestEJBHome home = (TestEJBHome) PortableRemoteObject.narrow(ref, TestEJBHome.class); testinst = home.create(); arg1.getWriter().println(testinst.testEJB()); System.out.println(testinst.testEJB());
发表评论
-
PHP中的mb_convert_encoding与iconv函数介绍
2012-02-24 18:01 1020英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用 ... -
PHP实现动态生成饼状图、柱状图和折线图(转)
2011-08-29 17:59 20280PHP在图像操作方面的表 ... -
HTML&JavaScript实现全选小例子
2011-07-07 14:32 1766<html> <head> & ... -
Linux的计划任务
2011-07-01 11:10 841cron是一个linux下的 ... -
Linux Shell编程学习笔记
2011-06-28 10:31 1702其实作为命令语言互动式地解释和执行用户输入的命令只是S ... -
Suse查看版本
2011-04-14 11:10 48571. 在linux里查看补丁版本,一般的机器查看系统版本都是u ... -
BAT批处理文件与文件夹(zz)
2011-04-06 14:35 22631 建bat文件自动执行复制,删除命令。 例1:以下是 ... -
批处理中Copy与Xcopy的区别
2011-04-06 14:34 109811):copy不能在有子目录存 ... -
关于RPT的license的问题
2011-04-06 10:21 1276RPT的license一共有两种,一种是导入安装RPT时附带的 ... -
DB2的备份与恢复
2011-03-28 09:40 1138说明:在线增量备份前提: 1、更改数据库参数 logretai ... -
java启动相应的windows程序来打开文件
2011-03-07 11:49 10043这里有两种方法: 1.利用java运行时环境和windows系 ... -
HTTP代码整理供查询(转的)
2011-01-11 13:54 919代码 指示 2xx 成功 ... -
Java正则表达式(转)
2010-12-20 14:24 1027package example.regularexpres ... -
RollingFileAppender和DailyRollingFileAppender
2010-12-07 17:28 2081log4j提供RollingFileAppender和Dail ... -
(转载)DB2错误代码大全
2010-12-07 10:30 2218DB2错误代码/SQL返回码信 ... -
select的事件(转)
2010-11-25 16:10 1226onactivate 当对象设置为活动元素时触发。 onaf ... -
[转载] Java Timer和TimerTask详解
2010-11-16 09:55 9351.概览 Timer是一种定时 ... -
Timer的schedule()方法的正确使用
2010-09-20 16:08 1624timer.schedule(new MyTask(),lo ... -
DB2 常用命令(转)
2010-09-16 09:53 15091.1 启动DB2服务 db2start ... -
DB2资料搜集(转载)
2010-09-13 13:53 11021.使用db2cmd打开db2命令行 2.db2look - ...
相关推荐
使用原始的servlet操作熟悉EJB的实体管理。 本实例主要功能:实现对员工、角色、账号、部门的关系管理。 本实例的实体设计:部门-员工:一对多。员工-账号:一对一。账号-角色:一对一。 主要采用EJB进行会话管理。...
5. **在Servlet中调用EJB**: 在同一个项目和容器中,Servlet可以通过注解方式(如`@EJB`)来直接注入并调用EJB。例如,Servlet `LoginServlet` 中,`@EJB`注解的`FristSessionBeanRemote`字段会自动查找并注入对应...
在本项目中,Servlet通常作为控制器,处理HTTP请求,调用业务逻辑,然后将结果传递回JSP页面进行渲染。例如,用户提交登录表单时,对应的Servlet会验证用户名和密码,如果验证成功,则将用户信息保存到session,并重...
例如,在Servlet中调用EJB: ```java InitialContext ctx = new InitialContext(); UserService userService = (UserService) ctx.lookup("java:global/myapp/UserService"); userService.insertUser(new UserDTO(...
2. **编写Servlet**:接着,编写`LoginServlet`和`RegisterServlet`,在`doPost`方法中处理表单提交的数据,调用EJB方法进行业务处理。 3. **实现EJB**:创建`UserEJB`,实现数据库操作,如查询、插入和更新用户信息...
6. **EJB和Java EE集成**:深入EJB的概念,如Stateless Session Beans、Stateful Session Beans、Message-driven Beans等,以及如何在Servlet中调用EJB方法。 7. **Spring框架的应用**:介绍Spring MVC模式,Spring...
8 从Servlet中调用EJB 附录A 超文本传输协议 A. 1 MIME A. 2 URI和URL A. 3 HTTP详解 A. 3. 1 建立TCP/IP连接 A. 3. 2 客户端发送请求 A. 3. 3 服务器返回响应 A. 3. 4 HTTP报头 附录B Servlet API
3. 处理完成后,Servlet调用适当的JSP页面来展示结果给用户。 4. 如果需要与数据库交互,Servlet会将数据传递给JavaBean或EJB组件,由这些组件完成数据的存储或检索。 #### 实例分析 文章还提到了一个EAM(企业...
在Servlet的`doGet`或`doPost`方法中,可以直接调用注入的EJB的方法,进行业务逻辑处理。 此外,EJB 3.0还引入了拦截器(Interceptors),这是一种AOP(面向切面编程)机制,可以用于添加跨切面的功能,如日志、...
本示例主要介绍如何在JBoss 4.0环境中,使用JSP调用EJB组件。JBoss 4.0是一个全面的Java EE应用服务器,它整合了Tomcat 5.0作为内置的Servlet和JSP容器,使得开发者可以同时处理EJB和Web应用的部署。 首先,我们...
在"ServletAndEJB3"这个源代码项目中,我们可以期待看到如何在实际应用中结合使用Servlet和EJB3,包括Servlet的请求处理、EJB的创建和调用,以及可能的JPA配置和数据库交互。通过分析这些源代码,开发者可以深入理解...
在教务管理系统中,Servlet扮演了控制器的角色,负责接收用户的请求,调用相应的服务并传递数据,再将处理结果转发到对应的JSP页面。 3. **EJB (Enterprise JavaBeans)**: EJB是Java EE平台的核心组成部分,为开发...
在MVC中,Servlet常作为控制器的角色,接收用户请求,调用模型处理,然后返回结果。 3. **JavaBean**: JavaBean是符合一定规范的Java类,主要用于封装数据和提供业务逻辑。在MVC模式下,JavaBean通常作为模型层的...
2. **数据通信优化**:AJAX可以与EJB中的Session Beans交互,以异步方式调用服务方法,获取或更新数据。这种方式减少了网络延迟,提高了响应速度。 3. **界面反馈**:EJB处理业务逻辑后,结果可以通过JSF组件显示在...
这样,Servlet就可以直接调用EJB提供的业务方法。同时,HTML页面访问的URL需要在Servlet配置中进行映射,确保请求能正确路由到对应的Servlet。 4. **动态创建业务对象**:在Servlet中,我们会动态创建业务对象。这...
### WebLogic 6.0中EJB的使用详解 #### 一、概述 EJB(Enterprise JavaBeans)是Java EE规范中的一个重要组成部分,主要用于构建分布式企业应用中的业务逻辑层。本文将详细介绍如何在WebLogic 6.0服务器环境中部署...
"ejb-project1-web"则可能是一个Web应用模块,它可能包含了Servlet、JSP等Web组件,这些组件可以调用EJB服务,将结果呈现给用户。这个模块与EJB模块通过Java EE的依赖注入(Dependency Injection)机制进行通信,...
例如,Servlet或JSF可以作为客户端,调用EJB进行业务处理,然后将结果呈现给用户。JPA则负责数据持久化,与EJB实体bean交互。 在压缩包中的"codefans.net"文件可能是一个指向代码示例的链接或者实际的源代码文件。...
在其他Java EE组件(如Servlet、JSP或JSF)中,你可以通过JNDI查找来调用EJB。MyEclipse提供了方便的代码生成工具,可以帮助你快速生成JNDI查找和EJB调用的代码。 七、EJB的高级特性 除了基础的EJB开发,MyEclipse...