??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区综合在线播放,亚洲日本国产精华液,久久久久无码精品亚洲日韩http://www.tkk7.com/jackstudio/category/12676.htmlzh-cnSat, 03 Mar 2007 08:56:59 GMTSat, 03 Mar 2007 08:56:59 GMT60EJBLq阶http://www.tkk7.com/jackstudio/archive/2006/10/23/76764.htmljackstudiojackstudioMon, 23 Oct 2006 07:24:00 GMThttp://www.tkk7.com/jackstudio/archive/2006/10/23/76764.htmlhttp://www.tkk7.com/jackstudio/comments/76764.htmlhttp://www.tkk7.com/jackstudio/archive/2006/10/23/76764.html#Feedback0http://www.tkk7.com/jackstudio/comments/commentRss/76764.htmlhttp://www.tkk7.com/jackstudio/services/trackbacks/76764.htmlhttp://dev.21tx.com/java/ejb/

~写W一个EJB应用E序

   搞清了基本的分布式对象应用程序机理,下面我们来实地做一个简单的EJB应用E序Q一步一步找着做,你会发现——它真的不难Q?

   EJB中的Beans有两U,一U是会话BeanQSessionBeanQ,一U是实体BeanQEntityBeanQ。其中,SessionBean又分为有状态(StatefulQ和无状态(StatelessQ两U,EntityBean又分为容器管理(Container ManagedQ和自管理(Bean ManagedQ两U。我们要做的W一个EJB应用E序是:写一个无状态会话BeanQStateless SessionBeanQ?

q个E序的功能是Q?实现一个远E加密、解密演C系l,用户把一D|文发?a target="_blank">服务?/font>端,服务器端执行一定的加密法Q按先后序倒排Q得到密文,然后把加密完成后的密文发到客L昄l用P用户q可发一D加密后的密文到服务器端Q服务器端执行一定的解密法Q倒排Q得到明文,然后回传昄l用戗?

注: q里使用的是Windowsq_Qƈ且假?a target="_blank">JDK已经装好Qƈ且认Z臛_是编q一?a target="_blank">JavaE序的程序员?

W一?下蝲、安?a target="_blank">J2EE开发工L

   ~写EJB应用E序必须下蝲相关的工L才行Q作为学习试验之用,不须采用很高的应用服务?/font>Q比如:WebLogic、WebSphere{)Q只需采用SUN公司提供的免费开发包可以了Q下载地址为:ftp://202.116.77.69/development/Java/j2sdkee1.2/j2sdkee-img_java ejb/2_1-win.exe?

   下蝲后执行这个应用程序,卛_完成J2EESDK的本地安装(假定安装在C:\j2sdkee1.3目录Q。安装之后还不能立刻用,需要把C:\j2sdkee1.3\lib\j2ee.jar加到pȝ的ClassPath变量中去Q装qJDK的朋友对此肯定不会陌生。做完这些后Q最l系l的ClassPath应该臛_?;C:\j2sdk1.4.0-beta3\lib\tools.jar; C:\j2sdk1.4.0-beta3\lib\dt.jar;C:\j2sdkee1.3\lib\j2ee.jarq几V?

   然后Q把C:\j2sdkee1.3\bin目录加到pȝ的Path变量中,也就是说Q系l的Path变量臛_应该?PATH%;C:\j2sdkee1.3\bin;C:\j2sdk1.4.0-beta3\binq几V?

以上两步其实和配|?a target="_blank">J2SE的方法类|配过JDK的朋友一定不陌生?br />
W二?建立应用E序目录l构

   如你所知的QJavaE序中目录结构是很重要的Q因为Java中的包(packageQ是与目录相关的Q同Ӟ目录l构不同Q程序打包生成(jarQ的l构也不同,所以必d起重视?

   我们~写的第一个EJB应用E序的目录结构如图二所C,׃可见Q所有的javaE序都放在securitybeans目录下(它们都属于一个名为securitybeans的packageQ。客户代码主要由JSP和html文gl成Qmusecurityjsp.html文g为静态网,主要用于昄pȝ的首,提供用户输入明文/密文的界面,q负责把用户输入的内Ҏ交给下一个页面(SecuriryProcessPage.jspQ;SecurityProcessPage.jsp文g为用JSPQJava Server PagesQ编写的动态网,主要用于生成EJB对象实例Qƈ向EJB对象发送加?解密hQƈ在页面上昄加密/解密l果供用h览?br />

 ~写EJB代码

   由前q的目录l构可知QEJB代码包括三个Java文g?

   1、Security.java是一个接口,它定义了基本的加密、解密调用接口。注意,׃Security接口可生成EJB对象Q所以它必须l承自EJBObject接口。其源代码如下:

文g“Security.java?

package securitybeans;

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface Security extends EJBObject

{

public String encrypt( String strSource ) throws RemoteException;

public String decrypt( String strTarget ) throws RemoteException;

}/* Security */

   2、SecurityHome接口可生成EJBHome对象Q它负责直接与客h交道Q接收客LhQ返回处理结果。在EJB规范中,SecurityHome必须l承自EJBHome接口。其源代码如下:

文g“SecurityHome.java?

package securitybeans;

import java.rmi.RemoteException;

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

public interface SecurityHome extends EJBHome

{

Security create() throws CreateException, RemoteException;

}/* EJBHome */

   3、SecurityBeancL是真正做“正事”的c,它负责对SecurityHome对象传来的字W串执行加密、解密算法,得到的l果q回lSecurityHome对象。它是一个Stateless SessionBeanQ按照EJB规范Q必d现SessionBean接口。其源代码如下:

文g“ScurityBean.java?

package securitybeans;

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class SecurityBean implements SessionBean

{

public String encrypt( String strSource )

{

String strTarget = "";

for ( int i = strSource.length() - 1; i >= 0; i -- )

{

strTarget += strSource.charAt( i );

}//for


return strTarget;

}//encrypt()


public String decrypt( String strTarget )

{

String strSource = "";


for ( int i = strTarget.length() - 1; i >= 0; i -- )

{

strSource += strTarget.charAt( i );

}//for


return strSource;

}//decrypt()


public void ejbActivate() {}//ejbActivate()

public void ejbRemove() {}//ejbRemove()

public void ejbPassivate() {}//ejbPassivate()

public void setSessionContext( SessionContext sc ) {}//setSessionContext()

public void ejbCreate() {}//ejbCreate()

public void ejbLoad() {}//ejbLoad()

public void ejbStore() {}//ejbStore()

}/* SecurityBean */

   SecurityBean中的ejbActivate()、ejbPassivate(){方法都是SessionBean接口中的ҎQ由于本E序中这里不需要有实际内容Q因此直接实现它可以了?br />

~写客户代码

   便完了EJB代码Q下面我们来写客户代码?

   1、mysecurityJSP.html文g用于昄一个静态的|页Q它提供了用户录入明?密文的界面,使用戯够录入自q内容然后提交l?a target="_blank">服务?/font>端。其源代码如下:

文gmysecurityjsp.html

< HTML >
< HEAD >
< TITLE >EJBCZQ数据加密、解密演C系l?lt; /TITLE >
< /HEAD >
< BODY BACKGROUND="bg.gif" >

< CENTER >

< H1 >数据加密解密演示pȝ< IMG SRC="duke.gif" >< /H1 >
< BR >< BR >< BR >
< FORM METHOD="GET" ACTION="SecurityJSPAlias" >
< TABLE WIDTH="700" HEIGHT="300" BORDER="1" >
< TR >
< TD ALIGN="CENTER" >
< H2 >——加密请求窗—?lt; /H2 >
< P >
误入明文:
< P >
< INPUT TYPE="TEXT" NAME="SOURCECONTENT" >< /INPUT >
< P >
< INPUT TYPE="SUBMIT" VALUE=" ??" >
< INPUT TYPE="RESET" VALUE=" ?|?" >
< /TD >
< TD ALIGN="CENTER" >
< H2 >——解密请求窗—?lt; /H2 >
< P >
误入密文:
< P >
< INPUT TYPE="TEXT" NAME="TARGETCONTENT" >< /INPUT >
< P >
< INPUT TYPE="SUBMIT" VALUE=" ??" >
< INPUT TYPE="RESET" VALUE=" ?|?" >
< /TD >
< /TR >
< /TABLE >
< /FORM >

< /CENTER >

< /BODY >
< /HTML >

   2、SecurityProcessPage.jsp文g是用JSP~写的动态网,它用于处理mysecurityjsp.html提交q来的内容,q查找、生成EJBHome对象Q发送加?解密hQƈ结果传回客L。其源代码如下:

文g“SecurityProcessPage.jsp?

< %@ page language="Java" info="数据加密解密信息处理pȝ" % >
< %@ page import="java.rmi.*" % >
< %@ page import="javax.naming.*" % >
< %@ page import="javax.rmi.PortableRemoteObject" % >
< %@ page import="securitybeans.*" % >

< HTML >
< HEAD >
< TITLE >EJBCZQ数据加密、解密演C系l?lt; /TITLE >
< /HEAD >
< %
SecurityHome shMain = null;
Try
{
shMain = ( SecurityHome )PortableRemoteObject.narrow( new InitialContext().lookup( "mysecurity" ), SecurityHome.class );
}//try
catch( NamingException ne )
{
ne.printStackTrace();
}//catch
Security security = shMain.create();
% >
< BODY BACKGROUND="bg.gif" >
< CENTER >
< H1 >数据加密解密演示pȝ< IMG SRC="duke.gif" >< /H1 >< BR >< BR >< BR >
< TABLE WIDTH="700" HEIGHT="300" BORDER="1" >
< TR >
< TD ALIGN="CENTER" >
< %
if ( request.getParameter( "SOURCECONTENT" ) != null )
{
% >
加密生成的密文ؓQ?lt; BR >
< %= security.encrypt( request.getParameter( "SOURCECONTENT" ) ) % >
< %
}//if
% >
< /TD >
< TD ALIGN="CENTER" >
< %
if ( request.getParameter( "TARGETCONTENT" ) != null )
{
% >
解密生成的明文ؓQ?lt; BR >
< %= security.encrypt( request.getParameter( "TARGETCONTENT" ) ) % >
< %
}//if
% >
< /TD >
< /TR >
< /TABLE >
< /CENTER >
< /BODY >
< /HTML >


q行W一个EJB应用E序

   一个完整的EJB应用E序已经写完了,但是事情q远没有完结。要使一个EJB应用E序能够q行Q还有很多事情要做。ƈ且,可能q些事情的工作量q不比编E序本n多?

W一?~译EJB代码

   html?a target="_blank">JSP代码是不需~译的,但securitybeans目录下的三个.Java文g必须~译?class文g才可q行。由于三个Java文g属于一个包Q所以要q行联编?

W二?启动J2EE服务?/font>

   打开一个DOS ShellH口Q键入j2ee –verboseQ稍候片刻,当屏q出现提C“J2EE server startup complete”时Q表Cj2eesdk自带的J2EE服务器启动成功了?

W三?打开配置工具

   打开一个DOS ShellH口Q如果你现每ơ打开一个新的DOS ShellH口ȝQ可以在前一步中键入start j2ee –verboseQ即可自动弹Z个新的窗口,而原H口不变Q,键入deploytoolQ稍候片刻,卛_启动j2eesdk自带的配|工兗Deploytool的启动画面如图三所C?


图三 deploytool的启动画?/p>新徏一个Application


囑֛ 新徏一个Application


   点击deploytool的File菜单Q?gt;NewQ?gt;ApplicationQ在弹出的对话框中选中SecurityApp所在的目录Qƈ在Display Name中输入Q意一个你惛_界面上看到的q个应用E序的名Uͼ比如QSecurityAppQ?

W五?新徏一个EntERPrise Bean

   下面将q入比较关键的部分!

   点击deploytool的File菜单Q?gt;NewQ?gt;Enterprise BeanQ将弹出一个New Enterprise Bean Wizard。点击Next按钮略过W一个界面,在第二个界面中输入JAR Display Name为“SecurityJar”,q点击Edit按钮Q在弹出的对话框中将securitybeans目录下的三个.Java~译后生成的.class文g加入到SecurityJar的内容中去,如图五所C?


图五 ?class文gd到SecurityJar?/p>
   点击Next到第三个界面Q注意:

1. 选中Session为StatelessQ缺省ؓStatefulQ;

2. 输入Enterprise Bean Name为SecurityBeanQ?

3. 选择Enterprise Bean Class为securitybeans.SecurityBeanQ?

4. 选择Remote Home Interface为securitybeans.SecurityHomeQ?

5. 选择Remote Interface为securitybeans.Security?

   x关键的步骤就完成了,以下几个界面你大可以攑ֿ的“Next”了。至最后一个界面点击Finish按钮Q即完成了一个Enterprise Bean的添加工作?


新徏一?/strong>Web Component

q个步骤与上一步骤cM


   点击deploytool的File菜单Q?gt;NewQ?gt;Web ComponentQ将弹出一个New Web Component Wizard。点击Next按钮略过W一个界面,在第二个界面中输入WAR Display Name为“SecurityWar”,q点击Edit按钮Q在弹出的对话框中将ClientCode目录下的几个客户代码文g加入到SecurityWar的内容中去,如图六所C?


囑օ ClientCode目录下的文gd到SecurityJar?


   点击Nextq入W三个界面,选择the type of web component you are creating?a target="_blank">JSP。点击Nextq入W四个界面,注意Q?

1?选中JSP FileName为SecurityProcessPage.jspQ?

2?输入Web Component Name为SecurityProcessPage?

   两次点击Next按钮q入W五个界面,点击Add按钮Q给该Web Componentd一个别名ؓSecurityAlias?

   x主要的步骤就完成了,以下几个界面只需攑ֿ点击Next按钮卛_Q至最后一个界面,点击Finish按钮Q即完成了一个Web Component的添加工作?

W七?修改JNDI和RootContext

   d完了两个主要的组件之后,q要修改两个配置Q才能最后完成EJB的配|?


图七 SecurityApp的JNDI Names标签늚讄


   在deploytoolȝ面左边的树Şl构中点击SecurityApp节点Q主界面的右边就会显C出四个标签c在q四个标{N中,JNDI Names标签需加上mysecurity为JNDI NameQ如图七所C;WebContext标签中需加上SecurityRoot为SecurityWar的ContextRootQ如囑օ所C?


囑օ SecurityApp的Web Context标签늚讄


W八?校验J2EE应用E序

   完成以上七个步骤后,整个EJB的配|工作就基本完成了,下面只需单两个步骤就大功告成Q不q也要做好功亏一的准备Q?

   在deploytoolȝ面左边的树Şl构中点击SecurityApp节点Q再点击deploytool的Tools菜单Q?gt;Verifier…菜单项Q在弹出H口中点击OK按钮Qdeploytool自动对EJB应用E序q行试校验Q检查有没有配置错误。稍候片刻,如果提示“There were no failed tests.”,则恭喜你大功告成。如果提C有错,则需要返回去仔细重新查一步步配置Q看看有没有地方疏漏了。配|错误可是很Ҏ出的哟,你要有思想准备?br />


发布J2EE应用E序

   如果通过了第八步Q则W九步就完全是例行公事了?

   点击deploytool的Tools菜单Q?gt;Deploy…菜单项Q会弹出一个发布向导对话框H口Q只放心点击Next到最后一个界面,x后一个界面点几ZFinish”按钮,{待Deployment Progressx后完成,如图九所C,彻底搞定了Q?


图九 发布完成后的Deployment Progress


W十?ƣ赏E序q行效果

   接下来打开一个浏览器H口Q输入http://localhost:8000/SecurityRootQ就可以ƣ赏CW一个EJB应用E序的运行效果了?

   W一个页面如囑֍所C,昄的是一个数据录入页面,用户可录入一些想要加?解密的内容,点击提交按钮可C一个页面?

   W二个页面如囑֍一所C,昄的是对用戯求内容的加密/解密处理l果?


囑֍ q行效果W一个页面(加密/解密hH)


囑֍一 q行效果W二个页面(加密/解密l果昄)


   万事开头难Q有了第一个EJB应用E序q行通过的体验,以后好办了。希望本文能Z开个好_



jackstudio 2006-10-23 15:24 发表评论
]]>
վ֩ģ壺 еİjŽŮƵ| wwww߹ۿ| ƷAV鶹| 18ڵվ| ĻۺϾƷһ| ˾þվ| AVһAV| պƷרҹ| ༤ۺ͵ͼ| ҹ뾫Ʒѿ| ޾ɫ߲| þþƷƬѹۿ| ˳ӰԺ| ѻɫַվ| ۺɫɫ| ѿŮˬ| 鶹ȫַ| ˳wwwþþ| aëƬѹۿƵ| ޸Ļۺ| þþƷվѹۿ| ۺһ| һػƬ| պƷרѲ| һƷ| ˾Ʒ| ߹ۿxxxx| õӰ߹ۿ| Ʒһ߹ۿ| ׾ƷƵ| 鶹AV뾫Ʒþ | ۺAVһҳ | һһ| AVƬ| þþƷAVδʮ| avַ| ѹۿ| ҹҹҹҹƵ| һѹۿ| ѹ߹ۿ| 97avƵ|