`
yingfang05
  • 浏览: 119548 次
  • 性别: 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),我们需要多做一些工作。
分享到:
评论

相关推荐

    JBOSS_SEAM配置

    JBOSS_SEAM配置

    Seam 2.1 安全模块框架

    Seam2.10安全API为你使用Seam开发的应用程序提供了大量与安全认证相关的特性,包含了以下几块: • 安全验证 - 一个可扩展的、基于JAAS的安全验证层,允许用户to authenticate against any security provider • ...

    seam_in_action

    seam in action seam in action seam in action seam in action seam in action seam in action seam in action

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

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

    JSF项目中seam的配置

    文章里主要是把seam在jsf中的使用经验提一下,能让更多的人了解seam的实际应用和优势

    深入浅出JBoss Seam

    什么是Seam? 1. 整合和强化Java EE框架 2. 一个为ORM设计的Web框架 3.专为有状态Web应用而设计 4. 支持Web 2.0 5.依赖双向映射的Pojo服务 6.非常规的配置 ...5. 配置和打包 6. 为何这么简单?

    seam 2中文手册

    seam下一代web开发框架

    Seam环境配置.doc

    Seam环境配置.docSeam环境配置.docSeam环境配置.docSeam环境配置.doc

    seam+richfaces环境框架配置文件

    seam+richfaces环境框架的配置文件,经过我多次尝试才配置好的环境配置文件,很有用,适合刚接触这些技术的初学者,希望大家支持!

    seam的注解和标签

    seam中的注解总结,包括三种JPA和seam自身的标签

    jboss-seam2.1

    Seam 是一种业级 企 Java 的应规用程序框架。它的灵感源自下列原 : 只有一种“工具” Seam为 应 业务业业 义 种统 组 你的 用程序中所有的 定 了一 一的 件模型。 Seam组件可能是 态义 关关 态 有状 的,包含与几...

    JBOSS.SEAM.WEB应用开发

    JBOSS.SEAM.WEB应用开发 中文版 (美)MichaelYuan.

    java seam开发环境搭建

    1、 Java环境的安装和配置 2、 JBoss环境的安装和配置 3、 Ant环境的安装和配置 4、 Seam环境的安装和配置 5、 Eclipse环境及JBoss Tools 插件的安装和配置

    seam_carving 代码实现 seam

    seam_carving代码实现 图像缩放

    Seam框架文档简述

    Seam全称是Jboss Seam,是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个最新的模式。

    如何部署seam的例子程序

    seam包自带了一些例子,本文帮助你如何使用ant部署并执行seam的例子,省去了用jboss ide或者eclipse部署seam项目带来的麻烦

    Seam全称是Jboss Seam,是一个Java EE 5框架

    Seam全称是Jboss Seam,是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个...Seam还可以把JBPM流程定义直接地集成到应用程序中。

    jboss seam

    Seam在JAAS和JBoss规则之上,创建了一个新的基于规则的安全框架。甚至有用来渲染PDF、在线电子邮件和图表及wikitext的JSF标签库。 Seam组件可以同时作为一个Web Service进行调用,异步地从客户端JavaScript或者...

    seam资料

    seam资料seam资料seam资料seam资料seam资料seam资料seam资料seam资料

    seam_seamcarving_

    seam carving的相关代码实现

Global site tag (gtag.js) - Google Analytics