




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构图EJB(Entityprise Java Bean)是基于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项目搭建开发环境:glassfish+jdk1.6u28+javafx2.2使用框架:EJB3.1+JPA2.0+javaFX2.2+JUnit4开发工具:OEPE+ JavaFX Scene Builder 1.1OEPE是oracle提供给基于eclipse的一整套企业开发插件,JavaFX Scene Builder是oracle提供的javaFX界面设计工具。创建工程: 可以选择工作空间中现有的项目包含进企业级工程中。选择企业级项目在打包的过程中会将子项目一并打包。也可直接创建EJBProject,发布的过程没有区别,唯一的区别在于JNDI name加入到现有的EAR工程中建好项目以后,右键工程Properties为工程添加JPA支持。关于JPA((Java Persistence API)):是Java EE 5.0平台标准的ORM规范,目前,hibernate,EclipseLink,OpenJPA都实现了JPA标准。例子中使用的是eclipselink2.4.1;更多参考:/blog/913236的JPA教程系列修改persistence.xml事务类型有两种Resource Local:由本地代码管理事务JTA:由容器管理事务。由容器管理事务可以省略em.getTransaction().begin();和em.getTransaction().commit();并且可以使用注入;连接池:Resource Local模式下,可以由JPA自己管理,也可以使用容器提供的数据源并自行配置连接池。JTA模式下,全部交给容器处理。至此,Service模块搭建完毕。生成Entity连接数据库,生成entity选择要生成entity的表,勾选Update class list in persistence.xml会将需要映射的entity的放入如persistence.xml的class标签下。代码中注解标签解释:Entity :EJB3 Entity Bean的批注,表明当前的java bean作为一个Entity Bean来处理。Table( name=SYS_USER ) :定义当前Entity对应数据库中的表。Id() :我们把SysUser的userid属性定义为主键。GeneratedValue():主键生成策略,手动生成主键不加此标签持久化创建sessionBean.状态类型: Sateless:无状态bean,不能确保bean的状态,且能与其他用户共享信息。性能较高。Stateful:有状态bean,确保客户端的每一个请求都在同一个bean中,更加安全。Singleton:EJB3.1新特性,在javaEE上下文中,容器中该bean唯一。用来保存应用级别的共享数据。参考:/bbs.ejf?cmd=appShow&id=5668865Remotepublic interface SysUserBeanRemote Collection getAllUsers();public void deleteUser(SysUser user);public Boolean updateUser(SysUser user);SysUser getUserByID(Object primaryKey);Boolean AddUser(SysUser user);Long getUserId();public List getUserByUsercode(String usercode);Remote接口;StatelessLocalBeanpublic class SysUserBean implements SysUserBeanRemote PersistenceContext(unitName=EEUserServer) public EntityManager getEm() return em;private EntityManager em; /* * Default constructor. */ public SysUserBean() / TODO Auto-generated constructor stub Overridepublic Collection getAllUsers() Query query=this.getEm().createQuery(select users from SysUser users, SysUser.class);return query.getResultList();Overridepublic void deleteUser(SysUser user) this.em.remove(getEm().merge(user);Overridepublic Boolean updateUser(SysUser user) getEm().merge(user);return true;Overridepublic SysUser getUserByID(Object primaryKey) SysUser us=this.em.find(SysUser.class,primaryKey);return us;Overridepublic Boolean AddUser(SysUser user) getEm().persist(user);return true;Overridepublic Long getUserId() Object o= this.em.createQuery(select max(users.userid) from SysUser users).getSingleResult();return Long.parseLong(o.toString()+1l;Overridepublic List getUserByUsercode(String usercode) List list= this.em.createQuery(select users from SysUser users where users.usercode=:usercode).setParameter(usercode, usercode).getResultList();return list;实现类;标签解释:PersistenceContext(unitName=EEUserServer):指向persistence.xml配置文件中persistence-unit name属性,通过依赖注入,容器将PersistenceContext注入给entityManager对象,name:指定PersistenceContext的name;Stateless:无状态会话bean的组件创建标签Remote:EJB生成的远程业务接口。LocalBean:公开一个的本地业务BeanJNDI Name:容器不同,命名方式不同。在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进行测试。public class SysUserBeanTest static InitialContext ctx = null;static SysUserBeanRemote sysBean = null;BeforeClasspublic static void setUpBeforeClass() throws Exception try ctx = new InitialContext(); catch (NamingException e) / TODO Auto-generated catch blocke.printStackTrace();try sysBean = (SysUserBeanRemote)ctx.lookup(java:global/EEDemo/EEUserServer/SysUserBean!com.demo.session.SysUserBeanRemote); catch (NamingException e) / TODO Auto-generated catch blocke.printStackTrace();AfterClasspublic static void tearDownAfterClass() throws Exception Beforepublic void setUp() throws Exception Afterpublic void tearDown() throws Exception Testpublic void testGetAllUsers() Assert.assertNotNull(sysBean.getAllUsers();Testpublic void testDeleteUser() SysUser u= sysBean.getUserByID(4l);sysBean.deleteUser(u);Assert.assertNull(sysBean.getUserByID(4l);Testpublic void testUpdateUser() SysUser u= sysBean.getUserByID(4l);u.setUserpassword(zhujiang1111);sysBean.updateUser(u);Assert.assertEquals(zhujiang1111, sysBean.getUserByID(4l).getUserpassword();Testpublic void testGetUserByID() Assert.assertNotNull(sysBean.getUserByID(4l);Testpublic void testAddUser() SysUser s=new SysUser();s.setCreatetime(2013-1-4);s.setCreateuser(new BigDecimal(1);s.setUserid(5);s.setUsercode(zj);s.setUserpassword(1234);sysBean.AddUser(s);SysUser u= sysBean.getUserByID(4);Assert.assertNotNull(u);Testpublic void testGetUserId() fail(Not yet implemented);Ignorepublic void testGetUserByUsercode() long i=sysBean.getUserId();Assert.assertEquals(i, 10l);标签解释:Test:将会对标注的方法进行测试,被测试的方法必须是public void 。可以抛出异常Ignore:被标注的方法不会被测试,在运行结果中,通过忽略用例数提醒你。BeforeClass:在运行所有的测试用例前,会执行此方法。AfterClass:与beforeClass相对应Before:运行每一个用例前都会执行一次After:与Before对应第二部分 JavaFX2.2调用EJB远程接口环境要求:必须使用JDK 1.6u28以上,javaFX2.2 SDK。Eclipse插件:e(fx)clpise,地址/p2-repos/releases/latest/1. 创建工程:2. 创建fxml文件:Fxml:基于XML,主要用于构建用户界面结构,使逻辑与界面分离,代码更清晰 LoginController与Login.fxml分别是界面的逻辑部分和界面部分。public class LoginController extends AnchorPane implements Initializable FXML TextField userId; FXML PasswordField password; FXML Button login; FXML Label errorMessage; private Main application; public void setApp(Main application) this.application = application; Override public void initialize(URL location, ResourceBundle resources) errorMessage.setText(); userId.setPromptText(demo); password.setPromptText(demo); public void processLogin(ActionEvent event) if (application = null) errorMessage.setText(Hello + userId.getText(); else if (!application.userLogging(userId.getText(), password.getText() errorMessage.setText(Username/Password is incorrect); 代码解释:FXML:此标记标注的变量将会对应到FXML中变量名称与fx:id相等的控件。AnchorPane:布局格式的一种。程序运行时,如果FXMLLoader执行load()方法,就会执行initialize(URL location, ResourceBundle resources)方法,方法由Initializable接口指定。并且提供fxml文件的URL和ResourceBundle;事件绑定:两种方式,一种通过在JavaFX Scene Builder中指定控制器类,通过属性绑定方法。Button id=button1 fx:id=login defaultButton=true onAction=#processLogin第二种是在代码中获取空间对象,通过代码绑定。更多:/technetwork/cn/articles/java/expressfx-1665720-zhs.html。远程调用ejb接口:public class RmiUtil private static Context ctx; private static Context loadContext() throws NamingException if(ctx!=null) return ctx; Properties prop = new Properties(); prop.setProperty(java.naming.factory.initial,com.sun.enterprise.naming.SerialInitContextFactory); prop.setProperty(java.naming.factory.url.pkgs,com.sun.enterpris
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 航空航天复合材料 课件知识点1 聚合物基复合材料概论
- 山东医专入学考试试题及答案
- 肿瘤防治与精准医学前沿进展
- 自我意识心理健康教育
- 秩序队员法律法规培训
- 呼吸内科门诊病历
- 中班艺术活动《冬天里的活动》
- 园区招商培训计划
- 2025年中国女性生物纤维素面膜行业市场全景分析及前景机遇研判报告
- 大班健康教案:冬季护肤品使用指南
- 2025至2030年中国玉米淀粉行业市场现状分析及前景战略研判报告
- 2025年江苏高考政治试卷真题解读及答案讲解课件
- 2025上半年山东高速集团有限公司社会招聘211人笔试参考题库附带答案详解析集合
- 辽宁省点石联考2024-2025学年高二下学期6月份联合考试化学试题(含答案)
- 2025高考全国一卷语文真题
- DTLDTC带式输送机工艺流程图
- 荧光绿送货单样本excel模板
- 有机化学概述
- 复盛零件手册
- 内外墙抹灰施工承包合同
- 《急救药品》PPT课件.ppt
评论
0/150
提交评论