📄 图解myeclipse炮制(ejb)sessionbean全过程 - 你是我永远的乡愁.htm
字号:
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_07new_sessionbean_src1.gif"></A></P>
<P>初始的SessionBean代码创建好了,左边“Package
Explorer”里可以看到当前的目录结构,右边的代码窗口里面可以看到Xdoclet自动生成的代码,里面有一些为进一步生成各种接口代码以及部署描述文档所用的Xdoclet标记,这里的标记很浅显,大家顾名思义一看就明白了,如果要改变部署后的JNDI名称以符合项目的具体规约要求,那么可以在图中红框标示的地方修改。</P>
<P><BR>(图8:开始Xdoclet配置)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_08xdoclet1.gif"></P>
<P>OK,现在开始最重要也最复杂的一步:Xdoclet配置。实际上Jbuilder的代码自动生成的幕后功臣也是Xdoclet,只不过Borland把它封装得严严实实,对于开发者来说就透明化了,这样做的好处是傻瓜化,降低了配置的难度,坏处很明显――损失了Xdoclet所著称的灵活性。<BR>MyEclipse提供了许多标准的Xdoclet模板,我们直接拿来再根据实际情况自定义屈指可数的几个参数就可以使用了。</P>
<P><BR>(图9:)</P>
<P><A
href="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_09xdoclet2.gif"><IMG
alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_09xdoclet2.gif"></A></P>
<P>添加一个“Standard EJB”配置</P>
<P><BR>(图10:Remove不需要的项目)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_10xdoclet3.gif"></P>
<P>把我们当前工程中用不到的东西通通删掉,例如dao,dataobject,entitybmp,entitycmp,entitypk,valueobject,utilobject。得到图12所示的配置。</P>
<P><BR>(图11:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_11xdoclet4.gif"></P>
<P></P>
<P>(图12:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_12xdoclet5.gif"></P>
<P>添加一个weblogic的部署描述选项,接着还要根据实际需要配置它。</P>
<P><BR>(图13:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_13xdoclet6.gif"></P>
<P>配置Createtables,设置为AlterOrCreate,以便以后加入其它EJB组件时共享一个部署描述文件。</P>
<P><BR>(图14:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_14xdoclet7.gif"></P>
<P>配置destDir,就是weblogic-ejb-jar.xml文件所在的目录。</P>
<P><BR>(图15:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_15xdoclet7_2.gif"></P>
<P>配置Version,根据实际的weblogic版本去两个版本号即可,我用的版本是811,这里设为8.1。</P>
<P><BR>(图16:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_16xdoclet8.gif"></P>
<P>选择使用动态Xdoclet配置文件还是静态Xdoclet配置文件,这里使用缺省的“动态”方式即可。</P>
<P><BR>(图17:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_17xdoclet9.gif"></P>
<P>OK,Xdoclet配置好之后就可以根据它的配置文件批量生成我们所期望的代码和文档了。</P>
<P><BR>(图18:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_18xdoclet_SUCCESS.gif"></P>
<P>Xdoclet执行过程。</P>
<P><BR>(图19:)</P>
<P><A
href="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_19xdoclet_files_built.gif"><IMG
alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_19xdoclet_files_built.gif"></A></P>
<P>Finished,看看红色选框里的文件,怎么样?果然不负众望吧?这里包括远程接口、本地接口、远程Home接口、本地Home接口、ejb-jar.xml、weblogic-ejb-jar.xml等文件。</P>
<P><BR>(图20:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_20coding1.gif"></P>
<P>这里是远程接口。看图中的高亮部分,顾名思义,用你自己的商务方法替换Xdoclet模板生成的示例商务方法。</P>
<P><BR>(图21:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_21coding2.gif"></P>
<P>这里是Bean类。同样是将示例方法替换成实际的商务方法。</P>
<P><BR>(图22:)</P>
<P><A
href="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_22coding_finished.gif"><IMG
alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_22coding_finished.gif"></A></P>
<P>代码都写好了,文件也都整理好了,嗯,该部署了。</P>
<P><BR>(图23:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_23deploy1.gif"></P>
<P>部署过程很简单。看图,在“Project”选项中选择我们的“Hello”工程,再点击“Add”按钮添加一个部署方案。</P>
<P><BR>(图24:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_24deploy2.gif"></P>
<P>部署到在文章初始就配置好的Weblogic8服务器,使用jar包方式。</P>
<P><BR>(图25:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_25deploy_success.gif"></P>
<P>配置完毕,该启动Weblogic看看效果了。
:)btw,整理使用的是离线部署(或者叫做“冷部署”)方式,也就是说在部署过程中Weblogic没有启动,这时候如果EJB组件包含部署期可发现的错误那么在这一阶段将不能得到报告,当然我们也可以使用在线部署(“热部署”?)方式以即时得到部署期可能的异常,easy,自己尝试吧。</P>
<P><BR>(图26:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_26test_client1.gif"></P>
<P>部署好之后该干什么呢?看着屏幕发呆?呵呵。。还是先写个Client测试一下你的EJB组件是不是能够正常运行吧。如图,包名和类名除符合基本的JAVA规范之外都没有硬性的规定,只是习惯上将类名的后缀设为“TestClient”。</P>
<P><BR>(图27:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_27test_client_imp_wllib.gif"></P>
<P>因为要用到Weblogic的初始上下文工厂(WLInitialContextFactory),所以我们应该导入Weblogic的函数库,就是WL_HOME/server/lib/weblogic.jar了。当然这一步也未必就要放在这里做,反正在测试程序运行之前就可以。</P>
<P><BR>(图28:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_28test_client_code.gif"></P>
<P>该编写我们的测试客户端的实际代码了,看图,就那么二三十行经典代码,很简单吧?</P>
<P><BR>(图29:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_29start_server.gif"></P>
<P>叫上Weblogic,一起开动咯~</P>
<P><BR>(图30:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_30start_server_ok.gif"></P>
<P>Weblogic启动成功,启动过程中会自动载入我们刚才冷部署的EJB组件,这次没有报告任何异常,说明我们的EJB组件是正确无误的。</P>
<P><BR>(图31:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_31execute_client_console.gif"></P>
<P>执行我们的测试客户端,得到预期的输出。</P>
<P><BR>(图32:)</P>
<P><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/r_32execute_server_console.gif"></P>
<P>然后观察Weblogic的控制台,同样也是我们所期望的反馈,yeah,收工,吃饭去了。</P>
<P><BR>有问题请大家回帖共同探讨。<BR>希望还有机会下次跟大家讨论EntityBean的开发,<BR>再下次是MessageDrivenBean,以及综合实例。:)</P>
<P>参考文献:《MyEclipse Application Developer Guide》。</P><BR><BR>
<P id=TBPingURL>Trackback:
http://tb.blog.csdn.net/TrackBack.aspx?PostId=310359</P></DIV>
<DIV class=postFoot>
<SCRIPT
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/PromoteIcon.htm"></SCRIPT>
[<A href="javascript:StorePage()">点击此处收藏本文</A>] 发表于 2005年03月04日 9:28
AM </DIV></DIV><LINK
href="http://blog.csdn.net/wingtrace/Services/Pingback.aspx" rel=pingback><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.csdn.net/wingtrace/archive/2005/03/04/310359.aspx"
dc:identifier="http://blog.csdn.net/wingtrace/archive/2005/03/04/310359.aspx"
dc:title="图解MyEclipse炮制(EJB)SessionBean全过程"
trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=310359" />
</rdf:RDF>
-->
<SCRIPT>function hide(){showComment();}</SCRIPT>
<BR>
<SCRIPT>document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");</SCRIPT>
<BR>
<DIV id=comments>
<H3></H3><A name=373123> </A>
<DIV class=post>
<DIV class=postTitle>楚楚留香 发表于2005-05-07 8:52 PM IP:
61.150.115.*</DIV>
<DIV class=postText>好东西啊 已经调试成功 在JBOSS4下 <BR>严整关注 EntityBean 的开发文章 <BR>希望进早出来
<BR>谢谢站长</DIV></DIV><BR></DIV>
<DIV class=CommentForm id=commentform>
<H3>发表评论</H3>
<TABLE class=CommentForm>
<TBODY>
<TR>
<TD width=69 height=0></TD>
<TD></TD></TR>
<TR>
<TD width=70>大名:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbName style="WIDTH: 300px"
size=40 name=PostComment.ascx:tbName> <SPAN
id=PostComment.ascx_RequiredFieldValidator2
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入尊姓大名"
controltovalidate="PostComment.ascx_tbName"><BR>请输入尊姓大名</SPAN> </TD></TR>
<TR>
<TD width=70>网址:</TD>
<TD align=left><INPUT id=PostComment.ascx_tbUrl style="WIDTH: 300px"
size=40 name=PostComment.ascx:tbUrl> </TD></TR>
<TR>
<TD colSpan=3>评论 <SPAN id=PostComment.ascx_RequiredFieldValidator3
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入评论"
controltovalidate="PostComment.ascx_tbComment"><BR>请输入评论</SPAN> <BR><TEXTAREA id=PostComment.ascx_tbComment style="WIDTH: 381px; HEIGHT: 193px" name=PostComment.ascx:tbComment rows=10 cols=50></TEXTAREA>
</TD></TR>
<TR style="DISPLAY: none">
<TD height=24>验证码</TD>
<TD><INPUT id=PostComment.ascx_ValidationKey style="WIDTH: 150px"
name=PostComment.ascx:ValidationKey> <INPUT id=VCImageSrc type=hidden
value=/VerifyCode.aspx?url=http%3a%2f%2fblog.csdn.net%2fwingtrace%2farchive%2f2005%2f03%2f05%2f310359.aspx&datetime=3%2f24%2f2006+3%3a24%3a11+PM&ip=219.239.227.218>
<SPAN id=VCImageSpan></SPAN>
<SCRIPT
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/deferShowVerifyImage.js"
type=text/javascript></SCRIPT>
</TD></TR>
<TR>
<TD colSpan=3><INPUT language=javascript class=Button id=PostComment.ascx_btnSubmit onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " type=submit value=提交 name=PostComment.ascx:btnSubmit>
<INPUT id=PostComment.ascx_chkRemember type=checkbox
name=PostComment.ascx:chkRemember><LABEL
for=PostComment.ascx_chkRemember>记住我?</LABEL></TD></TR>
<TR>
<TD colSpan=3><SPAN id=PostComment.ascx_Message
style="COLOR: red"></SPAN></TD></TR></TBODY></TABLE></DIV></DIV>
<P id=footer>Powered by: <BR><A id=Footer1_Hyperlink2
href="http://scottwater.com/blog" name=Hyperlink1><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/100x30_Logo.gif"
border=0></A> <A id=Footer1_Hyperlink3 href="http://asp.net/"
name=Hyperlink1><IMG alt=""
src="图解MyEclipse炮制(EJB)SessionBean全过程 - 你是我永远的乡愁.files/PoweredByAsp.Net.gif"
border=0></A> <BR>Copyright © wingtrace(暮寒.烟灰.风化物.天佑我的母亲) </P>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_Validators = new Array(document.all["PostComment.ascx_RequiredFieldValidator2"], document.all["PostComment.ascx_RequiredFieldValidator3"]);
// -->
</SCRIPT>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" && clientInformation.appName.indexOf("Explorer") != -1) {
if ((typeof(Page_ValidationVer) != "undefined") && (Page_ValidationVer == "125"))
ValidatorOnLoad();
}
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
return true;
}
// -->
</SCRIPT>
</FORM>
<SCRIPT language=javascript>
<!--
try{
hide();
}
catch(e){
}
//-->
</SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -