新开发完整J2EE应用程序Word文件下载.docx
- 文档编号:5826583
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:28
- 大小:88.13KB
新开发完整J2EE应用程序Word文件下载.docx
《新开发完整J2EE应用程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《新开发完整J2EE应用程序Word文件下载.docx(28页珍藏版)》请在冰点文库上搜索。
∙数据源(映射到InstantDB)
∙J2EE应用程序客户模块
∙Java™bean(用于servlet和JSP中)
∙servlet
∙JSP页
∙HTML页
这份教程的编写和测试是相对于我的特定的ApplicationDeveloper安装目录。
所有的路径将用此安装目录e:
\WSAD_BETA来讨论。
因为很可能您的ApplicationDeveloper安装跟目录路径的与我的不同,尤其如果您接受了缺省的c:
\ProgramFiles\IBM\WebSphereStudioApplicationDeveloper路径,那么您将需要修改这些路径和在指定路径中创建的所有的源文件。
“HelloWorld”的体系结构
该应用程序的体系结构利用了所谓的J2EE“Model2”体系结构(经典的MVC的一个版本,模型-视图-控制器体系结构),在该体系结构中servlet被用做控制器,JSP用于显示最后的输出。
在这个示例中,一个会话bean被用于控制工作流和与客户机(恰好是servlet)直接交互,并且依次与实体bean交互,实体bean更进一步与支持它的数据存储交互。
那么,这个简单的分布式“HelloWorld”J2EE应用程序,可当您仔细分析时还是比较复杂的。
我将向您展示在WebSphereStudioApplicationDeveloper中开发和测试该应用程序是何等容易。
完成教程
请正确遵循下面的步骤和过程来构建和测试“HelloWorld”J2EE应用程序。
如果您计划从头创建应用程序,请遵循这个过程。
已创建的版本(在EAR模块格式中)可从下载中得到,且只需把它象导入其他的EAR模块一样导入到ApplicationDeveloper中。
我的期望是当我说,“要创建实体bean吗?
”时,您就知道我在谈论什么。
如果不是这种情形,请查阅一下ApplicationDeveloper的帮助文档以获得关于如何使用ApplicationDeveloper工具的详细资料。
当您看完这份教程,您就会拥有许多不同类型的工程和源文件,每一种表示一个不同的J2EE源文件,例如Web模块和EJB模块。
当您完成时,完整的、端到端应用程序的“J2EE视图”看起来应该象下图1所示。
。
图1.完成的端到端应用程序“HelloWorld”的J2EE视图
开发步骤
第1步.创建EJB工程和HelloWorldEntity容器管理实体bean(CMP)
1.创建一个新的命名为HelloWorldEJBProject的EJB工程和一个新的名为HelloWorldEARProject的EAR工程。
单击Finish,接受所有其它缺省值。
2.选择HelloWorldEJBProject工程。
在名为helloworld.ejb的软件包中,创建新的名为HelloWorldEntity的CMPbean,同持久字段一起列在下面。
除了id字段必须设为关键字段外,要确保为每一个字段选择Accesswithgetterandsettermethods复选框和Promotgetterandsettermethods复选框。
提供缺省值。
3.firstName(String)
4.lastName(String)
5.id(int,KeyField)
6.一旦加入了全部三个字段,单击Finish按钮。
第2步.用InstantDB为HelloWorldEntityCMP创建EJB到RDB的映射
1.对于InstantDBv3.26作为目标数据库,选择HelloWorldEJBProject工程并执行缺省的自顶向下的EJB到RDB映射。
您应当指定下列各项:
TargetDatabase:
InstantDBv3.26
DatabaseName:
HelloWorld
SchemaName:
<
removeNULLIDandleaveblank>
注意您必须使模式名为空。
InstantDB不支持模式,因此在schemaName.table样式名的存留器中生成的SQL将会抛出SQLException而失败。
图2.为InstantDB创建EJB到RDB映射
2.确认GenerateDDL复选框被选中,然后单击Finish。
完成后,生成的table.dll看起来应该类似于这样:
3.-GeneratedbyRelationalSchemaCenter
4.onThuSep109:
22:
47EDT2001
5.
6.CREATETABLEHELLOWORLDENTITY
7.(FIRSTNAMEVARCHAR(250),
8.LASTNAMEVARCHAR(250),
9.IDINTNOTNULL);
10.
11.ALTERTABLEHELLOWORLDENTITY
ADDPRIMARYKEY(ID);
稍后,我们将用这个DDL创建一个InstantDBSQL脚本来构建数据库表。
第3步.创建一个HelloWorldSession无状态会话bean
1.选择HelloWorldEJBProject工程并在helloworld.ejb包中创建一个新的名为HelloWorldSession的无状态会话bean。
接受全部缺省值,并单击Finish。
2.在HelloWorldSessionbean的HelloWorldSessionBean.java打开编辑器。
添加一个名为helloWorldEntity的HelloWorldEntity类型的protected成员,并把它赋为null(空值)。
protectedHelloWorldEntityhelloWorldEntity=null;
现在,添加代码使会话bean能管理工作流并能与实体bean的远程接口交互。
Web浏览器客户机将决不会直接与实体bean交互,更不会与它的远程接口交互。
客户机将只与会话bean交互。
使用会话bean来控制工作流是实现J2EE应用程序的典型方法。
要重申的是:
我不是在暗示“HelloWorld”的代码和实现是典型的或者是最好的方法;
我只不过使用该代码来证明工具集成是多么好。
3.在HelloWorldSessionBean类中创建getHelloWorldEntity()方法,但不要将它提取到远程接口中,因为没有必要将其暴露给客户机。
这个方法在该类内部并且是可以被隐藏的。
4.ProtectedHelloWorldEntitygetHelloWorldEntity(intid){
5....
6.returnhelloWorldEntity;
}
请参阅在下载ZIP文件中的清单1以获得该方法的完整实现。
7.把下面的导入语句添加到HelloWorldSessionBean.java中:
8.importjavax.ejb.*;
importjavax.naming.*;
9.为bean把下面的远程方法添加到HelloWorldSession接口来和HelloWorldEntity实体bean(并将其升级到远程接口,在测试版版本中这需要手动完成)对话:
10.publicStringgetFirstName(intid)
11.throwsjava.rmi.RemoteException{
12....
13.}
14.publicvoidsetFirstName(intid,StringfirstName)
15.throwsjava.rmi.RemoteException{
16....
17.}
18.publicStringgetLastName(intid)
19.throwsjava.rmi.RemoteException{
20....
21.}
22.publicvoidsetLastName(intid,StringlastName)
23.throwsjava.rmi.RemoteException{
24....
请参阅在下载ZIP文件中清单2获得这四个方法的实现。
第4步.生成WebSphere部署的代码
通过选择HelloWorldEJBProject工程为HelloWorldSession和HelloWorldEntitybean生成部署的代码并运行RMIC,然后从弹出菜单选择Generateforenterprisebean(s)=>
DeploycodeandRMICStubandTiecode。
第5步.创建一个服务器工程
1.创建一个名为HelloWorldServerProject的新的服务器工程。
2.使用您刚刚创建的服务器工程,创建一个新的组合的ServerInstanceandConfiguration。
将服务器名设置成HelloWorldServer,并用WebSpherev4.0UnitTestEnvironment服务器实例类型。
如果需要与缺省值8080不同的HTTP端口,到下一页并改变该值。
否则,单击Finish。
3.在Serverperspective中,使用ServerConfiguration视图来把工程HelloWorldEARProject添加到HelloWorldServer配置。
图3.服务器配置视图
第6步.创建数据源
完成下面的步骤来创建配置数据源,并用它为上面已创建和映射的HelloWorldEntityCMPbean存留数据。
1.在服务器配置视图中的ServerPerspective,使用配置编辑器编辑HelloWorldServer的配置。
请参考ApplicationDeveloper服务器工具文档,得到更多关于如何做到这一点的信息。
单击编辑器中的Datasource选项卡,在JDBC驱动程序列表中选择idbJdbcDriver,然后单击Add按钮来添加一个新的数据源。
注意:
您应该使用数据源窗格中的Add按钮这样做。
即,在这个示例中,您不需要添加一个新的JDBC驱动程序。
对您来说DB2®
和InstantDBJDBC驱动程序都是可用的。
2.在AddaDatasource对话框中指定下面的值(确切地):
Name:
HelloWorldDatasource
JNDIName:
jdbc/idb/HelloWorldDatasource
Description:
HelloWorldDatasource
Category:
helloworld-testing
leaveblank>
图4.添加数据源
3.不用改变已有的缺省值,且不填Databasename字段。
缺省的timeout和pool的大小适用于基本的测试。
同样,既然您不需要数据库中的事务,就不要选EnableJTA复选框。
完成后,单击OK。
然后,按工具栏的Save图标或者输入Ctrl-S来保存配置。
名字、种类、说明和JNDIname字段可以设置成您希望的任何值,并且不需要遵循特别的格式。
但是,为安全起见,为完成这教程,我推荐您象我描述的那样输入。
最重要的是:
JNDIname和您稍后会在把CMP绑定到数据源的EJB绑定中用到的名字相同。
为了简化,我简单整理了稍后会在绑定中用到的jdbc/idb/HelloWorld。
图5.一个定义的数据源
4.因为JDBCURL是作为单独的特定供应商资源属性(例如不象DB2,但象Oracle)来处理的,所以您需要为这个数据源定义一个新的资源属性。
选择您刚创建的数据源,然后在资源属性窗格中,单击Add按钮来添加一个新的资源属性。
按下面所示设置值:
url
Type:
java.lang.String
Value:
jdbc:
idb:
e:
\WSAD_BETA/HelloWorld.prp
JDBCurlresourceforHelloWorld
5.当您完成对话框后,单击OK按钮。
请参阅下面图6.
图6.为InstantDB添加资源属性
6.记住这里描述的所有路径都是相对于我特定的ApplicationDeveloper安装路径e:
\WSAD_BETA,我选择在那里构建我的实际表。
一旦您定义了这个属性,就再次保存配置。
您应该查看添加的资源属性。
第7步.创建InstantDBHelloWorld数据库表
首先,获得上面创建的table.ddl并用它来生成存留CMP的实际表。
您需要创建一个InstantDB脚本来实现这一点。
然后,创建一个InstantDB属性文件,定义了怎样、在哪里创建表。
最后,创建一个简单的批处理文件来按照所指定那样创建表。
1.使用ApplicationDeveloper缺省的文本编辑器,在ApplicationDeveloper安装目录创建一个名为HelloWorld.prp的InstantDB属性文件。
至少,要象您看到的下载ZIP文件的清单3那样建立。
这样会发信号通知InstantDB在当前目录下创建表。
如果您想或者需要在别的地方创建表,请在此文件设置路径。
2.使用table.dll作为输入,创建一个新的InstantDBSQL脚本来指定要创建什么和使用什么样的JDBC驱动程序。
您可以使用ApplicationDeveloper缺省的文本编辑器,并把此文件在ApplicationDeveloper安装目录中另存为文件HelloWorld.idb。
请参阅下载ZIP文件的清单4得到这个文件的内容。
3.可选的,您可以创建一个简单的方便的批处理文件来调用、创建表,该批处理文件称作HelloWorld.bat很恰当,它在功能上象下载ZIP的清单5中的实现。
4.当从命令行运行HelloWorld.bat时,您应当看到下面的显示表被成功创建的输出。
如上所定义的,表应该被创建在当前目录下的名为—您猜中了—HelloWorld子目录中。
5.EnhydraInstantDB-Version3.26
6.TheInitialDeveloperoftheOriginalCode
7.isLutrisTechnologiesInc.
8.PortionscreatedbyLutrisareCopyright(C)
9.1997-2001LutrisTechnologies,Inc.
10.AllRightsReserved.
11.Connectedtojdbc:
HelloWorld.prp
12.DriverInstantDBJDBCDriver
13.VersionVersion3.26
14.
15.DatabaseHelloWorldisshuttingdown...
DatabaseHelloWorldshutdowncomplete.
第8步.把数据源绑定到HelloWorldEntityCMP
作为创建并把数据源绑定到我们特定的CMP的最后一步,我们需要用EJBExtention编辑器编辑EJB绑定。
1.定位在HelloWorldEJBProject工程中ejbModule文件夹的META-INF文件夹中的文件ejb-jar.xml。
用EJBExtension编辑器(不是缺省的ejb-jar.xml编辑器)在文件上单击右键执行“Openwith”。
2.选择Binding选项卡,然后选择HelloWorldEntitybean来配置绑定。
基于如何创建和配置上述的数据源和为数据源本身使用的JNDIname,为绑定输入JNDIname:
JNDIname:
helloworld/HelloWorld
DatasourceJNDIname:
jdbc/idb/HelloWorldDatasource
Defaultuserid:
hello<
optional>
Defaultpassword:
3.当您完成后,输入Ctrl-S或者单击工具栏上的Save图标来保存配置。
图7.将数据源绑定到CMPEJB
第一轮单元测试:
EJBTestClient
因为您事实上已经为创建、开发、部署和配置做了许多工作,所以我建议在继续下面的实现servlet、JSP和关联代码的步骤之前,进行一些单元测试。
这就是我相信(有偏见的,当然,您自己判断吧)ApplicationDeveloper工具有真正出色并能为您提供无缝的、集成的、强大的单元测试能力。
由于服务器上已经缺省构建了EJBTestClient,且可在应用服务器上运行,所以首先使用EJBTestClient来确定您的EJB至少是有功能的并且持久性机制相对InstantDB工作正确。
1.在HelloWorldEJBProject工程的ejbModule中的HelloWorldSessionbean处单击右键,并从弹出菜单选择RunonServer。
这是我认为绝妙的服务器工具的众多“自动”功能之一。
它可以为您配置选择的模块(EJB或者Web应用程序组件)恰当的做“正确事情”,为选择的模块类型初始化并启动应用程序服务器。
在EJB的一个示例中,安装基于Web的EJBTestClient,在嵌入式Web浏览器的bean执行EJBTestClient,在命名服务查找,找到home并使它对您是可用的。
您可以用一个简单的菜单命令RunonServer做到这一点。
现在这是自动完成!
图8.运行EJBTestClientRunonServer命令
2.检查ServerPerspective的控制台确保bean正确启动。
如果没有看到异常或者载入模块错误,就可以假定它是成功的。
如果不是这样,则可能是生成的代码或者数据源配置出问题了。
一旦成功启动,状态将会变成Started。
图9.检查服务器状态:
服务器启动了
3.如果服务器正常启动,基于Web的、集成的EJBTestClient会自动打开来创建HelloWorldSession实例。
在这个应用程序中这样做将会创建一个HelloWorldEntity实例。
确保在控制台没有显示存留器代码未能生成或者数据源不能被正确绑定的消息。
4.验证调用Sessionbean中与Entitybean同名的方法,来执行Entitybean。
这样就允许两个bean相互通讯并把数据存留到配置好的数据源。
图10.EJBTestClient测试HelloWorldSessionbean
第二轮单元测试:
J2EE应用程序客户机
如果您成功测完了EJBTestClient,您现在可能想使用基于标准的J2EE应用程序客户机来测试bean,基于标准的J2EEApplicationClient是J2EE应用程序模块的一部分。
这意味着总体上它是应用程序的内置部分并是EAR模块的一部分。
第9步.创建一个Java应用程序客户机工程和实现
1.使用现有的HelloWorldEARProjectEAR创建一个新的名为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 完整 J2EE 应用程序