Alfresco 2.0 解读
一、介绍
Alfresco is the Open Source Alternative for Enterprise Content Management (ECM), providing Document Management, Collaboration, Records Management, Knowledge Management, Web Content Management and Imaging.
采用的技术
Java
Spring Aspect-Oriented Framework
ACEGI – Aspect-Oriented Security Framework
MyFaces JSF Implementation
Hibernate ORM Persistence
Lucene Text Search Engine
JLAN
POI File Format Conversion
PDFBox – PDF Conversion
OpenOffice
jBPM
Rhino JavaScript engine
支持的接口
CIFS/SMB Microsoft File Share Protocol
JSR-168 Portlet Specification
JSR-127 Java Server Faces
FTP
WebDAV
Web Services
REST
二、配置解读
1、从web.xml开始入手
其它的略过,在 web.xml 中可以看到加载了如下 Spring 配置文件
<
context-param
>
<
param-name
>
contextConfigLocation
</
param-name
>
<
param-value
>
classpath:alfresco/web-client-application-context.xml
classpath:web-services-application-context.xml
classpath:alfresco/web-api-application-context.xml
classpath:alfresco/application-context.xml
</
param-value
>
<
description
>
Spring config file locations
</
description
>
</
context-param
>
web client 层
alfresco/web-client-application-context.xml
打开它可以看到它引入了所有的
alfresco/web-client*.xml & alfresco/extension/web-client*.xml & jar:*!/META-INF/web-client*.xml
web api 层
alfresco/web-api-application-context.xml
打开它可以看到它引入了
alfresco/web-api-config.xml & alfresco/extension/web-api-config-custom.xml
web service 层
web-services-application-context.xml
刚开始找这个文件时,居然没有找到,怪事!not exist???why?
于是后来才发现这个文件是在 remote-api.jar 包里,晕,不是很好的做法啊。
bean 配置定义关键的文件
alfresco/application-context.xml
<
import
resource
="
classpath:alfresco/core-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/public-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/model-specific-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/action-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/rule-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/node-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/scheduled-jobs-context.xml
"
/>
<
import
resource
="
classpath:alfresco/network-protocol-context.xml
"
/>
<
import
resource
="
classpath:alfresco/content-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/hibernate-context.xml
"
/>
<
import
resource
="
classpath:alfresco/ownable-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/template-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/script-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/index-recovery-context.xml
"
/>
<
import
resource
="
classpath:alfresco/authority-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/authentication-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/policy-context.xml
"
/>
<
import
resource
="
classpath:alfresco/import-export-context.xml
"
/>
<
import
resource
="
classpath:alfresco/bootstrap-context.xml
"
/>
<
import
resource
="
classpath:alfresco/workflow-context.xml
"
/>
<
import
resource
="
classpath:alfresco/jcr-api-context.xml
"
/>
<
import
resource
="
classpath:alfresco/avm-services-context.xml
"
/>
<
import
resource
="
classpath:alfresco/audit-services-context.xml
"
/>
<
import
resource
="
classpath*:alfresco/patch/*-context.xml
"
/>
<
import
resource
="
classpath*:alfresco/domain/*-context.xml
"
/>
<!--
Import all modules and related components.
Extensions are explicitly imported after this so that the default
mechanism can still be used to override module-specific beans.
-->
<
import
resource
="
classpath*:alfresco/module-context.xml
"
/>
<!--
Import of general extensions and bean overrides.
To give developers final control over the tuning
of their own local build, the dev-context.xml file
is processed last (note: dev-context.xml isn't
part of the source tree itself).
For details, see:
http://wiki.alfresco.com/wiki/Developer_Runtime_Configuration
-->
<
import
resource
="
classpath*:alfresco/extension/*-context.xml
"/>
<
import
resource
="
classpath*:alfresco/extension/dev-context.xml
"
/>
可以看到分层次地进行加载不同的 bean ,并且在后面提供可扩展的 bean 定义的引入,方便进行扩展,而不需要更变这个配置文件
继续一个个往下看,并把一些重要的 bean 配置拿出来:
core-services-context.xml 核心 bean 的配置
看到配置了 JMX 的服务
<!--
Custom MBeanServer
-->
<
bean
id
="
alfrescoMBeanServer
"
class
="
org.springframework.jmx.support.MBeanServerFactoryBean
"/>
<
bean
id
="
registry
"
class
="
org.springframework.remoting.rmi.RmiRegistryFactoryBean
">
<
property
name
="
port
"
value
="
${avm.remote.port}
"/>
</
bean
>
<!--
MBeanServer Connector (registers itself with custom alfrescoMBeanServer)
-->
<
bean
id
="
serverConnector
"
class
="
org.springframework.jmx.support.ConnectorServerFactoryBean
"
depends-on
="
registry
">
<
property
name
="
server
"
ref
="
alfrescoMBeanServer
"/>
<
property
name
="
objectName
"
value
="
connector:name=rmi
"/>
<
property
name
="
serviceUrl
"
value
="
service:jmx:rmi://localhost/jndi/rmi://localhost:${avm.remote.port}/alfresco/jmxrmi
"
/>
<
property
name
="
environment
">
<
map
>
<!--
The following keys are only valid when sun jmx is used
-->
<
entry
key
="
jmx.remote.x.password.file
"
value
="
${alfresco.jmx.dir}/alfresco-jmxrmi.password
"/>
<
entry
key
="
jmx.remote.x.access.file
"
value
="
${alfresco.jmx.dir}/alfresco-jmxrmi.access
"/>
</
map
>
</
property
>
</
bean
>
<!--
MBeans registered with alfrescoMBeanServer
-->
<
bean
id
="
VirtServerRegistry
"
class
="
org.alfresco.mbeans.VirtServerRegistry
"
init-method
="
initialize
"
>
JMX
服务暴露
<
bean
id
="
exporter
"
class