通过 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的示例程序中找到这个用法。
分享到:
相关推荐
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
seam:在IE8中部分richface组件不能兼容的解决办法
Seam 2.X Web Development
Also supports automatically setup uv for arbitrary quad to avoid seam between 2 triangles. All shaders are updated, don't forget to replace shaders in your project. - IMPROVED: Text-Brighter ...
Seam环境配置.docSeam环境配置.docSeam环境配置.docSeam环境配置.doc
Seam为你的应用程序中所有的业务逻辑定义了一种统一的组件模型。 Seam组件可能是有状态的,包含与几个定义良好的上下文中任何一个相关联的状态, 包括长时间运行上下文、持久化上下文、业务流程上下文, 以及用户...
SEAM更换品种流程.pptx
seam-pageflow.jar
jboss-seam-2.1.1.GA\seam2.1.1api doc.chm,英文版,hxzon制作~~~因为满江红的api1.2的缺注释。
Seam - 语境相关的组件 ,学习seam的好资料.
Manning.Seam.in.Action.Sep.2008.pdf
eam适应快速开发、简化框架的趋势,Seam给我的感觉像是一个异常简单的MVC框架
什么是Seam? 1. 整合和强化Java EE框架 2. 一个为ORM设计的Web框架 3.专为有状态Web应用而设计 4. 支持Web 2.0 5.依赖双向映射的Pojo服务 6.非常规的配置 7.避免滥用XML 8.为测试而设计 9. 卓越的工具支持 ...
jboss.seam.simplicity.and.power.beyond.java.ee2007
Apress.Beginning.JBoss.Seam.Feb.2007.pdf 自己备份用的
采用c++实现seam carving论文中的全部功能:包括图片的缩小、放大、目标的移除、保护等。其中分为两个程序,其中一个是做的图片的缩小放大,命名为one;另外一个程序为目标的移除和保护,命名为two。均是基于c++实现...
#Generated by seam setup #Mon Jun 08 21:07:28 CST 2009 #数据库密码 hibernate.connection.password=testSeamGen #工作目录 workspace.home=E\:/workspace_seam #实体存放路径 model.package=...
jboss-seam-2.1.1.GA.jar.zip