Stateless Session Beans(无状态bean)的学习

Similar documents
拦截器(Interceptor)的学习

EJB-Programming-4-cn.doc

untitled

EJB-Programming-3.PDF

EJB3.0实例教程.doc

WebSphere 的基本配置

EJB3.0实例教程.doc

Microsoft Word - EJB3.0实例教程1.doc

会话Bean与实体Bean(CMP)使用

EJB3.0实例教程.doc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

Microsoft Word - ejb3.0实例教程.docx

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

优迈科技教学大纲2009版本

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

新・解きながら学ぶJava

untitled

epub 61-2

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

IoC容器和Dependency Injection模式.doc

XXXXXXXX

Microsoft Word - 01.DOC

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

《计算概论》课程 第十九讲 C 程序设计语言应用

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌


untitled

Chapter 9: Objects and Classes

RUN_PC連載_10_.doc

ABSSetup.doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

untitled

Java 1 Java String Date

天仁期末個人報告1.PDF

ebook

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

電機工程系認可證照清單 /7/1

Microsoft Word - 扉页.doc

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

Microsoft Word - 第3章.doc

untitled

Microsoft Word - json入门.doc

FileMaker 16 ODBC 和 JDBC 指南








1

<D2B0D0C4D3C5D1C52DC8CED6BEC7BF202D20BCC7CAC2B1BE>

秘密大乘佛法(下)

Page 2 of 12

國立臺東高級中學102學年度第一學期第二次期中考高一國文科試題

!! :!!??!!?!??!!!... :... :'?'?! :' ' :'?' :'?' :'!' : :? Page 2

Microsoft Word - Sunday

鎶ョ焊0

LiveBOS产品白皮书

1.5招募说明书(草案)

LiveBOS产品白皮书

JavaIO.PDF

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

软件工程文档编制

Untitled

1

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

chp6.ppt

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

5-1 nav css 5-2

Swing-02.pdf

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

中 国 矿 业 大 学

RunPC2_.doc

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

Microsoft PowerPoint - ch6 [相容模式]

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

基于CDIO一体化理念的课程教学大纲设计

Table of Contents

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

《大话设计模式》第一章

Spring3.x开发入门

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有

Microsoft Word - PHP7Ch01.docx

Transcription:

一 Stateless Session Beans( 无状态 bean) 的学习 第一步 : 要定义一个会话 Bean, 首先需要定义一个包含他所有业务方法的接口 这个接口不需要任何注释, 就像普通的 java 接口那样定义 调用 EJB 的客户端通过使用这个接口引用从 EJB 容器得到的会话 Bean 对象 stub 接口的定义如下: HelloWorld.java package com.foshanshop.ejb3; public interface HelloWorld { public String SayHello(String name); 第二步 : 实现上面的接口并加入两个注释 @Stateless, @Remote, 第一个注释定义这是一个无状态会话 Bean, 第二个注释指明这个无状态 Bean 的 remote 接口 在使用这两个注释时需要使用一些 EJB 的类包, 这些类包都可以在 jboss 安装目录的 client, /server/all/deploy/jboss-aop-jdk50.deployer,/server/all/deploy/ejb3.deployer,/lib/endorsed 等文件夹下找到, 或者在源代码的 Lib 文件夹下获得 ( 下载地址 :http://www.foshanshop.net/) 经过上面的步骤一个只存在 Remote 接口的无状态会话 Bean 就开发完成 无状态会话 Bean 是一个简单的 POJO( 纯粹的面向对象思想的 java 对象 ),EJB3.0 容器自动地实例化及管理这个 Bean 下面是 HelloWorld 会话 Bean 的实现代码 : HelloWorldBean.java 实现类的命名规则是: 接口 +Bean, 如 : HelloWorldBean package com.foshanshop.ejb3.impl; import com.foshanshop.ejb3.helloworld; import javax.ejb.remote; import javax.ejb.stateless; @Stateless @Remote ({HelloWorld.class) public class HelloWorldBean implements HelloWorld { public String SayHello(String name) { return name +" 说 : 你好! 世界, 这是我的第一个 EJB3 哦."; 发布成功, 在 jboss 的管理平台查看她们的 JNDI 名, 输入下面 URL http://localhost:8080/jmx-console/ 点击 service=jndiview, 查看 EJB 的 JNDI 名称 ( 如下图 ) 在出现的页面中, 找到 List of MBean operations: 栏 点击 Invoke 按钮, 出现如下界面可以看见 HelloWorld 会话 Bean 的 JNDI 名,JNDI 名的组成规则是 上层名称 / 下层名称, 每层之间以 / 分隔 HelloWorld 会话 Bean 的 JNDI 名是 :HelloWorldBean/remote HelloWorld 会话 Bean 发布成功当一个无状态会话 Bean 发布到 EJB 容器时, 容器就会为她创建一个对象 stub, 并把她注册进容器的 JNDI 目录, 客户端代码使用她的 JNDI 名从容器获得他的 stub 通过这个 stub, 客户端可

以调用她的业务方法 例子代码如下 : Test.jsp <%@ page contenttype="text/html; charset=gbk"%> <%@ page import="com.foshanshop.ejb3.helloworld, javax.naming.*, java.util.properties"%> <% Properties props = new Properties(); props.setproperty("java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory"); props.setproperty("java.naming.provider.url", "localhost:1099"); props.setproperty("java.naming.factory.url.pkgs", "org.jboss.naming"); InitialContext ctx; try { ctx = new InitialContext(props); HelloWorld helloworld = (HelloWorld) ctx.lookup("helloworldbean/remote"); out.println(helloworld.sayhello(" 东方通 ")); catch (NamingException e) { out.println(e.getmessage()); %> 说明一下 JBOSS 环境 EJB JNDI 名称默认的命名规则, 命名规则如下 : 1> 如果 EJB 应用打包成后缀为 *.ear 的发布文件, 默认的 JNDI 名称是访问本地接口 :EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local 访问远程接口 :EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote 例 : 如果 HelloWorld 应用打包成 HelloWorld.ear 文件, 访问她远程接口的 JNDI 名是 : HelloWorld/HelloWorldBean/remote 2> 如果 EJB 应用打包成后缀为 *.jar 的发布文件, 默认的 JNDI 名称是访问本地接口 :EJB-CLASS-NAME/local 访问远程接口 :EJB-CLASS-NAME/remote 例 : HelloWorld 应用打包成 HelloWorld.jar 文件, 访问她远程接口的 JNDI 名称是 : HelloWorldBean/remote 另外有一点要注意 :EJB-CLASS-NAME 是不带包名的, 如 com.foshanshop.ejb3.impl.helloworldbean 只需取 HelloWorldBean 最后 :war 文件的文件名为 EJBTest.war,http://localhost:8080/EJBTest/Test.jsp 访问客户端 改进部分 :EJB JNDI 名称 JBOSS 和 TW5.0 不同 JBOSS 环境 EJB JNDI 名称默认的命名规则, 命名规则如下 : 1> 如果 EJB 应用打包成后缀为 *.ear 的发布文件, 默认的 JNDI 名称是访问本地接口 :EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local 访问远程接口 :EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote 例 : 如果 HelloWorld 应用打包成 HelloWorld.ear 文件, 访问她远程接口的 JNDI 名是 : HelloWorld/HelloWorldBean/remote

2> 如果 EJB 应用打包成后缀为 *.jar 的发布文件, 默认的 JNDI 名称是访问本地接口 :EJB-CLASS-NAME/local 访问远程接口 :EJB-CLASS-NAME/remote 例 : HelloWorld 应用打包成 HelloWorld.jar 文件, 访问她远程接口的 JNDI 名称是 : HelloWorldBean/remote TW5.0 EJB JNDI 名称与 JBOSS 不同 : 包名.remote 的类名 lifecycle1=(lifecycleremote)ctx.lookup("lifecycle1.lifecycleremote" ); 在 TW5.0 中,SESSION BEAN 例子 lifecyclebean1.java 如下 : package lifecycle1; import javax.ejb.*; import javax.annotation.postconstruct; import javax.annotation.predestroy; /** * Session Bean implementation class lifecyclebean1 */ @Stateful @Remote(lifecycleRemote.class) public class lifecyclebean1 implements lifecycleremote { @Init public void initialize(){ System.out.println(" 使用 @Init 注解的方法被调用 "); @PostConstruct public void Construct(){ System.out.println(" 使用 @PostConstruct 注解的方法被调用 "); @PreDestroy public void exit(){ System.out.println(" 使用 @PreDestroy 注解的方法被调用 "); @Remove public void stopbean(){ System.out.println(" 使用 @Remove 注解的方法被调用 "); public String operate(){ System.out.println(" 使用业务方法被调用 "); return " 调用业务方法 ";

在 TW5.0 中,lifecycleRemote.java 如下 package lifecycle1; import javax.ejb.remote; @Remote public interface lifecycleremote { public String operate(); public void stopbean(); JSP 调用 SESSION BEAN 如下 : <%@ page language="java" contenttype="text/html; charset=gbk"%> <%@ page import="lifecycle1.*, javax.naming.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>insert title here</title> </head> <body> <% try{ InitialContext ctx=new InitialContext(); lifecycleremote lifecycle1=(lifecycleremote)session.getattribute("lifecycle1"); if(lifecycle1==null){ // 创建购物车 lifecycle1=(lifecycleremote)ctx.lookup("lifecycle1.lifecycleremote" ); // 访问远程接口与 JBOSS 不同 : 包名.remote 的类名 session.setattribute("lifecycle1",lifecycle1); // 缓存 out.println(lifecycle1.operate()); lifecycle1.stopbean(); catch(exception e){ e.printstacktrace(); %> </body> </html>

具体例子见附件 lifecycle1.ear.rar