Jetspeed SearchEngine Component Definition
<beans default-lazy-init="false" default-dependency-check="none"
default-autowire="no">
<!--
SEARCH COMPONENT
-->
<bean id="org.apache.jetspeed.search.SearchEngine"
class="org.apache.jetspeed.search.lucene.SearchEngineImpl" abstract="false"
singleton="true" lazy-init="default" autowire="default"
dependency-check="default">
<constructor-arg index="0">
<value>${applicationRoot}/WEB-INF/search_index</value>
</constructor-arg>
<constructor-arg index="1">
<null />
</constructor-arg>
<constructor-arg type="boolean">
<value>true</value>
</constructor-arg>
<constructor-arg>
<ref bean="org.apache.jetspeed.search.HandlerFactory" />
</constructor-arg>
</bean>
</beans>
|
Jetspeed在实现过程中遵循着面向接口编程的最佳实践,上图中的Bean id为org.apache.jetspeed.search.SearchEngine,事实上这是一个定义在核心jetspeed-api组件中的接口,org.apache.jetspeed.search.lucene.SearchEngineImpl为该接口的实现类,这个类定义在 components/search组件中,后面的内容就是SearchEngineImpl的构造函数的输入参数,注意最后一个参数 org.apache.jetspeed.search.HandlerFactory也是一个Java Interface的接口。Spring在实例化SearchEngine的时候,会首先分析它的构造函数参数是否已经全部满足条件(实例化), Spring会根据搜索bean id为org.apache.jetspeed.search.HandlerFactory的bean,如果已经实例化就直接注入到 SearchEngineImpl的构造函数调用里;如果没有就实例化这个bean之后,再注入。
Apache OJB O/R Mappers
由于Spring对Apache OJB提供良好的支持,因此Jetspeed中与数据库相关的功能基本上都用过Spring的PersistenceBrokerDaoSupport实现。这些组件包括:Capablity、DatabasePageManager、PipeLine、Preferences、Profiler、 Registry、Security、SSO等。O/R Mapping的信息定义在上面这些组件jar包中的JETSPEED-INF/ojb/%component name%_repository.xml文件中,其中%component name%需要用组建名称替代。
Declarative transaction management
在Jetspeed中,你找不到一行有关于数据库事务的代码,这是因为它采用了Spring的declarative transaction机制,下面一段XML定义了SSOProvider的事物管理:
Declarative Transaction
<beans default-lazy-init="false" default-dependency-check="none"
default-autowire="no">
<!--
SSO Implementation
-->
<bean id="PersistenceBrokerSSOProvider"
class="org.apache.jetspeed.sso.impl.PersistenceBrokerSSOProvider"
init-method="init" abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<constructor-arg index="0">
<value>JETSPEED-INF/ojb/sso_repository.xml</value>
</constructor-arg>
</bean>
<bean id="org.apache.jetspeed.sso.SSOProvider" parent="baseTransactionProxy"
name="ssoProvider" abstract="false" singleton="true" lazy-init="default"
autowire="default" dependency-check="default">
<property name="proxyInterfaces">
<value>org.apache.jetspeed.sso.SSOProvider</value>
</property>
<property name="target">
<ref bean="PersistenceBrokerSSOProvider" />
</property>
<property name="transactionAttributes">
<props>
<prop key="addSite*">PROPAGATION_REQUIRED</prop>
<prop key="updateSite*">PROPAGATION_REQUIRED</prop>
<prop key="removeSite">PROPAGATION_REQUIRED</prop>
<prop key="addCredentialsForSite">PROPAGATION_REQUIRED</prop>
<prop key="updateCredentialsForSite">PROPAGATION_REQUIRED</prop>
<prop key="removeCredentialsForSite">PROPAGATION_REQUIRED</prop>
<prop key="setRealmForSite">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_SUPPORTS</prop>
</props>
</property>
</bean>
</beans>
|
由上图可知,通过Spring 的Declarative Transaction机制,Jetspeed很轻易实现了细颗粒度的事物管理,用户可以很容易配置需要管理事务的方法,如"addSite*"、 "updateSite*"和"removeSite"等等,其中"*"为通配符,详细信息见此处。
Spring MVC
由于Jetspeed对Spring的天生依赖,很自然Jetspeed也支持基于Spring MVC framework,详见Jetspeed自带的例子Portlet应用程序。
Jetspeed 组件架构启动过程
看了前面的介绍,你一定想知道Jetspeed是怎么样将基于Spring的组件架构和标准JEE Web Application架构融合在一起,本节将通过描述Jetspeed Web Application的启动过程来了解融合的细节。首先请看下图:
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页 1 2 34 5 6 7 8 下一页
上一篇:LVM 五分钟教程 下一篇:深入Linux PAM 体系结构
|