`
yingfang05
  • 浏览: 122681 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Seam配置和Seam应用程序打包之二

    博客分类:
  • jsf
阅读更多
将Seam与你的EJB容器集成
我们需要将 SeamInterceptor 用于我们的Seam组件。 在整个程序中完成这个的最简单方式是在 ejb-jar.xml 中增加以下拦截器配置:

<interceptors>
    <interceptor>
        <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
    </interceptor>
</interceptors>

<assembly-descriptor>
    <interceptor-binding>
        <ejb-name>*</ejb-name>
        <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
    </interceptor-binding>
</assembly-descriptor>

Seam需要知道在JNDI中到哪里去寻找会话Bean。其中一种方法是在每个会话Bean Seam组件中指定 @JndiName注解。 然而,这样相当乏味。更好的一种方式是指定一种模式,Seam可以根据这个模式从EJB名称里推算出JNDI的名称。 不幸的是,在EJB3规范里面,没有定义到全局JNDI的标准映射,所以这个映射是特定于供应商的。 我们通常在 components.xml 中指定这个选项。

对于JBoss AS,以下的模式是正确的:

<core:init jndi-name="myEarName/#{ejbName}/local" />
myEarName就是部署Bean所在EAR的名称。

在一个EAR的外面(当使用嵌入式的JBoss的EJB3容器时),以下模式就是要用到的那个:

<core:init jndi-name="#{ejbName}/local" />
你不得不尝试着去找到其他应用程序服务器的正确配置。 注意有些服务器(比如GlassFish)要求你为所有EJB组件直接(而且很乏味地)指定JNDI名称。 在这种情况下,你可以选择你自己的模式。:-)

在一个EJB3的环境中,我们建议给事务管理使用一个特殊的内建组件,它完全知道容器事务,并且可以正确地处理用 Events 组件注册的事务成功事件。 如果你没有在你的 components.xml 文件中增加这几行,Seam就不会知道容器管理的事务什么时候结束:

<transaction:ejb-transaction/>
切记!
还有最后一点你要知道的。你必须在部署你的Seam组件的每个压缩文档中(即使空的属性文件也要这样),放置一个 seam.properties、META-INF/seam.properties 或META-INF/components.xml文件。 在启动时,Seam将会根据 seam.properties 文件扫描所有压缩档案寻找Seam组件。

在一个Web压缩档案(WAR)文件中,如果在 WEB-INF/classes 目录下,包含有任何Seam组件,你必须在该目录中放置一个 seam.properties文件。

这就是为什么所有的Seam示例程序都有一个空的 seam.properties 文件的原因。 你不能删掉这些文件,还期待一切仍然正常运行!

你可能会觉得这很愚蠢,并且框架的设计者做一个空文件来影响他们的软件该是多么的白痴啊? 当然,这是针对Java虚拟机的限制所采取的一种权宜之计 — 如果我们不使用这个机制,那么我们的下一个最佳选项将逼迫你显式地在 components.xml 中列出所有的组件,就像其他某些竞争框架所做的那样!我想你会喜欢更喜欢我们这种方式。

在Java EE 5中配置Seam

如果你是在Java EE 5的环境下运行,这就是开始使用Seam所需的全部配置!

打包
一旦你将所有这些东西都打包到一个EAR文件中,该压缩文档看起来就会像这样:

my-application.ear/
    jboss-seam.jar
    lib/
        jboss-el.jar
    META-INF/
        MANIFEST.MF
        application.xml
    my-application.war/
        META-INF/
            MANIFEST.MF
        WEB-INF/
            web.xml
            components.xml
            faces-config.xml
            lib/
                jsf-facelets.jar
                jboss-seam-ui.jar
        login.jsp
        register.jsp
        ...
    my-application.jar/
        META-INF/
            MANIFEST.MF
            persistence.xml
        seam.properties
        org/
            jboss/
                myapplication/
                    User.class
                    Login.class
                    LoginBean.class
                    Register.class
                    RegisterBean.class
                    ...
你要在 META-INF/application.xml 中将 jboss-seam.jar 声明为一个EJB模块。 jboss-el.jar 应该被放置在EAR的lib目录下(将它放在EAR的classpath中)。

如果你想使用jBPM或Drools,你必须在EAR的lib目录下包含所需要的jar文件。

如果你想使用Facelets(我们建议使用),你必须在WAR的 WEB-INF/lib 目录下包含 jsf-facelets.jar

如果你想使用Seam标签库(大多数Seam应用程序都这么做),你就必须在WAR的 WEB-INF/lib 目录下包含 jboss-seam-ui.jar。 如果你想用PDF或者Email标签库,则需要在 WEB-INF/lib 目录下放置 jboss-seam-pdf.jar 或 jboss-seam-mail.jar。

如果你想要使用Seam调试页面(只在使用Facelets的应用程序中有效),你必须在WAR的 WEB-INF/lib 目录下包含jboss-seam-debug.jar

Seam发行时包括几个示例程序,他们能在任何支持EJB 3.0的Java EE容器中部署。

在J2EE中配置Seam
Seam很有用,即使你还没有冒险尝试EJB 3.0。在这种情况下,你可以使用Hibernate3或者JPA代替EJB 3.0持久化技术,并用简单的JavaBeans代替会话Bean。 你可能会错过会话bean的某些很好的特性,但是当你准备好时,这将会很容易迁移到EJB 3.0,同时,你将能利用Seam独特的声明式状态管理架构。


Seam JavaBean组件不会像会话Bean那样提供声明式事务划分。你 可以 使用 JTA UserTransaction 手动管理你的事务,或者使用Seam的 @Transactional 标注声明。 但是当与JavaBean一起使用Hibernate时,大部分应用程序只会用到由Seam管理的事务。

Seam发行包里包括预订示例程序的一种使用Hibernate3和JavaBeans而不是EJB3的版本,以及另一种使用JPA和JavaBeans的版本。 这些示例程序可以随时部署到任何J2EE应用程序服务器中。

在Seam中引导Hibernate
如果你装载了一个内建的组件,Seam将会从你的 hibernate.cfg.xml 文件中引导一个 Hibernate SessionFactory:

<persistence:hibernate-session-factory name="hibernateSessionFactory"/>
如果你想要通过注入得到一个由Seam管理的Hibernate Session,还需要配置一个 managed session。

<persistence:managed-hibernate-session name="hibernateSessionFactory"
                            session-factory="#{hibernateSessionFactory}"/>
在Seam中引导JPA
如果你装载了一个内建的组件,Seam将会从你的 persistence.xml 文件中引导一个 JPA EntityManagerFactory:

<persistence:entity-manager-factory name="entityManagerFactory"/>
如果你想要通过注入得到一个由Seam管理的JPA EntityManager,还需要配置一个 managed persistence context。

<persistence:managed-persistence-context name="entityManager"
                            entity-manager-factory="#{entityManagerFactory}"/>
打包
我们可以将我们的应用程序按照以下结构打包成一个WAR文件:

my-application.war/
    META-INF/
        MANIFEST.MF
    WEB-INF/
        web.xml
        components.xml
        faces-config.xml
        lib/
            jboss-seam.jar
            jboss-seam-ui.jar
            jboss-el.jar
            jsf-facelets.jar
            hibernate3.jar
            hibernate-annotations.jar
            hibernate-validator.jar
            ...
            my-application.jar/
                META-INF/
                   MANIFEST.MF
                seam.properties
                hibernate.cfg.xml
                org/
                    jboss/
                        myapplication/
                            User.class
                            Login.class
                            Register.class
                            ...
    login.jsp
    register.jsp
    ...
如果我们想要将Hibernate部署在一个非EE的环境中(如Tomcat或TestNG),我们需要多做一些工作。
分享到:
评论

相关推荐

    Configuring Seam and packaging Seam applications

    以下是对配置Seam和打包Seam应用程序的关键知识点的详细解释: ### 1. 基本Seam配置 #### 1.1.1. 集成Seam与JSF和Servlet容器 Seam与JSF的集成是其核心功能之一。这涉及到在web.xml文件中配置Seam Filter和Seam ...

    eclipse 工程seam 例子2

    而"MyMessages-ear"是一个Enterprise Archive文件,它是Java EE应用的打包格式,通常包含了一个应用的所有组件,如EJB JAR、WAR(Web应用程序)和其他资源文件。这个EAR文件可以被部署到Java EE服务器上,如JBOSS或...

    Seam Framework 2.0 Reference中文版

    - **将应用部署为 EAR**:介绍了如何将 Seam 应用程序打包成 EAR 文件进行部署。 - **Seam 与增量热部署**:介绍了如何利用 Seam 的增量热部署功能提高开发效率。 - **在 Jboss4.0 下使用 Seam**:这部分介绍了如何...

    Jboss Seam中文版

    8. **RESTful的Seam应用程序:Blog示例**:通过一个博客系统,演示了如何使用Seam构建RESTful风格的服务。 - **使用“拉”风格的MVC**:解释了如何通过Seam实现客户端发起请求、服务器响应数据的经典MVC模式。 - *...

    如何部署seam的例子程序

    #### 四、配置Seam 进入Seam安装目录`C:\jboss-seam-2.2.1.CR3\jboss-seam-2.2.1.CR3`,修改`build.properties`文件,添加一行`jboss.home=C:\\jboss-5.1.0.GA-jdk6\\jboss-5.1.0.GA`。 #### 五、部署示例程序 1....

    seam参考手册中文版

    - **部署为EAR包**: 演示了如何将Seam应用打包并部署到生产环境。 - **热部署**: 介绍Seam支持的热部署特性,有助于提升开发效率。 #### 三、上下文相关的组件模型 ##### Seam上下文层次 - **无状态上下文**:...

    SEAM 中文开发指南

    ##### 1.10 RESTful 的Seam应用程序:Blog范例 - **使用“拉”风格的MVC**:实现了基于 RESTful API 的博客系统。 - **可收藏的搜索结果页面**:允许用户收藏和分享搜索结果。 - **使用“推”风格的MVC**:展示了...

    Seam-gen生成基础项目骨架

    最后,运行 `seam explode` 命令,将生成的应用程序打包并部署到指定的 JBoss 应用服务器上。这个命令会将 Maven 构建的结果转换成 JBoss 可以直接运行的格式。 在整个过程中,Seam-gen 的目标是减少手动配置和...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.6. 一个完整的Seam 应用程序:宾馆预订范例............................................................................................................ 45 1.6.1. 介绍......................................

    eclipse 工程的 Seam 例子

    5. 编写必要的配置文件,如faces-config.xml、persistence.xml等,以连接数据库和配置Seam组件。 6. 运行工程,Seam会自动处理依赖注入和事件处理,你可以通过浏览器查看和测试JSF页面。 **总结** "Eclipse工程的...

    使用 Maven 管理 Seam 项目

    本篇文章将深入探讨如何使用Maven来管理Seam项目,一个基于Java EE的轻量级框架,专为富互联网应用程序(RIA)设计。 Seam项目是一个集成框架,它将JSF、EJB、CDI、JPA等Java EE技术紧密融合,提供了丰富的功能和...

    seam_reference英文文档,讲解Seam更详细

    - **部署方式**:这部分介绍了如何将Seam应用打包为Enterprise Archive (EAR) 文件进行部署。 通过上述内容的详细解读,我们不仅能够了解Seam框架的核心特性和应用场景,还能够学习如何通过具体的示例项目进行实践...

    seam_reference.pdf

    ### 关于JBoss Seam的关键知识点 #### 一、引言:JBoss Seam简介 JBoss Seam是一个基于Java EE...通过深入学习这些示例和教程,开发者可以更好地掌握Seam的核心概念和技术,从而提高自己的开发效率和应用程序的质量。

    seam2.1说明文档

    Seam 2.1 是一款强大的企业级 Java 开发框架,它为开发人员提供了一种简单而高效的方式来构建复杂的 Web 应用程序。相较于 Seam 2.0 版本,Seam 2.1 在权限验证方面进行了大量的增强,引入了更多的功能和改进,以...

    Seam_Reference_Guide.pdf

    - **WAR部署**:当项目构建完成后,会自动生成一个WAR包(Web Application Archive),这是Java Web应用程序的标准打包格式。本节解释了WAR包的结构及其包含的文件和目录。 - **EAR部署**:与WAR不同,EAR...

    Jboss seam2.1版本开发参考文档

    - **运行示例测试:** 解释了如何使用自动化测试工具验证Seam应用程序的功能。 2. **第一个Seam应用:注册示例** - **理解代码:** 分析了用于实现用户注册功能的核心代码片段。 - **工作原理:** 解释了Seam是...

    seam 2.1 参考手册

    - **部署EAR包**:讲解了如何将Seam应用打包成EAR文件进行部署。 - **增量热部署**:讨论了如何在开发过程中使用增量热部署功能,提高开发效率。 - **与JBoss 4.0集成**:提供了与旧版JBoss服务器集成的步骤。 综上...

    深入浅出-jbossseam说明

    JBoss Seam是一款开源的企业级Java框架,它结合了模型-视图-控制器(MVC)模式、依赖注入(DI)和企业JavaBeans(EJB)3.0规范,旨在简化Java EE应用程序的开发过程。Seam的主要目标是将前端界面、业务逻辑和持久层...

Global site tag (gtag.js) - Google Analytics