`
yingfang05
  • 浏览: 121585 次
  • 性别: 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 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

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

    Configuring Seam and packaging Seam applications

    Seam与JSF的集成是其核心功能之一。这涉及到在web.xml文件中配置Seam Filter和Seam Listener,以便处理JSF请求生命周期中的事件,并确保Seam组件与JSF页面正确交互。 #### 1.1.2. 使用Facelets Facelets是JSF推荐...

    seam参考手册中文版

    #### 四、Seam组件配置 ##### 配置方式 - **通过属性设置**: 在组件类中直接定义属性值。 - **通过components.xml文件**: 更灵活地配置组件行为,无需修改源代码。 - **细粒度配置文件**: 为特定组件或组件组提供...

    为Seam做好准备

    理解如何配置Seam项目以及依赖管理是非常重要的。 7. **开发环境**:使用Seam通常需要IDE支持,如NetBeans、Eclipse等,熟悉IDE的使用可以提高开发效率。同时,确保安装了JDK和对应的Java EE服务器,如Glassfish或...

    Seam_开发工具配置手册.pdf

    - **定义与功能**:Seam是一个建立在Java EE 5之上的全功能应用框架,同时也是当前最受欢迎的企业级Java框架之一。它深入整合了许多基于标准或开源框架(如JSF、EJB3、JMS、Web Services、jBPM、JBoss Rules、Ajax4...

    Seam_Reference_Guide.pdf

    - **新建Seam Action**:Seam Actions是Seam框架的核心组成部分之一。这部分内容详细介绍了如何通过向导来创建一个新的Seam Action。 - **新建Seam Form**:Seam Forms允许开发者轻松地创建表单,并处理用户的输入...

    整合了seam的一些资源

    Seam的核心特性之一是其自动管理的组件系统,这得益于`CDI`。CDI允许开发者声明依赖关系,容器会自动注入所需的服务,极大地简化了代码,并提高了可测试性和可维护性。此外,Seam还整合了`EJB`,使得开发者可以轻松...

    jboss seam 中文文档

    - **在 JBoss AS 上运行示例**:这是最直接的方式之一,可以快速验证环境配置是否正确,并且熟悉 Seam 在 JBoss AS 上的运行方式。 - **在 Tomcat 服务器上运行示例**:如果开发者已经熟悉了 Tomcat,那么这种方式...

    Seam入门

    本部分将详细介绍如何通过不同方式来配置Seam组件。 ##### 4.1 通过属性设置来配置组件 可以通过设置组件的属性来配置组件的行为。这种方式相对简单,适用于基本的配置需求。 ##### 4.2 通过components.xml来配置...

    Manning - Seam in Action

    - **Seam组件描述符**:为了更好地管理组件,Seam引入了一个组件描述符的概念。这个描述符定义了组件的行为、属性以及其他配置信息。 - **绝对控制反转**:Seam通过使用控制反转(IoC)原则,进一步增强了组件的灵活...

    深入浅出JBoss Seam.pdf

    由于Seam的主要贡献者之一Gavin King同时也是Hibernate的创造者,因此Seam在设计之初就考虑到了如何更好地支持ORM,使得开发者可以轻松地处理延迟加载等场景。 **2. 改善JSF** Seam还提供了一套增强JSF的工具,...

    seam in action

    Seam组件描述符用于描述组件的元数据,包括组件的类型、属性、事件处理等信息。这些描述符通常通过注解的形式添加到类上,使得Seam能够自动识别并配置组件。 **6. 绝对控制反转** 绝对控制反转是Seam的一个重要...

    seam插件下载地址及安装过程

    Seam 的强大之处在于它简化了 JSF、EJB 和其他 Java 技术的集成,使得开发人员能够更专注于业务逻辑,而无需过多关注底层实现。此外,Seam 提供了事件驱动的编程模型和组件化架构,增强了应用程序的灵活性和可维护性...

    Seam-无缝集成JSF

    JSF作为Java Web应用程序的标准框架之一,虽然提供了强大的事件驱动API和用户界面组件库,但其本身并不是一个完整的Web应用框架。这导致了开发者在构建复杂应用时需要额外的工具来填补JSF功能上的空白。 #### 二、...

    Jboss seam 一个深度集成框架

    Spring 框架也是另一种广受欢迎的集成框架,它通过 XML 配置文件提供了一种灵活的方式来管理应用程序中的组件。虽然 Spring 极大地提高了组件管理和配置的灵活性,但它仍然要求开发者手动处理多个不同框架之间的交互...

    netbeans_Facelets_Seam_Ejb3编程入门

    - **GlassFish/SJSAS设置**:Sun Java System Application Server 9(SJSAS),现在通常被称为GlassFish,是开发和部署Java EE应用的首选服务器之一。文档指导读者如何在NetBeans中配置GlassFish服务器,以便进行...

    接上篇(seam登录时的权限验证)之“seam基于数据库的权限验证”

    4. **Seam Security API**:Seam提供了一系列的API和组件,如`Security`、`SessionContext`和`Identity`,用于在运行时检查用户权限。例如,`Security.checkPermission()`方法可以用来动态检查用户是否有执行特定...

    seam2.1说明文档

    在 Seam 2.1 中,最显著的变化之一就是增强了安全性方面的功能,尤其是在用户权限验证机制上。这一版本不仅提供了更为精细的权限控制选项,还增加了对最新安全标准的支持,如更严格的密码策略和会话管理机制等。 ##...

Global site tag (gtag.js) - Google Analytics