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

配置Seam组件之一

    博客分类:
  • jsf
阅读更多
Seam所崇尚的哲学是XML配置最小化。不过,基于不同的原因,我们有时候还是要利用XML来配置Seam组件。这些原因包括: 将Java代码与特定于部署的信息分离;要建立可重用的框架;配置Seam的内置功能等等。 Seam提供了两种基本的配置组件方法:通过在properties文件或者 web.xml 中设置属性来配置, 或者通过 components.xml 进行配置。

通过属性设置来配置组件
Seam组件的配置属性可以通过两种方式得到:通过servlet context参数,或者通过位于classpath下的 seam.properties 属性文件进行。

可配置的Seam组件必须为可配置的属性暴露JavaBean风格的属性setter方法。例如,一个名为 com.jboss.myapp.settings 的Seam组件拥有一个名为 setLocale() 的setter方法,我们就可以在 seam.properties 文件中提供一个名为 com.jboss.myapp.settings.locale 的属性,或者作为一个servlet context参数, 这样,一旦该组件被实例化,Seam将自动为这个名为 locale 的属性注入相应的值。

Seam本身的配置也采用了相同的机制。例如,要设置对话超时,我们可以在 web.xml 或者 seam.properties 中为 org.jboss.seam.core.manager.conversationTimeout 提供一个值。 (在Seam内置的组件 org.jboss.seam.core.manager 中,已经包含了一个名为 setConversationTimeout() 的setter方法。)

通过 components.xml 来配置组件
components.xml 文件的功能要比属性设置的更强大一些。它让你:

配置那些已经被自动安装的组件—包括内置组件以及那些带有 @Name 注解, 且被Seam的部署扫描器识别到的那些应用组件。

将那些没有 @Name 注解的类安装成为Seam组件— 这一点对于那些需要以不同的名字进行多次安装的结构组件特别有用(例如,Seam管理的持久化上下文)。

安装那些 仅 具有 @Name 注解,但是默认情况下未被安装的Seam组件。 因为 @Install 注解表明该组件不应当被安装。

覆盖组件的范围。

components.xml 文件可以出现在下面三个不同地方中的任何一处:

war 包的 WEB-INF 目录下。

jar 包的 META-INF 目录下。

包含带有 @Name 注解类的 jar 包下的任何目录。

通常情况下,当Seam部署扫描器在包含 seam.properties 文件或者 META-INF/components.xml 文件的文件夹中识别到一个包含 @Name 注解的类时, Seam将安装载该组件。(除非这个组件具有一个 @Install 注解,表示它不应该被默认安装。) components.xml 文件让我们去处理那些需要覆盖注解的特殊情况。

例如,下面的 components.xml 文件安装了jBPM:

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:bpm="http://jboss.com/products/seam/bpm">
    <bpm:jbpm/>
</components>
这个例子实现了相同的功能:

<components>
    <component class="org.jboss.seam.bpm.Jbpm"/>
</components>
这个例子安装并配置了Seam管理的两个不同的持久化上下文:

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:persistence="http://jboss.com/products/seam/persistence"

    <persistence:managed-persistence-context name="customerDatabase"
                       persistence-unit-jndi-name="java:/customerEntityManagerFactory"/>

    <persistence:managed-persistence-context name="accountingDatabase"
                       persistence-unit-jndi-name="java:/accountingEntityManagerFactory"/>

</components>
这个例子也一样:

<components>
    <component name="customerDatabase"
              class="org.jboss.seam.persistence.ManagedPersistenceContext">
        <property name="persistenceUnitJndiName">java:/customerEntityManagerFactory</property>
    </component>

    <component name="accountingDatabase"
              class="org.jboss.seam.persistence.ManagedPersistenceContext">
        <property name="persistenceUnitJndiName">java:/accountingEntityManagerFactory</property>
    </component>
</components>
这个例子创建了一个Seam管理的session范围持久化上下文(这在实际项目中并不推荐使用)

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:persistence="http://jboss.com/products/seam/persistence"

<persistence:managed-persistence-context name="productDatabase"
                                          scope="session"
                     persistence-unit-jndi-name="java:/productEntityManagerFactory"/>

</components>
<components>

    <component name="productDatabase"
              scope="session"
              class="org.jboss.seam.persistence.ManagedPersistenceContext">
        <property name="persistenceUnitJndiName">java:/productEntityManagerFactory</property>
    </component>

</components>
通常会给像持久化上下文这样的基础结构对象使用 auto-create 选项, 它能在你使用 @In 注解时,不必显式地指定 create=true。

<components xmlns="http://jboss.com/products/seam/components"
            xmlns:persistence="http://jboss.com/products/seam/persistence"

<persistence:managed-persistence-context name="productDatabase"
                                    auto-create="true"
                     persistence-unit-jndi-name="java:/productEntityManagerFactory"/>

</components>
<components>

    <component name="productDatabase"
        auto-create="true"
              class="org.jboss.seam.persistence.ManagedPersistenceContext">
        <property name="persistenceUnitJndiName">java:/productEntityManagerFactory</property>
    </component>

</components>
<factory> 声明让你指定一个值或者方法来绑定一个表达式,当它第一次被引用时,将被执行用来初始化一个context变量的值。

<components>

    <factory name="contact" method="#{contactManager.loadContact}" scope="CONVERSATION"/>

</components>
你也可以为Seam组件创建一个别名(第二个名字),就像这样:

<components>

    <factory name="user" value="#{actor}" scope="STATELESS"/>

</components>
你甚至可以给常用的表达式定义别名:

<components>

    <factory name="contact" value="#{contactManager.contact}" scope="STATELESS"/>

</components>
auto-create="true" 用在 <factory> 声明中尤其常见。

<components>

    <factory name="session" value="#{entityManager.delegate}" scope="STATELESS" auto-create="true"/>

</components>
我们在部署或者测试期间,有时候想要通过略微的改动,来重用同一个 components.xml文件。 Seam允许你在 components.xml 文件中使用 @wildcard@ 形式的通配符, 这些通配符可以在部署的时候被Ant构建脚本替换,也可以在开发时通过在classpath中提供一个名为 components.properties 的文件进行替换。 你会在Seam的示例程序中找到这个用法。
分享到:
评论

相关推荐

    JBOSS SEAM组件中文手册

    JBOSS SEAM组件中文手册 Seam_2.0_Reference_zh_CN

    Seam - 语境相关的组件

    Seam - 语境相关的组件 ,学习seam的好资料.

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

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    JBOSS_SEAM配置

    JBOSS_SEAM配置

    jboss-seam2.1

    Seam组件可能是 态义 关关 态 有状 的,包含与几个定 良好的上下文中任何一个相 的状 , 包括长开间运行上 下文、持久化上下文、业务流程上下文, 以及用户够交互中能 跨多个 Web请求保存的务 务上下文。

    jboss seam

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

    seam_in_action

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

    Seam 2.1 安全模块框架

    Seam2.10安全API为你使用Seam开发的应用程序提供了大量与安全认证...• 权限管理 - 一组内置的Seam组件,能让应用程序的安全政策变得容易管理 • 验证码支持 - 帮助防止通过软件或脚本对你用Seam开发的网站进行攻击等等

    jboss-seam 注解

    为一个类定义一个Seam组件。所有Seam组件都需要该注解。 @Scope @Scope(ScopeType.CONVERSATION) 定义默认的组件上下文。可以定义的值由 ScopeType 枚举:EVENT, PAGE, CONVERSATION, SESSION, BUSINESS_PROCESS, ...

    seam+richfaces环境框架配置文件

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

    Seam-语境相关的组件

    对JBoss Seam及其上下文相关的组件模型等的介绍 资源中包括两个文档,但是内容一样,怎么方便怎么看

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

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

    seam需要的jar包

    seam框架需要的所有jar包,支持seam ui组件

    Seam环境配置.doc

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

    Seam框架文档简述

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

    JSF项目中seam的配置

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

    seam_carving 代码实现 seam

    seam_carving代码实现 图像缩放

    java seam开发环境搭建

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

    seam介绍

    seam介绍

    seam级联菜单例子

    seam级联菜单例子

Global site tag (gtag.js) - Google Analytics