您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > EJB3.1+javaFX搭建工程
结构图EJB(EntitypriseJavaBean)是基于java开发,部署服务器端分布式组件标准。能实现完整的三层分离,提高开发效率。优点:1.规范化的标准,部署简单,灵活。2.相较于以往SSH框架,工程的结构更加简单清晰,目的单一明确,且Service端和Client端是独立分开的工程,在开发中,不会出现SSH工程那样庞大的工程目录。3.分布式组件开发,降低了开发过程中代码维护的难度和风险,基本排除了单个程序员上传问题代码导致整个工程无法启动的问题。在以往的开发中,任务的分发是纵向的瀑布式结构,遇到公用模块,就会出现功能重复的代码,甚至是相互冲突的代码。EJB3的开发模式,是横向的开发,程序员专注于一层,避免了上述问题。4.JavaFX的效果华丽,支持CSS3.0,有界面设计器,纯java实现,上手容易。缺点:1.不灵活:与Spring相比,Spring是独立于应用容器和容器相关类库,服务集成代码位于框架中,直接暴露给程序员使用,更加灵活,EJB则是绑定于容器缺失灵活性。2.过度依赖服务器:因为各家服务器提供商独立针对EJB标准进行开发,会针对自己的容器进行优化,在使用了容器特性的同时降低了可移植性。另外,需要程序员重新熟悉服务器API,相对来说,资料丰富程度上不比Spring。3.对设计阶段的要求更高,在以往的开发中,客户不知自己想要什么,多数情况下是一边做一边改,程序最后成型,可能跟最初的设计是完全不搭边的。一旦修改设计,个人觉得EJB的工作量要大于Spring(由单人的工作变成多人的工作);4.JavaFX2.2发布时间不长,文档和资料较少,成功案例少,如果进行企业级开发,风险较大。在基于良好设计的前提下,使用EJB的开发效率和日后代码的可维护性相较以往会有极大的提高,使用JPA过程中,java代码处理复杂逻辑的效率要低于使用sql来处理。所以应该尽可能多的使用原生的sql来解决一些逻辑问题(不存在降低代码可读性可维护性的问题)。JavaFX2.2目前应该是处于观望状态的,我们可以在一些小型的项目或者围绕项目的一些小型的工具上试做开发。积累一定的经验,同时积极的关注相关的动态。第一部分EJB3项目搭建开发环境:glassfish3.1.2.2+jdk1.6u28+javafx2.2使用框架:EJB3.1+JPA2.0+javaFX2.2+JUnit4开发工具:OEPE+JavaFXSceneBuilder1.1OEPE是oracle提供给基于eclipse的一整套企业开发插件,JavaFXSceneBuilder是oracle提供的javaFX界面设计工具。创建工程:可以选择工作空间中现有的项目包含进企业级工程中。选择企业级项目在打包的过程中会将子项目一并打包。也可直接创建EJBProject,发布的过程没有区别,唯一的区别在于JNDIname加入到现有的EAR工程中建好项目以后,右键工程Properties为工程添加JPA支持。关于JPA((JavaPersistenceAPI)):是JavaEE5.0平台标准的ORM规范,目前,hibernate,EclipseLink,OpenJPA都实现了JPA标准。例子中使用的是eclipselink2.4.1;更多参考:的JPA教程系列修改persistence.xml事务类型有两种ResourceLocal:由本地代码管理事务JTA:由容器管理事务。由容器管理事务可以省略em.getTransaction().begin();和em.getTransaction().commit();并且可以使用注入;连接池:ResourceLocal模式下,可以由JPA自己管理,也可以使用容器提供的数据源并自行配置连接池。JTA模式下,全部交给容器处理。至此,Service模块搭建完毕。生成Entity连接数据库,生成entity选择要生成entity的表,勾选Updateclasslistinpersistence.xml会将需要映射的entity的放入如persistence.xml的class标签下。代码中注解标签解释:@Entity:EJB3EntityBean的批注,表明当前的javabean作为一个EntityBean来处理。@Table(name=SYS_USER):定义当前Entity对应数据库中的表。@Id():我们把SysUser的userid属性定义为主键。@GeneratedValue():主键生成策略,手动生成主键不加此标签持久化创建sessionBean.状态类型:Sateless:无状态bean,不能确保bean的状态,且能与其他用户共享信息。性能较高。Stateful:有状态bean,确保客户端的每一个请求都在同一个bean中,更加安全。Singleton:EJB3.1新特性,在javaEE上下文中,容器中该bean唯一。用来保存应用级别的共享数据。参考:=appShow&id=5668865@RemotepublicinterfaceSysUserBeanRemote{CollectiongetAllUsers();publicvoiddeleteUser(SysUseruser);publicBooleanupdateUser(SysUseruser);SysUsergetUserByID(ObjectprimaryKey);BooleanAddUser(SysUseruser);LonggetUserId();publicListgetUserByUsercode(Stringusercode);}Remote接口;@Stateless@LocalBeanpublicclassSysUserBeanimplementsSysUserBeanRemote{@PersistenceContext(unitName=EEUserServer)publicEntityManagergetEm(){returnem;}privateEntityManagerem;/***Defaultconstructor.*/publicSysUserBean(){//TODOAuto-generatedconstructorstub}@OverridepublicCollectiongetAllUsers(){Queryquery=this.getEm().createQuery(selectusersfromSysUserusers,SysUser.class);returnquery.getResultList();}@OverridepublicvoiddeleteUser(SysUseruser){this.em.remove(getEm().merge(user));}@OverridepublicBooleanupdateUser(SysUseruser){getEm().merge(user);returntrue;}@OverridepublicSysUsergetUserByID(ObjectprimaryKey){SysUserus=this.em.find(SysUser.class,primaryKey);returnus;}@OverridepublicBooleanAddUser(SysUseruser){getEm().persist(user);returntrue;}@OverridepublicLonggetUserId(){Objecto=this.em.createQuery(selectmax(users.userid)fromSysUserusers).getSingleResult();returnLong.parseLong(o.toString())+1l;}@OverridepublicListgetUserByUsercode(Stringusercode){Listlist=this.em.createQuery(selectusersfromSysUseruserswhereusers.usercode=:usercode).setParameter(usercode,usercode).getResultList();returnlist;}}实现类;标签解释:@PersistenceContext(unitName=EEUserServer):指向persistence.xml配置文件中persistence-unitname属性,通过依赖注入,容器将PersistenceContext注入给entityManager对象,name:指定PersistenceContext的name;@Stateless:无状态会话bean的组件创建标签@Remote:EJB生成的远程业务接口。@LocalBean:公开一个的本地业务BeanJNDIName:容器不同,命名方式不同。在glassfish中。EAR项目命名方式为:java:global/EAR工程名/模块名/Bean名称!业务接口全路径名或者被@LocalBean标注的类的全路径名如:java:global/EEDemo/EEUserServer/SysUserBean!com.demo.session.SysUserBeanRemotejava:global/EEDemo/EEUserServer/SysUserBean!com.demo.session.SysUserBean如果只发布模块:java:global/EEUserServer/SysUserBean!com.demo.session.SysUserBeanJUnit测试对完成的sessionBean进行测试。publicclassSysUserBeanTest{staticInitialContextctx=null;staticSysUserBeanRemotesysBean=null;@BeforeClasspublicstaticvoidsetUpBeforeClass()throwsException{try{ctx=newInitialContext();}catch(NamingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{sysBean=(SysUserBeanRemote)ctx.lookup(java:global/EEDemo/EEUserServer/SysUserBean!com.demo.session.SysUserBeanRemote);}catch(NamingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}@AfterClasspublicstaticvoidtearDownAfterClass()throwsException{}@BeforepublicvoidsetUp()throwsException{}@AfterpublicvoidtearDown()throwsException{}@TestpublicvoidtestGetAllUsers(){Assert.assertNotNull(sysBean.getAllUsers());}@TestpublicvoidtestDeleteUser(){SysUseru=sysBean.getUserByID(4l);sysBean.deleteUser(u);Assert.assertNull(sysBean.getUserByID(4l));}@TestpublicvoidtestUpdateUser(){SysUseru=sysBean.getUserByI
本文标题:EJB3.1+javaFX搭建工程
链接地址:https://www.777doc.com/doc-3364457 .html