浅谈基于TAPESTRY
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈基于TAPESTRY
[摘要]传统的石化行业管理主要以电子文档和纸质材料为媒介分散且不便于集中管理。
对此本文提出开发基于Tapestry 5和EJB 3的B/S架构的数据库管理系统对多年积累的数据进行汇总分析为高级管理人员提供决策。
[关键词] Tapestry;EJB 3;框架
Web应用程序可以分为表示层、业务层、持久层和领域模型层。
按照这种分层结构本文分别介绍Tapestry和EJB3两种开源框架。
Tapestry使得程序具有一致性的结构通过开发Tapestry组件增强了代码的复用性和程序的健壮性。
结合项目实例介绍了如何整合这两种框架构建Web的应用。
应用这种整合框架可以使系统层次清晰并实现层之间的解耦各层可以独立开发极大地提高了开发效率。
1 基于Tapestry+EJB3的软件架构1.1 Tapestry框架简介Tapestry是一个使用Java语言创建Web应用的面向组件的开源框架。
其中Tapestry5是框架的第5个版本。
Tapestry应用建立在根据组件构建的页面的基础上。
这个框架能够提供输入验证、本地化/国际化、状态/持续性管理、URL构建/参数映射等功能。
独一无二的类重载机制使得开发者对源代码的修改无需重新部署和启动便可立即显现极大地提高了开发的效率。
组件的思想贯穿Tapestry5
始终。
以BeanEditForm组件为例用户只需要写极少的代码就可以实现一个JavaBean中所有属性到一组组件的映射。
同时在Web2.0时代Tapestry提供了老练的Aja_支持。
由于JavaScript在浏览器运行时的不稳定性框架对其进行了很好的隐藏。
此外完善的验证机制内置的国际化策略都使得Web开发轻而易举。
系统开发工程中大量使用该框架的优秀特性极大地提高了开发的效率。
1.2EJB3框架简介EJB(EnterpriseJavaBeans)是J2EE平台的中心它用于开发和部署商业应用程序的分布式组件模型EJB作为一种实现业务逻辑的组件技术具有可扩展性、事务处理和安全保密性。
而项目采用的是EJB3.0使用元注释(Annotation)替换原有的XML的部署描述文件以及采用依赖注入等优势L4J降低了程序的复杂性和组件之间的耦合性大大提高了系统的开发效率。
而将系统的业务核心集中在EJB层完成在Web层实现MVC模式调用实现了EJB层和Web层的解耦使得编程难度降低且形成模板化从而使得本系统具有易于维护和扩展、低成本、高效率等特点。
开发需求多变的企业级应用系统应用EJB技术将大大简化系统的开发和维护成本。
EJB的运行环境:EJB需要运行在EJB容器每个JavaEE应用服务器都含有EJB容器和Web容器所以既可以运行EJB也可以运行Web应用。
目前支持EJB3.0的应用服务器有JBOSS(4.2._ 以上版本)、Gla
ssfish、Weblogic(10以上版本)、SunApplicationServer(9.0以上版本)、OracleApplicationServer(10g以上版本)和我们国内的Apusic应用服务器。
本文将介绍JBOSS和Weblogic前者是使用者最多的开源应用服务器后者是市场占有率最高的商业应用服务器。
注意:Tomcat目前只是Web容器它不能运行EJB应用。
1.3基于EJB3的B/S架构 1.3.1 EnterpriseJavaBeans(EJB)EnterpriseJavaBeans是一个用于分布式业务应用的标准服务端组件模型。
采用EnterpriseJavaBeans架构编写的应用是可伸的、事务性的、多用户安全的。
可以一次编写这些应用然后部署在任何支持EnterpriseJavaBeans规范的服务器平台如Jboss、Weblogic等。
EnterpriseJavaBean(EJB)定义了3种企业Bean分别是会话Bean(SessionBean)实体Bean(EntityBean)和消息驱动Bean(MessageDrivenBean)。
1.3.2JNDIJNDI是自JDK1.3版本开始就绑定的标准JavaAPI。
它为各种现有的命名和目录服务提供了通用接口:DNS、LDAP、活动目录(ActiveDirectory)、RMI注册器、COS注册器、NIS及文件系统。
在结构上JNDI由
两部分组成:客户API和服务提供商接口(Service
ProviderInterfaceSPI)应用程序通过客户API访问命名和目录服务;服务提供商接口用于供厂商创建命名和目录服务的JNDI实现。
JNDI的结构如图1所示。
EJB开发者只需要知道使用客户API如何访问命名和目录服务即可而不需要知道JNDISPI的使用因为不需要使用JNDISPI开发JNDI实现产品这就好比通过JDBC访问数据库我们只需要知道使用JDBCAPI如何访问数据库而不需要知道数据库的JDBC驱动如何实现。
使用客户API访问EJB3.0只需编写少量JNDI代码。
1.3.3应用范围EJB3.0只专注于业务核心的开发它并不关心客户端的类型及其使用的技术。
既可以在Web中调用EJB也可以在J2SE或J2ME中调用EJB。
对于在Web中调用EJB可以把代码直接写在JSP中但这种做法已经被抛弃原因是Java代码与代码相混合不但可读性差而且维护起来也很麻烦。
目前在Web开发上我们可以引入第三方Web框架如StrutsJSFSpringMVCTapestry等。
其实使用EJB开发项目对于选择Web框架会显得不是那么重要因为日后即使更换成另一种框架对于业务核心是不会构成任何影响的。
即使如此我们选择Web框架仍需谨慎因为谁也不想换来换去。
目前可推荐的Web框架是Struts和JSF前者是这几年的主流框架使用的开发人员比较多后者属于JavaEE规范有望成为W
eb框架的主角。
其中一个样例如图2所示。
(1)浏览器请求Test.jsp文件。
(2)应用服务器的JSP引擎编绎Test.jsp。
(3)Test.jsp通过JNDI查找获得HelloWorldEJB的存根对象然后调用SayHello()方法EJB容器截获到方法调用。
(4)EJB容器调用HelloWorld实例的SayHello()方法。
2项目实例1EJB3端:META-INF/persistence._ml配置文件关联所有的持久层类企业级数据库可以利用HQL语法无缝将数据转换成对象。
<?_mlversion="1.0"encoding="UTF-8"?><persistence _mlns="http://java.sun.com/_ml/ns/persistence"><persistence-unitname="core"><jta-data-source>java:/oildata</jta-data-source><class>com.jncom.core.ejb3.control.entity.UserHBM</class><class>com.jncom.core.ejb3.control.entity.RoleHBM</class><class>com.jncom.core.ejb3.control.entity.OperationHBM</class><e_clu
de-unlisted-classes>true</e_clude-unlisted-classes><properties><propertyname="hibernate.hbm2ddl.auto"value="update"/><propertyname="hibernate.dialect"value="org.hibernate.dialect.SQLServerDialect"/><propertyname="hibernate.show_sql"value="false"/></properties></persistence-unit></persistence> 2 EJB3端:core/com/jncom/core/ejb3/base/持久层核心代码classBaseEntity类型:接口目的:通过实现java.io.Serializable接口以启用其序列化功能。
主要加载DAO层中的类。
classBaseSvc类型:抽象类。