使用IBMRationalApplicationDeveloperV7.5和WebSphereApplicationServerV7.0构建JavaEE应用程序引言本文向您介绍IBM®Rational®ApplicationDeveloperforWebSphereSoftwareV7.5,并带您构建JPA实体、sessionbean,并将它们部署到IBM®WebSphere®V7.0上。Java™Platform,EntERPriseEditionV5.0(Java™EE)在创建企业应用程序方面进行了重大变更,它支持Java™PersistenceAPI(JPA),和EnterpriseJava™Beanstechnology(EJB)V3.0程序设计模型、标注,和依赖注入。必备条件本文假设您至少安装了RationalApplicationDeveloperV7.5和WebSphereV7.0测试服务器。示例应用程序您将要创建的示例应用程序有一个JPA实体、调用该JPA实体的Sessionbean、调用Sessionbean的Servlet,以及调用servlet的web页面。该应用程序中使用的数据库是RAD7.5中带有的内嵌Derby数据库。以下的图描述了应用程序各个组件之间的交互序列。序列图遵照以下这些步骤开发应用程序:创建JPA项目和实体,并指定映射创建EJBV3.0项目,和使用JPA实体的sessionbean创建WebV2.5项目和调用sessionbean的servlet设置数据源,并在WebSphereV7.0上运行Web页面创建JPA项目和实体,并指定映射在此实例中,您在单独的归档(.jar)中创建JPA实体。注意到JavaEE规范允许您在Web或EJB项目中打包JPA实体。在RationalApplicationDeveloper中,您可以向Web或EJB项目添加JPA的部分来让它们支持JPA实体。创建JPA项目在JavaEE透视图中,选择FileNewOtherJPAProject,如图1所示。图1.新建项目指定Project名称,如图2所示。图2.新建JPA项目提示您切换到JPA透视图,选择No。JPA透视图拥有例如JPAStructure和JPADetails的视图,由于JavaEE透视图中的Annotations视图允许类似的功能,所以切换到JPA透视图不是必需的。图3.切换透视图注意到RationalApplicationDeveloper创建了带有以下这些文件的项目:persistence.XMLorm.xmlmanifest.MF。持久化单元名称设置为EmployeeJPA。创建JPA实体右键单击项目并选择NewEntity,如图4所示。图4.新建实体指定包名和类名,如图5所示,然后单击Next。图5.JPAEntity详情单击以下页面中的Add按钮,创建实体字段,如图6所示。图6.JPAEntity属性在结果的EntityFields对话框中,从下拉列表中选择Java.lang.String作为Type,如图7所示。图7.EntityFields单击向导的Finish,您将看到为字段创建了getter和setter方法的类,标注_cnnew1@Entity,和用于主键字段的标注@Id,如清单1所示。清单1.JPA实体源代码importjava.io.Serializable;importjava.lang.String;importjavax.persistence.*;/***EntityimplementationclassforEntity:Employee**/@EntitypublicclassEmployeeimplementsSerializable{@IdprivateStringEMP_ID;privateStringFirst_Name;privateStringLast_Name;privatestaticfinallongserialVersionUID=1L;publicEmployee(){super();}publicStringgetEMP_ID(){returnthis.EMP_ID;}publicvoidsetEMP_ID(StringEMP_ID){this.EMP_ID=EMP_ID;}publicStringgetFirst_Name(){returnthis.First_Name;}publicvoidsetFirst_Name(StringFirst_Name){this.First_Name=First_Name;}publicStringgetLast_Name(){returnthis.Last_Name;}publicvoidsetLast_Name(StringLast_Name){this.Last_Name=Last_Name;}}映射数据库要确保实体类可以适当地和数据库表通信,就需要二者之间的映射。JPA提供两种映射机制。一个是根据标注,另一个是根据XML(orm.xml中指定的)。本实例使用了标注机制进行映射。在JavaEE透视图中的DataSourceExplorer视图中,选择DerbySampleConnectionConnect,如图8所示。图8.数据库连接分析Employee表,如图9所示。图9.数据库方案由于方案不匹配,所以您需要修改映射。在Annotation视图中,单击实体Employee的Table节点,并指定以下内容,如图10所示。TableName:EMPLOYEESchema:SAMP图10.Annotations视图单击EMP_ID下的列节点,并将其映射到EMPNO列,如图11所示。图11.ID字段映射同样地,将First_Name和Last_Name映射到适当的列。现在,Java文件将如清单2所示。清单2.映射的实体源代码@Entity@Table(schema=SAMP,name=EMPLOYEE)publicclassEmployeeimplementsSerializable{@Id@Column(name=EMPNO)privateStringEMP_ID;@Column(name=FIRSTNME)privateStringFirst_Name;@Column(name=LASTNAME)privateStringLast_Name;需要设置persistence.XML中的JavaDatabaseConnectivity(JDBC)API数据源。打开EntERPrise浏览器中的文件,如图12所示。图12.Persistence.xml接下来,指定数据源,如图13所示(需要创建实际的数据源:步骤如最后一个部分中所示)。图13.持久性编辑器创建EJBV3.0项目,和使用JPA实体的sessionbean在本部分中,您将创建EJB项目和sessionbean。创建EJB项目选择FileNewEJBProject。图14.打开新的EJB项目指定Projectname,设置EJBModuleversion为3.0,并选择EARProjectName,如图15所示。对于本实例,选择您创建JPA项目时创建的EAR项目。图15.新建EJB项目右键单击EJB项目,并选择JavaEEModuleDependencies,然后选择EmployeeJPA.jar,如图16所示。这在EJB项目中创建了清单实体,并且还让JPA实体类在开发过程中可见。图16.EJB模块依赖创建sessionbean在EntERPriseExplorer中右键单击SessionBeans节点,并选择NewSessionBean,如图17所示。图17.创建新的sessionbean指定Java包和类名,如图18所示。在此实例中,选择了Local业务接口。图18.新建EJB3.0sessionBean单击Finish。创建了EmployeeSession类和EmployeeSessionLocal业务接口。调用JPA实体向seesionbean类中添加名为findEmployee的方法。清单3.添加方法EntityManagerem;publicEmployeefindEmployee(StringempNo){Employeeemp=(Employee)em.find(Employee.class,empNo);returnemp;}您需要将持久性单元定义为实体管理器变量。记住,当创建JPA项目时,在persistence.XML中设置了持久化单元EmployeeJPA。您可以直接将其标注为:@PersistenceContext(name=EmployeeJPA),并且引入javax.persistence.PersistenceContext,或者您可以在Annotation视图中选择Addannotation。选择bean,如图19所示。图19.标注视图中的Sessionbean选择标注,如图20所示。图20.向sessionbean中添加标注将持久性单元命名为EmployeeJPA,如图21所示。图21.命名持久性单元该动作不仅添加标注,还正确地设置导入。最终的类如清单4所示。清单4.Sessionbean源代码packagecom.ibm.EJB;importJavax.ejb.Stateless;importjavax.persistence.EntityManager;importcom.ibm.entities.Employee;importjavax.persistence.PersistenceContext;/***SessionBeanimplementationclassEmployeeSession*/@StatelesspublicclassEmployeeSessionimplementsEmployeeSessionLocal{/***Defaultconstructor.*/publicEmployeeSession(){//TODOAuto-generatedconstructorstub}@PersistenceContext(unitName=EmployeeJPA)EntityManagerem;publicEmployeefindEmployee(StringempNo){Employeeemp=(Employee)em.find(Employee.class,empNo);returnemp;}}sessionbean的业务接口需要有您刚添加的方法的签名。您可以快速地完成:选择outline视图中的方法,并且选择JavaEEPromoteMethods,如图22所示。图22.sessionbeanoutline视图这将打开PromoteMethods对话框。选择findEmployee(string)方法,如图23所示。图23.PromoteMethods现在准备好让客户端消费sessionbean。创建WebV2.5项目和调用sessionbean的Servlet在此部分中,您将创建Web项目和servlet。创建Web项目选择FileNewDynamicWebProject,如图24所示。图24.打开动态的Web项目指定WebProjectname,选择DynamicWebModuleversion为2.5,并选择用于JPA和EJB项目一样的EARProjectName,如图25所示。图25.新建动态Web项目当提示打开透视图时,选择No,如图26所示,Web透视图中拥有在此实例中我们不需要的高级web编辑工具。图26.将透视图切换到Web项目右键单击Web项目,并在左边的列表中选择JavaEEModuleDependencies,然后选择EmployeeEJBClient.jar和EmployeeJPA.jar,如图27所示。图27.对于Web