tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> 信息与通信 >>

11.BS多层架构应用程序设计入门-中间件技术


中间件技术
Weblogic 7.0

系统版本
? Windows XP Home Edition SP2 ? Microsoft SQL Server 2000 SP4 ? Weblogic 7.0

使用中间件技术实例:
? 功能简述:完成一个登入的网页界面及 身份验证的设计。 ? 设计要求:
– 界面、验证程序和数据库分布不同的计算机 上。验证算法变更不需要改变界面程序。 – 验证程序部署在应用服务器上,同时适用 Java应用程序和JSP多种技术开发的界面应 用程序。界面的变化无需修改验证程序。

步骤:
? 第一步: 用户输入用户编号和密码,点击登入 按钮,系统根据输入数据与数据库中的数据进 行验证。验证成功则进入系统主页面,否则提 示登入错误,保留原输入内容,可继续输入。 ? 第二步:进入主页面要求在主页面上显示用户 名等其他信息。 ? 第三步:增加修改密码的功能 ? 第四步:主页面显示学生基本信息,并提供对 此进行增加、删除和修改的操作。 进入开发:

1 基础准备: 1.1 Eclipse及安装
? Eclipse 是一个开放源代码的、基于 Java 的可 扩展开发平台。是一个框架和一组服务,通过 插件构建开发环境。 ? MyEclipse是Eclipse的插件,安装后Eclipse升级 为功能强大的J2EE集成开发环境,支持EJB开 发、部署、测试以及除错。 ? 安装:把Eclipse释放到任一目录下,运行 Eclipse.exe即启动了Eclipse。正常安装Eclipse 后,方可安装MyEclipse。

1.2 安装weblogic及启动
? 安装Weblogic ? 在安装目录下找到startwls.cmd (bea\weblogic700\bin),启动“命令提示符” 并以命令方式运行该批处理程序。 ? 第一次启动即将完成时,要求输入用户名和密 码。(hpzhou/011863) ? 启动IE,若能成功访问下列地址,则表示安装 和启动成功:http://localhost:7001/console

在MyEclipse中配置Weblogic
在windows/Preferences进行如下配置,可使用工具栏按钮启动weblogic。

在MyEclipse中配置Weblogic
? 配置JDK及虚拟机参数:上图选择的下拉项中 选配置JDK,选择Add,弹出的对话框中任意 输入JRE Name,在JRE home directary选择BEA 下面的JDK安装路径,在Optional Java VM arguments对话框里面输入:
-ms64m -mx64m -Djava.library.path=“H:/BEA/weblogic700/server/bin" Dweblogic.management.discover=false Dweblogic.ProductionModeEnabled=false

? Jar包路径设置:上图选择的下拉项中选配置 Paths,加入BEA安装路径下/weblogic700/server /lib中的webservices.jar和weblogic.jar两个包 。

weblogic支持的平台和浏览器
Platform Windows NT Windows NT Windows NT Windows 2000 Windows 2000 Windows 2000 Solaris BrowserVersion Internet Explorer 6.x Internet Explorer 5.x Netscape Navigator 4.7x Internet Explorer 6.x Internet Explorer 5.x Netscape Navigator 4.7x Netscape Navigator 4.6

对不符合上述要求的处理
? 提示:If you wish, you may continue with your current browser, but please be aware that the console may not function correctly. ? 可选择:Continue with my current browser ? 如Windows XP Home Edition SP2尽管不 在上表所列,但也能运行。
? http://localhost:7001/console页面显示如下:

1.3 SQL Server的设置
? 在企业管理器中,右击需要访问的注册 – 选择菜单“属性”并进入“安全性”,身份验证选 用“SQL Server和Windows”,并输入sa的密码。 – 选择菜单“编辑注册…属性”,使用SQL Server身 份验证,并输入sa和密码。 ? 若使用Windows身份验证方式,Weblogic将不能连接到 对应的数据库。 ? 建立数据库teaching,建立数据表students(id char(6),name varchar(10),password char()),输入若干数 据。

2 weblogic配置(在console页面) 2.1 配置连接SQL Server的连接池
1)使用Weblogic提供的的JDBC(必须安装SQL Server Service Pack 4)
? 在JDBC/Connection Pool中Configure a new JDBC Connection Pool…,进行如下设置: ? Name:MyJDBC Connection Pool ? URL:jdbc:weblogic:mssqlserver4:teaching@localhost:143 3 //teaching为数据库名,1433为SQL Server的端口号, 可用SQL Server的“服务器网络实用程序”中TCP/IP属 性中设置。 ? Driver Classname:weblogic.jdbc.mssqlserver4.Driver

? Properties:user=sa password=011863 ? 在Target页中把Available中MyServer移入 Chosen,点击Apply,若无错误则表示配置成 功。 ? 在点击Apply时若有错误,可在启动weblogic的 命令窗口中查看,比如Target中的Apply时发生 错误can?t open a socket,可能是因为没有安装 SQL Server SP 4。 ? 在设置的属性前有三角型!的,表示该属性值 变化后(会闪烁),必须重新启动weblogic。

2)使用Microsoft提供的JDBC驱动 ? 在Microsoft网站下载Microsoft SQL Server 2000 Driver for JDBC,然后安装。 ? 安装后,软件在Program files目录下的Microsoft SQL Server 2000 Driver for JDBC中。

2.2 配置DataSource
? Name:缺省为MyJDBC Data Source,配 置后不能修改 ? JNDI Name:JNDISQLServer ? Pool Name:MyJDBC Connction Pool
(取自前面配置的SQL Server连接池的Name)

2.3 验证设置:使用Java程序通过DataSource读 取数据表数据
Connection con=null; Statement stmt=null; ResultSet rs=null; Context ctx=null; Properties p=new Properties(); //建立一个属性对象 p.put(Context.INITIAL_CONTEXT_FACTORY,“weblogic.jndi.WLInitialContex tFactory”); //设置上下文Context的INITIAL_CONTEXT_FACTORY的属性值 p.put(Context.PROVIDER_URL,“t3://localhost:7001”); //同上 ctx=new InitialContext(p); //建立初始上下文环境并传递参数P DataSource ds=(DataSource)ctx.lookup(“JNDISQLServer”);//搜索并获得数据源对象 con=ds.getConnection();//由数据源对象获得连接 stmt=con.createStatement(); rs=stmt.executeQuery("select * from students"); System.out.print(rs.getString("name"));

? 在eclipse中运行此程序前,在 Project/Properties/Java Build Path/Libraries点击 Add External JARs,然后选择目录 bea\weblogic700\server\lib中的weblogic.jar。 ? 在左侧的Package Explorer窗口,可以浏览 weblogic.jar中包含的所有类及其属性和方法。

Eclipse的Run菜单
? 在java browsing窗口中,可以列出多个 project。 ? 在Run…,可以设置一组可运行的Java Application,并可选择一个运行。 ? 直接点击工具栏运行按钮,运行最后一 次运行的Java Application。

3

MyEclipse中开发SessionBean(用户 验证逻辑)并发布

? 在Myeclipse中创建J2EE/EJB Project,Project Name:prj_CheckUser,J2EE Specification Level: J2EE1.3 ? 在此工程下,新建Session Bean,Package: pkg_CheckUser.ejb(建议首字母小写并以ejb为 后缀)。Name:SB_CheckUser(建议首字母 大写),EJB type为stateless。 ? 完成后在pkg_CheckUser.ejb包下产生一个 SB_CheckUser类,修改其中的方法 replaceWithRealBusinessMethod:

用以下程序取代replaceWithRealBusinessMethod, 同时改写interfaces中的该方法定义(xdoclet能生成)
public boolean checkUser(String idvalue,String pwvalue) throws EJBException { String sqlstr; Connection con=null; Statement stmt=null; ResultSet rs=null; Context ctx=null; Properties p=new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); p.put(Context.PROVIDER_URL,"t3://localhost:7001"); ctx=new InitialContext(p); DataSource ds=(DataSource)ctx.lookup("JNDISQLServer"); con=ds.getConnection(); stmt=con.createStatement(); sqlstr="select id,passwd from students where id='"+idvalue+"'"; rs=stmt.executeQuery(sqlstr); //以上程序与前面DataSource的验证程序基本相同

if (!rs.next()) { return false; //数据表中无idvalue匹配的用户编号 } else { if ((rs.getString("passwd").trim()).equals(pwvalue)) return true; //用户编号和密码验证通过 else return false; //密码不匹配 } }

用XDoclet自动生成Session Bean的接口文件、部 署描述文件
? 需要由XDoclet生成的文件如下:
– 接口文件:远程接口、本地接口、Home接口、本地Home接口 – 部署文件:ejb-jar.xml(标准ejb部署描述文件)、weblogicejb-jar.xml文件(weblogic部署ejb描述文件

? 配置工程的properties:右击工程,选择菜单Properties, 选中MyEclipse-Xdoclet,点击Add Standard,选择 Standard EJB。 ? 选中新加入的“Standard EJB”,在下面的列表框中右 击ejbdoclet,选择“Add”菜单,选择并加入weblogic。 ? 选中加入的 “weblogic”,在右侧的列表框中设置属性 值:destDir = src/META-INF。(用于生成weblogic-ejbjar.xml文件)

运行XDoclet生成文件
? 在工程上右键MyEclipse->Run Xdoclet,成功后 在工程下产生下列文件: ? 在pkg_CheckUser.ejb包下产生 SB_CheckUserSession.java ? 在pkg_CheckUser.interfaces包下产生 SB_CheckUser.java;SB_CheckUserHome.java; SB_CheckUserUtil.java。 ? 在META-INF目录中产生ejb-jar.xml和weblogicejb-jar.xml

部署EJB
? 右击工程,选择MyEclipse >Add and Remove Project Deployments ? 选择Add,Server中选择weblogic 7 ? 成功发布后,进入http://localhost:7001 /Console ,在Deployments/EJB中可以看到 该Session Bean。

EJB修改后编译和发布
? 步骤为:右击工程/MyEclispe/Run Xdoclet;使用工具栏上的发布按钮,先 remove该EJB,然后再发布该EJB。 ? 重新发布后,客户端调用后仍发现还是 原来的程序,原因是原EJB尚在容器中, 所以还要重新启动Weblogic。

查看weblogic中Server的JNDI
? Console中,mydomain/servers/myserver中, 点击view JNDI Tree。 ? 在Eclipse中,编译ctx.lookup(“ejb/SB_CheckUser”)时, 会检查JNDI Tree中是否存在 ejb/SB_CheckUser

4 客户端调用Session Bean 4.1 Java Application
import javax.naming.*; import java.util.Properties; public class class_callsb{ public static void main(String args[]) { Properties p=new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi. WLInitialContextFactory"); p.put(Context.PROVIDER_URL,"t3://localhost:7001"); Context ctx=new InitialContext(p); SB_CheckUserHome Home=(SB_CheckUserHome)ctx.lookup("ejb/ SB_CheckUser"); SB_CheckUser chkuser=(SB_CheckUser)Home.create(); System.out.print(chkuser.CheckUser(“hpzhou ", “011863")); } }

project的properties设置:
? 在project/properties/Java Build Path/Libraries中 Add Exteral JARs: weblogic.jar和Add Class Folder : p_ChkUser/classes/pkg_CheckUser/ interfaces。 ? 在project/properties/Java Build Path/Projects中选 中p_ChkUser。 ? 上述过程表明,客户端只需要获得进行身份验 证Session Bean的接口定义SB_CheckUserHome 和SB_CheckUser,就能调用其方法。即部署在 应用服务器weblogic中的SessionBean中的方法, 其算法的修改将不影响客户端程序的运行。

4.2 JSP调用SessionBean
? 新建Project/Web project,Project Name:wp_login.(J2EE1.3) ? 对该工程新建一个JSP,名为login.jsp。 ? 使用FrontPage设计一个登入页面,然后把下列内容粘贴 到login.jsp的body中:
<form method="POST" action=login.jsp> <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.txt" S-Format="TEXT/CSV" S-Label-Fields="TRUE" --> <p>用户帐户:<input type="text" name="T1" size="20">&nbsp;&nbsp;&nbsp; </p> <p>&nbsp; 密码:<input type="password" name="T2" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写 " name="B2"></p> </form>

? 启动Weblogic,点击工具栏中Deploy J2EE Project to Server,选择wp_login,然后Add到Weblogic后即发布成 功,然后通过http://localhost:7001/wp_login/login.jsp访问。

中文显示问题:
? 页面上中文显示为“?”的解决方法是 在网页的顶部加上 :
<%@page contentType="text/html; charset=gb2312"%>

? 此标记作用是使JSP服务器把JSP转换成 HTML时,能正确识别中文。 ? 下面HTML中相似作用的标记是使浏览 器正确解读中文。
<meta http-equiv=“Content-Type” content=“text/html; charset=gb2312”>

JSP调用SessionBean
? 在JSP首部加:%@page language="java" import="java.util.*,javax.naming.*,pkg_CheckUs er.interfaces.*" % ? 在JSP插入下列java代码:

<%String sName=request.getParameter(“UserName"); String sPassword=request.getParameter(“Password"); if ((sName!=null)) { Properties p=new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); p.put(Context.PROVIDER_URL,"t3://localhost:7001"); Context ctx=new InitialContext(p); SB_CheckUserHome Home=(SB_CheckUserHome)ctx.lookup("ejb/SB_CheckUser"); SB_CheckUser chkuser=(SB_CheckUser)Home.create(); if (chkuser.checkUser(sName,sPassword)) { session.setAttribute("enterable","yes"); response.sendRedirect("main.jsp"); } else out.print("<script language='JavaScript' type='text/JavaScript'>alert('用户名或密码 错误!请重新输入!');</script>"); } %> <form method="POST" action=login.jsp> <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.txt" S-Format="TEXT/CSV" S-Label-Fields="TRUE" --> <p>用户帐户:<input type="text" name=“UserName" size="20">&nbsp;&nbsp;&nbsp; </p> <p>&nbsp; 密码:<input type="password" name=“Password" size="20"><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p> </form>

解释:
? 客户端(IE)第一次请求该页面,带JSP引擎的Web服务器 (tomcat/weblogic等,IIS是web服务器但不包含JSP引擎)编译并 运行JSP中的Java程序( JSP引擎把JSP转换成.java文件即 Servlet,Servlet引擎将其载入服务器内存运行),产生结果以 HTML形式返回客户端。 ? Request是JSP内置对象,封装了来自客户端的请求(包括输入的 数据),getParameter获得来自客户端的参数值,第一次请求该 页面时,UserName(页面上的用户名的text)参数值为空。所以 最终返回客户端的是下部的HTML。 ? 用户在客户端根据HTML页面提示输入用户名和密码后,点击“提 交”按钮后,由于该按钮的type=“submit”,所以向服务器提交 该表单。 ? 服务器接收该表单并交给服务器中CGI程序处理,由于提交表单的 action属性为login.jsp,即表示由login.jsp接收并处理提交的 表单数据,由于接受者是一个JSP页面,重复上面第一步中对JSP的 处理流程。(CGI=Common Gateway Interface)

? 服务器第二次运行login.jsp(不再需要编译),产生HTML返回客 户端:
– 通过request.getParameter()得到的是客户端提交的用户名和密码 – 调用SessionBean(与在java application中调用方法语句相同) 验证用户名和密码,通过则使用JSP的内置对象session设置属性 “enterable”为yes,并重定向到main.jsp,进入主页面(在 main.jsp中通过判断session.getAttribute(“enterable”)是否等于 “yes”确定是否进入主页面,若不等于则重定向到login.jsp,避免 用户不经过登入而直接访问mian.jsp)。 – 验证若失败则把out.print中的Java Script程序(HTML的一部分, 能被IE解释运行的程序,和java语言无关,功能为弹出提示框)及 后部的HTML返回客户端。

? 补充说明:<form method=“POST” …>: POST是将表单中的数据放 在form的数据体中,按照变量和值相对应的方式,传递到action 所指向URL。POST处也可用GET取代,将表单中数据的按照 Variable= value的形式,添加到action所指向的URL后面,并且 两者使用“?”连接,而各个变量之间使用“&”连接。 ? 问题:在验证失败时,返回的HTML在一个空的页面上先弹出提示 框,确认后才重新出现登入页面,并且原输入内容消失。

改进:
? 首先页面必须提交后才能进行验证,得到验证结果的 页面中的用户帐户和密码控件必须获得前一页面中的 输入数据,其标签形式为:
<p>用户名:<input type="text" name="username" value="<%=sNameValue%>" size="20">&nbsp;&nbsp;&nbsp; </p>

? sNameValue初值为“”,即第一次请求该页面是用户 名为空,注意不能为null,否则JSP报错。 ? 不能省略value后的“”,否则sNameValue=“”时,则 对应文本变成value=size =“20”,页面上的用户名会 显示size=“20”。 ? 修改密码错误的提示方式:定义String sMessage=“”, 当验证失败后,sMessage=“用户名或密码错误,请重 新输入!”,在</form>后加 <p><%=sMessage%></p>

JSP调用SessionBean的设置
? 在Windows/Preferences,选择MyEclipse/Application Servers/Weblogic 7/Path,在Append classpath中点击Add Dir,选择目录:(使用Eclipse 启动weblogic时的classpath) H:\bea\weblogic700\server\bin\applications\p_ChkUser。 ? 若使用命令行启动weblogic,则修改startwls.cmd,在set classpath后 添加上述目录。 ? 此设置目的是为了使客户端访问login.jsp时,weblogic编译运行JSP中 的java程序时,可根据classpath的绝对路径及import 中相对路径 pkg_CheckUser.interfaces.*,在H:\bea\weblogic700\server\bin\ applications\p_ChkUser\ pkg_CheckUser.interfaces中找到接口文件 SB_CheckUserHome.class和SB_CheckUser.class。 ? 注意两个接口的java程序头上均已生成下列内容,与发布后接口所在 目录的相对路径一致:package pkg_CheckUser.interfaces;

客户端和JSP调用SessionBean小结
? EJB可以部署任一服务器上。 ? 以此方式分布在不同服务器上的EJB可相互调 用,由此可实现逻辑上和物理上的多层架构, 客户端的一个请求可调动多个高性能的服务器 为其提供服务。 ? 客户端调用和JSP调用EJB的程序无异。均只要 能获的EJB对应的接口。 ? 以下以命令行方式运行上述调用EJB的客户端 程序,就更清楚客户端程序调用EJB只需要哪 些资源。

4.3 命令行方式运行客户端程序
1)启动命令行方式,执行: set classpath=h:\bea\weblogic700\server\ bin\applications\p_ChkUser;h:\bea\ weblogic700\server\lib\weblogic.jar; h:\eclipse\workspace\javaproject_callsb ? 第一个路径为Session Bean的接口所在绝对路径 ? 第三个路径为客户端程序所在目录

客户端程序class_callsb.java
import javax.naming.*; import java.util.Properties; import pkg_CheckUser.interfaces.*; public class class_callsb{ public static void main(String args[]) { Properties p=new Properties(); put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi. WLInitialContextFactory"); p.put(Context.PROVIDER_URL,"t3://localhost:7001"); Context ctx=new InitialContext(p); SB_CheckUserHome Home=(SB_CheckUserHome)ctx.lookup ("ejb/SB_CheckUser"); SB_CheckUser chkuser=(SB_CheckUser)Home.create(); System.out.print(chkuser.CheckUser()); }

命令行方式运行客户端程序
? 与前面在eclipse中运行的程序比较仅增加了一 句: import pkg_CheckUser.interfaces.*;该相对 路径加上前面classpath中指定的Session bean所 在绝对路径,就是Session bean的接口class文件 所在目录。 ? 编译产生class文件:javac class_callsb.java ? 运行客户端程序:java class_callsb ? 对客户端程序import的前面两个包,javac程序 会自动在jdk下与bin相对的指定目录中寻找, 不必在classpath中指出。

4.4 在主页面显示用户名等其他用户信息
? 方法一:主页面用request.getParameter获得登入页面的 用户帐号,然后调用类似的Session Bean获的用户的其 他信息,缺点是要再次定位、运行EJB和执行select语 句。 ? 方法二:修改原Session Bean,不仅获得数据表中id和 password,同时获得其他主页面需要显示的信息,在 登入页面获得这些信息后通过JSP内置对象session传递 到主页面。但若传递的数据较多,比较不方便 ? 方法三:把数据存入session bean,通过session把该 session bean传递到主页面,这样的session bean必须是 有状态的session bean。

Stateful SessionBean: SBS_CheckUser
? 原理:通过login.jsp用户信息提交服务器, 接收者login.jsp把数据存入 SBS_CheckUser,然后通过Session传递到 main.jsp,main.jsp获得SBS_CheckUser, 把其中的用户信息显示在页面上。 ? SBS_CheckUser增加用户信息属性及相应 的get和set方法。

创建Stateful SessionBean
? 在与上面同一项目中新建Session Bean,type of EJB选stateful,并选择生成ejbCreate method,类 名为SBS_Check User,在生成的同名java文件中 作下列修改:
– 增加属性定义:private String userName; – 增加方法
public String getUserName(){return userName;} public void setUserName(String username){userName=username;}

– 在这两个方法前复制replaceWithReal BusinessMethod 前的注释,作用是使用xdoclet生成remote接口时生成 这些方法对应的接口方法的定义:

/** * An example business method * * @ejb.interface-method view-type = "remote" * * @throws EJBException Thrown if method fails due to system-level error. */

? 复制前面的chkuser方法取代replaceWithReal BusinessMethod,并做下列修改:
– Select语句增加name列 – Return true前,设置userName=rs.getString("name");

? 修改ejbCreate,有状态SessionBean必须包含参数:
public void ejbCreate(String username) throws CreateException { userName=username; }

使用xdoclet生成接口和配置文件
? 方法同前面生成stateless SessionBean一样。 ? 每次修改后重新生成前必须先保存修改 的java文件,否则还是用老文件生成。 ? 发布该EJB项目

修改JSP
? Login.jsp
– 创建EJB对象的create语句包含参数:

SBS_CheckUser chkuser=(SBS_CheckUser)Home.create("");
– 验证通过后传递chkuser:

session.setAttribute("SessionBean",chkuser); response.sendRedirect("main.jsp"); ? Main.jsp: if(session.getAttribute("SessionBean")!=null) { SBS_CheckkUser a=(SBS_CheckkUser)session.getAttribute("SessionBean"); out.print("WelCome!"+a.getUserName()); } else response.sendRedirect(“login.jsp”);//对直接访问main.jsp的处理

中文编码问题:
? 若SQL Server数据库中表students的name列为 varchar,值为中文字符,则main.jsp将输出 Welcome!??????。 ? 解决方法是把name改成nvarchar类型,因为 nvarchar使用unicode编码,Unicode 标准为全球 商业领域中广泛使用的大部分字符定义的一个 单一编码方案。Varchar只能存放非unicode字 符数据。

5

SessionBean类型及生命周期
– 不保存客户端状态,只能通过参数传递所需 信息。 – 每个客户端的实例都无区别,即一个Bean实 例可以为任何一个客户端服务。 – 实例可以一直存在于Bean池中,而不需要每 次都进行初始化和创建。

? 无状态Session Bean:

? 有状态Session Bean:
– 保存客户端状态,客户端在多次访问之间可共享状 态,即可以使用Bean实例的成员变量保存客户端信 息。 – 在Bean池中,一个有状态Session Bean实例也可以服 务于多个客户端,当客户端A暂时不发出请求时, 系统会保存该客户端的会话信息(成员变量值), 称为Bean的钝化passivate,然后这个Bean就可以服 务于其他客户端。当A重新发出请求时,容器从 Bean池中取出一个实例或创建一个实例或钝化一个 实例,然后读入先前保存的会话信息。

增加修改密码功能
? 数据表的写入也可以使用Session Bean完 成,实际的语句可以是: ? 我们使用Entity Bean完成上述功能。

建立EntityBean
? 新建工程p_MagTab,在工程中新建一个EntityBean: students(与实际的数据表名相同),The type of EJB 选CMP 2.x,The access of the EJB选remote。 ? 在students.java中添加下列程序:作用是读/写students.id。 /**/之间的内容用于Xdoclet生成接口及配置文件XML。
/** *@ejb.interface-method view-type=“remote“ *@ejb.persistence column-name=“id“ */ public abstract String getId(); /** *@ejb.interface-method view-type="remote" */ public abstract void setId(String id);
//生成远程接口 //生成XML

? 同样添加name和passwd列的相似程序。

修改ejbCreate
? EJB容器调用ejbCreate将在数据表中插入一行:
public String ejbCreate(String id,String name,String passwd) throws CreateException { setId(id); setName(name); setPasswd(passwd); return null; }

? 修改ejbPostCreate定义:
public void ejbPostCreate(String id,String name,String passwd) throws CreateException { }

用XDoclet生成接口文件及配置文件
? 该工程的Properties/MyEclipse-Xdoclet同Session Bean一样设置,但去除dataobject、entitycmp、 entitypk和valueobject选项。weblogic中version 输入7.0,datasource输入TXJNDISQLServer (为Tx Data Sources,设置方法同Data Sources) ? 修改生成的ejb-jar.xml:prim-key-class值取 java.lang.String。右击entity/最后一个cmp-field, 选add after/primary-field,值取id。 ? 在weblogic-cmp-rdbms-jar.xml可修改datasource-name,table-name以及cmp-field和dbmscolumn的对应。(即与表,列可不同名)

发布并测试Entity bean
? 发布方法同Session Bean。 ? 客户端调用程序:
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContex tFactory"); p.put(Context.PROVIDER_URL,"t3://localhost:7001"); Context ctx=new InitialContext(p); studentsHome Home=(studentsHome)ctx.lookup("ejb/students"); //students std=(students)Home.create(“9999”,“mingming”,“011863”);//插入行 students std=(students)Home.findByPrimaryKey("000012"); if(std!=null) //std.setPasswd(“011863”); //修改id为“000012”的passwd。 std.remove();//删除 //删除id为“000012”的行

Entity Bean
? 是数据库的视图,EJB容器通过ejbStore和 ejbLoad完成与数据库数据的同步。 ? 数据表中列对应Bean对象的一个成员,一行对 应Bean的一个对象实例。 ? ejbCreate执行数据表的插入操作,ejbRemove执 行删除操作。 ? ejbFinder实现了在数据表中的检索,并把检索 结果以对应的EJB对象返回。 ? 分类:CMP由容器管理数据的存取,BMP则由 bean管理数据的存取。

CMP:Container-managed Persistence
? 对单主键,不需要生成studentsPK.java ? 一定要使用TXDataSource,与DataSource主要 区别为前者自动进行事务处理。 ? 优点:无需写SQL语句及数据库的连接程序。 只要设置完成,调用create完成插入操作, findByPrimaryKey完成依据主键值的检索,然 后使用Remove和set、get方法对检索得到的行 进行删除和读写操作。 ? 缺点:一次(对应一个SQL语句)只能完成单 行的插入、查询和删除。

复合主键-主键类

关于上下文Context
1) context可以理解成一个聚宝盆,在当前环境下你能拿到 的参数都可以从 context出发去拿,而不仅仅是放URL的. 从里面可以拿到request,session,response.......,可以说只 要你拿到了 context就可以访问任何你有权限访问的东 西 二、我理解:context就是“容器”,放的就是你的应用 程序的所有资源,要用时候就访问它,所以context里 面的东西,在同一个应用程序里面是全局的。 三、是一个包含各种context的设置的对象 例如:pageContext就包含了该页面的各种设置。你可以 通过他得到该页面所在服务器路径等等。 servletContext就是包含了该servlet相关的各种设置

? T3也称为丰富套接字,是BEA内部协议, 功能丰富,可扩展性好。T3是多工双向 和异步协议,经过高度优化,只使用一 个套接字和一条线程。借助这种方法, 基于Java的客户端可以根据服务器方需求 使用多种RMI对象,但仍使用一个套接 字和一条线程。

Cookie
? Cookie是当你浏览某网站时,网站存储在你机 器上的一个小文本文件,它记录了你的用户ID, 密码、浏览过的网页、停留的时间等信息,当 你再次来到该网站时,网站通过读取Cookie ? 可以在IE的“工具/Internet选项”的“常规”选 项卡中,选择“设置/查看文件”,查看所有保 存到你电脑里的Cookie。这些文件通常是以 user@domain格式命名的,user是你的本地用户 名,domain是所访问的网站的域名。

WebService
? 为使开发的中间件更广泛地适用非Java界面程 序的调用,如C#,Delphi,C++,使用Web Service技术打包验证程序,并发布在应用服务 器(Weblogic)上。 ? Web Service的开发可使用eclipse 5.0以上或安 装用于开发WebService的相关插件。(.Net也 支持一种asp.net web service application的开发, 但不能发布到weblogic上) ? 以下进入开发:


推荐相关:

11.BS多层架构应用程序设计入门-中间件技术_图文.ppt

11.BS多层架构应用程序设计入门-中间件技术 - 中间件技术 Weblogic

中间件技术原理与应用复习资料.doc

中间件技术原理与应用复习资料_理学_高等教育_教育专区。很全很给力 第一章 1、简述中间件的概念、组成结构和作用。 定义:中间件是介于应用系统和系统软件之间的...

BS模式程序设计实例.doc

BS模式程序设计实例_计算机软件及应用_IT/计算机_...“数据库技术 + 三层结构组件技术 + WEB 技术”...? 业务逻辑层(中间件层) 利用服务层提供的服务,...

开发多层架构的软件.pdf

分布式多层结构的 通信网络资源管理系统的设计与实现...客户端与中间件的通信远比两层结构时的通信 开销要...计算机系统应用, 2003,No.11:33~35 5 作者简介:...

多层技术架构JAVA.doc

多层技术架构JAVA_计算机软件应用_IT/计算机_专业资料。多层技术架构本系统构建于 J2EE 平台,采用分层提供服务支持的设计思想,将系统划分为数据库层、中间件层、...

第1章 软构件与中间件技术_图文.ppt

Java EE 6企业级应用 开发教程软构件与中间件技术 主要参考书目: (1)JavaEE ...基础设施、计算平台,只 有在适当的构架中,软件才有可能被抽象和 隔离,最终成为...

中间件WEB服务器软件.doc

中间件WEB服务器软件_计算机软件应用_IT/...多层架构、支持基于组件的开发,基于 Internet 的企业...中间件技术的发展趋势分... 暂无评价 11页 1下载...

基于消息中间件的MVC软件架构设计.pdf

首先介绍了MVC 和消息中间件的 基本技术原理;接着, 分析了自动售票的业务需求;并在此基础应用消息中间件技术设计了一种新的自 动售票软件架构。该架构体现了 ...

罗立树-数据库中间件架构设计和实现细节.ppt

罗立树-数据库中间件架构设计和实现细节_计算机软件应用_IT/计算机_专业资料。数据库中间件架构设计和实现 技术中心 架构部 罗立树 关于我 ? 易宝支付核心开发 ...

中间件技术复习提纲.doc

8、从应用程序来说,利用中间件可以获得的优点。 9、RMI体系结构三层组成。 10、在RMI体系中,一个远程对象客户端的桩要负责处理多项任务: 11、ORB的最重要的...

Oracle融合中间件11g 介绍_图文.pdf

为新的技术趋势而设计 多核技术 64 位操作系统 &...利用新的硬件和软件基础架构的技术趋势 ? 创建与...BS三层架构应用服务器 11 Tuxedo-交易中间件的...

Oracle中间件产品概要介绍.ppt

Oracle中间件产品概要介绍_互联网_IT/计算机_专业...BS三层架构的应用服务器 ? 应用范围广:适用于定制...设计系统,企业可以在其上部署 Oracle 业务应用程序、...

Oracle ExaLogic中间件一体机_图文.ppt

中间件一体机定位 ? 中间件一体机技术介绍 ? 适应...效率成倍提升, 特别适合多层的分布 式应用系统架构...更好的隔离 工程化设计为关键业务提供高可靠的基础...

AESB中间件技术分析_图文.ppt

特点:以程序设计技术基础基础架构平台专家 中间件技术发展 典型的技术...? 体系结构:面向对象的多层C/S结构。 ? 客户与服务器是相对于对象的请求方和...

中间件技术发展.ppt

中间件技术发展_计算机软件应用_IT/计算机_专业资料...J2ME J2EE Platform Release 11 编程语言的比较执行...多层客户-服务器架构 J2EE(Java 2 Enterprise ...

应用服务器中间件技术要求.doc

应用服务器中间件技术要求_计算机软件应用_IT/计算机...11. 在原业务系统不停机的情况下,必须支持动态加载...22. 基于 JAAS 架构, 实现基于容器的安全策略, ...

几种常见的架构模式.pdf

软件架构设计较为重要的领域只有一个, 那就是信息...目前最典型的基于三层 C/S 结构应用模式便是我们...就是专门用以处理复杂企业逻辑的中间件技术组成部分...

第7章RFID中间件技术.ppt

中间件(middleware)是基础软件的 一大类,属于可复用软件的范畴。中 间件并非一...中间件可以从架构上分为两种 (1)以应用程序为中心(Application Centric) 的设计...

异构的数据库中间件系统的设计和实现.pdf

中间件系统的设计和实现_计算机软件应用_IT/计算机...在上述需求下,随着相 关技术的发展,三层C/S结构和...“憎”MyAde) 11.I'n_strSQL.string●'AdoCom...

软件三层结构的设计_论文.pdf

个项目实例,结合需求分析和项目实际,采用C/S和B/S的混合模式,开发了三层分布式应用软件,客户端使用的是Delphi和ASP进行开发,中间件采用COM^+来实现三层结构设计...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com