AnsweredAssumed Answered

Invite to user gives failure - 500 Internal Server Error

Question asked by sandhya25186 on Jun 24, 2010
Latest reply on Aug 26, 2010 by michal
Hello,
I am logging in as admin, created a site, created a user with a valid email address, now inviting this user to the site but its giving me "0 invites sent, 1 failure!".
On debugging Ifound out that the service its calling i.e.
http://localhost:8080/share/proxy/alfresco/api/sites/ac/invitations is giving " 500 Internal Server Error"..

Is there any step that i am missing, like some configuration which needs to be done?

Here are my email configuration files ( modifications done according to http://lorenzod8n.wordpress.com/2008/02/04/alfresco-sending-mails-with-gmail/ ) :-
repository.properties :-

# Repository configuration

repository.name=Main Repository

# Directory configuration

dir.root=c:/alf_data

dir.contentstore=${dir.root}/contentstore
dir.contentstore.deleted=${dir.root}/contentstore.deleted

dir.auditcontentstore=${dir.root}/audit.contentstore

# The location for lucene index files
dir.indexes=${dir.root}/lucene-indexes

# The location for index backups
dir.indexes.backup=${dir.root}/backup-lucene-indexes

# The location for lucene index locks
dir.indexes.lock=${dir.indexes}/locks

# ######################################### #
# Index Recovery and Tracking Configuration #
# ######################################### #
#
# Recovery types are:
#    NONE:     Ignore
#    VALIDATE: Checks that the first and last transaction for each store is represented in the indexes
#    AUTO:     Validates and auto-recovers if validation fails
#    FULL:     Full index rebuild, processing all transactions in order.  The server is temporarily suspended.
index.recovery.mode=VALIDATE
# FULL recovery continues when encountering errors
index.recovery.stopOnError=false
index.recovery.maximumPoolSize=5
# Set the frequency with which the index tracking is triggered.
# For more information on index tracking in a cluster:
#    http://wiki.alfresco.com/wiki/High_Availability_Configuration_V1.4_to_V2.1#Version_1.4.5.2C_2.1.1_and_later
# By default, this is effectively never, but can be modified as required.
#    Examples:
#       Never:                   * * * * * ? 2099
#       Once every five seconds: 0/5 * * * * ?
#       Once every two seconds : 0/2 * * * * ?
#       See http://quartz.sourceforge.net/javadoc/org/quartz/CronTrigger.html
index.tracking.cronExpression=0/5 * * * * ?
index.tracking.adm.cronExpression=${index.tracking.cronExpression}
index.tracking.avm.cronExpression=${index.tracking.cronExpression}
# Other properties.
index.tracking.maxTxnDurationMinutes=10
index.tracking.reindexLagMs=1000
index.tracking.maxRecordSetSize=1000
index.tracking.maxTransactionsPerLuceneCommit=100
index.tracking.disableInTransactionIndexing=false
# Index tracking information of a certain age is cleaned out by a scheduled job.
# Any clustered system that has been offline for longer than this period will need to be seeded
# with a more recent backup of the Lucene indexes or the indexes will have to be fully rebuilt.
# Use -1 to disable purging.  This can be switched on at any stage.
index.tracking.minRecordPurgeAgeDays=30

# Change the failure behaviour of the configuration checker
system.bootstrap.config_check.strict=true

# The name of the cluster
#   Leave this empty to disable cluster entry
alfresco.cluster.name=

# The protocol stack to use from the JGroups configuration file
#   Use this property to select which communication method should be used.
#   The JGroups configuration file is build up using the protocol string
alfresco.jgroups.defaultProtocol=UDP
# The bind address and interface for JGroups to use; equivalent to -Djgroups.bind_addr and -Djgroups.bind_interface
alfresco.jgroups.bind_address=
alfresco.jgroups.bind_interface=
# JGroups configuration (http://www.jgroups.org)
# The location of the JGroups configuration file
alfresco.jgroups.configLocation=classpath:alfresco/jgroups/alfresco-jgroups-${alfresco.jgroups.defaultProtocol}.xml

#
# How long should shutdown wait to complete normally before
# taking stronger action and calling System.exit()
# in ms, 10,000 is 10 seconds
#
shutdown.backstop.timeout=10000
shutdown.backstop.enabled=false

# Server Single User Mode
# note:
#   only allow named user (note: if blank or not set then will allow all users)
#   assuming maxusers is not set to 0
#server.singleuseronly.name=admin

# Server Max Users - limit number of users with non-expired tickets
# note:
#   -1 allows any number of users, assuming not in single-user mode
#   0 prevents further logins, including the ability to enter single-user mode
server.maxusers=-1

# The Cron expression controlling the frequency with which the OpenOffice connection is tested
openOffice.test.cronExpression=0 * * * * ?

#
# Properties to limit resources spent on individual searches
#
# The maximum time spent pruning results
system.acl.maxPermissionCheckTimeMillis=10000
# The maximum number of results to perform permission checks against
system.acl.maxPermissionChecks=1000

#
# Manually control how the system handles maximum string lengths.
# Any zero or negative value is ignored.
# Only change this after consulting support or reading the appropriate Javadocs for
# org.alfresco.repo.domain.schema.SchemaBootstrap for V2.1.2
system.maximumStringLength=-1

#
# Limit hibernate session size by trying to amalgamate events for the L2 session invalidation
# - hibernate works as is up to this size
# - after the limit is hit events that can be grouped invalidate the L2 cache by type and not instance
# events may not group if there are post action listener registered (this is not the case with the default distribution)
system.hibernateMaxExecutions=20000

#
# Determine if document deletion and archival must cascade delete in the same
# transaction that triggers the operation.
system.cascadeDeleteInTransaction=true

#
# Determine if modification timestamp propagation from child to parent nodes is respected or not.
# Even if 'true', the functionality is only supported for child associations that declare the
# 'propagateTimestamps' element in the dictionary definition.
system.enableTimestampPropagation=false

#
# Decide if content should be removed from the system immediately after being orphaned.
# Do not change this unless you have examined the impact it has on your backup procedures.
system.content.eagerOrphanCleanup=false
# The number of days to keep orphaned content in the content stores.
#    This has no effect on the 'deleted' content stores, which are not automatically emptied.
system.content.orphanProtectDays=14
# The CRON expression to trigger the deletion of resources associated with orphaned content.
system.content.orphanCleanup.cronExpression=0 0 4 * * ?
# The CRON expression to trigger content URL conversion.  This process is not intesive and can
#    be triggered on a live system.  Similarly, it can be triggered using JMX on a dedicated machine.
system.content.contentUrlConverter.cronExpression=* * * * * ? 2099
system.content.contentUrlConverter.threadCount=2
system.content.contentUrlConverter.batchSize=500
system.content.contentUrlConverter.runAsScheduledJob=false

mail.host = smtp.gmail.com
mail.port = 465
mail.transport.protocol = smtp
mail.username = alfresco.lfn@gmail.com
mail.password= lfn.alfresco
mail.smtp.auth = true
mail.smtp.socketFactory.port = 465
mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback = false
mail.smtp.timeout = 25000
mail.smtp.starttls.enable = true

# #################### #
# Lucene configuration #
# #################### #
#
# Millisecond threshold for text transformations
# Slower transformers will force the text extraction to be asynchronous
#
lucene.maxAtomicTransformationTime=20
#
# The maximum number of clauses that are allowed in a lucene query
#
lucene.query.maxClauses=10000
#
# The size of the queue of nodes waiting for index
# Events are generated as nodes are changed, this is the maximum size of the queue used to coalesce event
# When this size is reached the lists of nodes will be indexed
#
# http://issues.alfresco.com/browse/AR-1280:  Setting this high is the workaround as of 1.4.3.
#
lucene.indexer.batchSize=1000000
#
# Index cache sizes
#
lucene.indexer.cacheEnabled=true
lucene.indexer.maxDocIdCacheSize=10000
lucene.indexer.maxDocumentCacheSize=100
lucene.indexer.maxIsCategoryCacheSize=-1
lucene.indexer.maxLinkAspectCacheSize=10000
lucene.indexer.maxParentCacheSize=10000
lucene.indexer.maxPathCacheSize=10000
lucene.indexer.maxTypeCacheSize=10000
#
# Properties for merge (not this does not affect the final index segment which will be optimised)
# Max merge docs only applies to the merge process not the resulting index which will be optimised.
#
lucene.indexer.mergerMaxMergeDocs=1000000
lucene.indexer.mergerMergeFactor=5
lucene.indexer.mergerMergeBlockingFactor=1
lucene.indexer.mergerMaxBufferedDocs=-1
lucene.indexer.mergerRamBufferSizeMb=16
#
# Properties for delta indexes (not this does not affect the final index segment which will be optimised)
# Max merge docs only applies to the index building process not the resulting index which will be optimised.
#
lucene.indexer.writerMaxMergeDocs=1000000
lucene.indexer.writerMergeFactor=5
lucene.indexer.writerMaxBufferedDocs=-1
lucene.indexer.writerRamBufferSizeMb=16
#
# Target number of indexes and deltas in the overall index and what index size to merge in memory
#
lucene.indexer.mergerTargetIndexCount=5
lucene.indexer.mergerTargetOverlayCount=5
lucene.indexer.mergerTargetOverlaysBlockingFactor=1
lucene.indexer.maxDocsForInMemoryMerge=10000
lucene.indexer.maxRamInMbForInMemoryMerge=16
lucene.indexer.maxDocsForInMemoryIndex=10000
lucene.indexer.maxRamInMbForInMemoryIndex=16
#
# Other lucene properties
#
lucene.indexer.termIndexInterval=128
lucene.indexer.useNioMemoryMapping=true
# over-ride to false for pre 3.0 behaviour
lucene.indexer.postSortDateTime=true
lucene.indexer.defaultMLIndexAnalysisMode=EXACT_LANGUAGE_AND_ALL
lucene.indexer.defaultMLSearchAnalysisMode=EXACT_LANGUAGE_AND_ALL
#
# The number of terms from a document that will be indexed
#
lucene.indexer.maxFieldLength=10000
#
# Index locks (mostly deprecated and will be tidied up with the next lucene upgrade)
#
lucene.write.lock.timeout=10000
lucene.commit.lock.timeout=100000
lucene.lock.poll.interval=100

# Database configuration
db.schema.stopAfterSchemaBootstrap=false
db.schema.update=true
db.schema.update.lockRetryCount=24
db.schema.update.lockRetryWaitSeconds=5
db.driver=org.gjt.mm.mysql.Driver
db.name=alfresco
db.url=jdbc:mysql:///${db.name}
db.username=alfresco
db.password=alfresco
db.pool.initial=10
db.pool.max=40
db.txn.isolation=-1
db.pool.statements.enable=true
db.pool.statements.max=40
db.pool.min=0
db.pool.idle=8
db.pool.wait.max=-1
db.pool.validate.query=
db.pool.evict.interval=-1
db.pool.evict.idle.min=1800000
db.pool.validate.borrow=true
db.pool.validate.return=false
db.pool.evict.validate=false
db.pool.abandoned.detect=false
db.pool.abandoned.time=300

# Audit configuration
audit.enabled=false
audit.repository.enabled=true
audit.cmischangelog.enabled=true
# Setting this flag to true will cause alfresco/auditConfig.xml to be ignored
# when audit is enabled. When false both alfresco/auditConfig.xml and
# alfresco/audit/*.xml will be used.
audit.useNewConfig=false

# System Configuration
system.store=system://system
system.descriptor.childname=sys:descriptor
system.descriptor.current.childname=sys:descriptor-current

# User config
alfresco_user_store.store=user://alfrescoUserStore
alfresco_user_store.system_container.childname=sys:system
alfresco_user_store.user_container.childname=sys:people

# note: default admin username - should not be changed after installation
alfresco_user_store.adminusername=admin

# Initial password - editing this will not have any effect once the repository is installed
alfresco_user_store.adminpassword=209c6174da490caeb422f3fa5a7ae634

# note: default guest username - should not be changed after installation
alfresco_user_store.guestusername=guest

# Spaces Archive Configuration
spaces.archive.store=archive://SpacesStore

# Spaces Configuration
spaces.store=workspace://SpacesStore
spaces.company_home.childname=app:company_home
spaces.guest_home.childname=app:guest_home
spaces.dictionary.childname=app:dictionary
spaces.templates.childname=app:space_templates
spaces.imapConfig.childname=app:imap_configs
spaces.imap_templates.childname=app:imap_templates
spaces.emailActions.childname=app:email_actions
spaces.searchAction.childname=cm:search
spaces.templates.content.childname=app:content_templates
spaces.templates.email.childname=app:email_templates
spaces.templates.email.invite1.childname=app:invite_email_templates
spaces.templates.email.notify.childname=app:notify_email_templates
spaces.templates.rss.childname=app:rss_templates
spaces.savedsearches.childname=app:saved_searches
spaces.scripts.childname=app:scripts
spaces.wcm.childname=app:wcm
spaces.wcm_content_forms.childname=app:wcm_forms
spaces.content_forms.childname=app:forms
spaces.user_homes.childname=app:user_homes
spaces.sites.childname=st:sites
spaces.templates.email.invite.childname=cm:invite
spaces.rendition.rendering_actions.childname=app:rendering_actions
spaces.wcm_deployed.childname=cm:wcm_deployed
spaces.transfers.childname=app:transfers
spaces.transfer_groups.childname=app:transfer_groups
spaces.transfer_temp.childname=app:temp
spaces.inbound_transfer_records.childname=app:inbound_transfer_records
spaces.outbound_transfer_records.childname=app:outbound_transfer_records

# ADM VersionStore Configuration
version.store.deprecated.lightWeightVersionStore=workspace://lightWeightVersionStore
version.store.version2Store=workspace://version2Store
# WARNING: For non-production testing only !!! Do not change (to avoid version store issues, including possible mismatch). Should be false since lightWeightVersionStore is deprecated.
version.store.onlyUseDeprecatedV1=false

# Folders for storing people
system.system_container.childname=sys:system
system.people_container.childname=sys:people
system.authorities_container.childname=sys:authorities
system.zones_container.childname=sys:zones

# Folders for storing workflow related info
system.workflow_container.childname=sys:workflow

# Are user names case sensitive?
user.name.caseSensitive=false
domain.name.caseSensitive=false
domain.separator=

# AVM Specific properties.
avm.remote.idlestream.timeout=30000


#Format caption extracted from the XML Schema.
xforms.formatCaption=true

# ################################## #
# WCM Link Validation Configuration  #
# ################################## #
#
# Note: Link Validation is disabled by default (as per poll interval = 0)
#
# linkvalidation.pollInterval  - Poll interval to check getLatestSnapshotID (in milliseconds), eg. 5000 for 5 sec interval
#                           If pollInterval is 0, link validation is disabled.
#
# linkvalidation.retryInterval - Retry interval (Virtualization server is not accessible or an error has occurred
#                          during link validation.
#
# linkvalidation.disableOnFail - If set to TRUE link validation service will be terminated if an error will be occurred.

linkvalidation.pollInterval=0
linkvalidation.retryInterval=120000
linkvalidation.disableOnFail=false

# ECM content usages/quotas
system.usages.enabled=true

# Repository endpoint - used by Activity Service
repo.remote.url=http://localhost:8080/alfresco
repo.remote.endpoint=/service

# Create home folders as people are created (true) or create them lazily (false)
home.folder.creation.eager=true

# The well known RMI registry port is defined in the alfresco-shared.properties file
# host will need to be changed from localhost to make the services available to other
# computers.
#
# alfresco.rmi.services.port=50500
# alfresco.rmi.services.host=localhost
#
# RMI service ports for the individual services.
# These eight services are available remotely.
#
# Assign individual ports for each service for best performance
# or run several services on the same port, you can even run everything on 50500 if
# running through a firewall.
#
# Specify 0 to use a random unused port.
#
avm.rmi.service.port=50501
avmsync.rmi.service.port=50502
attribute.rmi.service.port=50503
authentication.rmi.service.port=50504
repo.rmi.service.port=50505
action.rmi.service.port=50506
deployment.rmi.service.port=50507
monitor.rmi.service.port=50508


# Should the Mbean server bind to an existing  server.   Set to true for most application servers.
# false for WebSphere clusters.
mbean.server.locateExistingServerIfPossible=true

# External executable locations
ooo.exe=soffice
ooo.user=${dir.root}/oouser
img.root=./ImageMagick
img.dyn=${img.root}/lib
img.exe=${img.root}/bin/convert
swf.exe=./bin/pdf2swf

# Property to enable upgrade from 2.1-A
V2.1-A.fixes.to.schema=0
#V2.1-A.fixes.to.schema=82

# The default authentication chain
authentication.chain=alfrescoNtlm1:alfrescoNtlm

# Default NFS user mappings
nfs.user.mappings=admin
nfs.user.mappings.default.uid=0
nfs.user.mappings.default.gid=0

# IMAP
imap.server.enabled=false
imap.server.port=143
imap.server.attachments.extraction.enabled=true

# Default IMAP mount points
imap.config.home.store=${spaces.store}
imap.config.home.rootPath=/${spaces.company_home.childname}
imap.config.home.folderPath=Imap Home
imap.config.server.mountPoints=AlfrescoIMAP
imap.config.server.mountPoints.default.mountPointName=IMAP
imap.config.server.mountPoints.default.modeName=ARCHIVE
imap.config.server.mountPoints.default.store=${spaces.store}
imap.config.server.mountPoints.default.rootPath=/${spaces.company_home.childname}
imap.config.server.mountPoints.value.AlfrescoIMAP.mountPointName=Alfresco IMAP
imap.config.server.mountPoints.value.AlfrescoIMAP.modeName=MIXED

# Activity feed max size and max age (eg. 44640 mins = 31 days)
activities.feed.max.size=100
activities.feed.max.age.mins=44640

# Subsystem unit test values. Will not have any effect on production servers
subsystems.test.beanProp.default.longProperty=123456789123456789
subsystems.test.beanProp.default.anotherStringProperty=Global Default
subsystems.test.beanProp=inst1,inst2,inst3
subsystems.test.beanProp.value.inst2.boolProperty=true
subsystems.test.beanProp.value.inst3.anotherStringProperty=Global Instance Default
subsystems.test.simpleProp2=true
subsystems.test.simpleProp3=Global Default3

# Deployment Service
deployment.service.numberOfSendingThreads=5
deployment.service.corePoolSize=2
deployment.service.maximumPoolSize=3

# Transfer Service
transferservice.receiver.enabled=true
transferservice.receiver.stagingDir=${java.io.tmpdir}/alfresco-transfer-staging

and core-services-context.xml :-
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<!– Core and miscellaneous bean definitions –>
<beans>

    <!–                    –>
    <!–  PERSISTENCE       –>
    <!–                    –>

    <!– Load runtime-dependent properties (e.g.: alfresco.jmx.dir).     –>
    <!– Note:  This bean relies on PropertyPlaceholderConfigurer (should be ordered before "shared-properties") –>
    <bean id="runtimeProperties"  class="org.alfresco.util.RuntimeSystemPropertiesSetter">
        <property name="order">
            <value>5</value>
        </property>
    </bean>
   
    <!– Ensure backward compatibility with installations that control custom properties through repository-properties –>
    <bean id="legacyConfigPostProcessor" class="org.alfresco.repo.management.subsystems.LegacyConfigPostProcessor"/>
   
    <!– Global properties used in property expansion throughout the container, overridable via JNDI or System properties –>
    <bean id="global-properties" class="org.alfresco.config.JndiPropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:alfresco/repository.properties</value>
                <value>classpath:alfresco/domain/transaction.properties</value>
                <!– <value>classpath:alfresco/jndi.properties</value> –>
                <!–  Overrides supplied by modules –>
                <value>classpath*:alfresco/module/*/alfresco-global.properties</value>
                <!–  Installer or user-provided defaults –>
                <value>classpath*:alfresco-global.properties</value>
            </list>
        </property>
        <property name="systemPropertiesModeName">
            <value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value>
        </property>
        <!– Extra properties that have no defaults that we allow to be defined through JNDI or System properties –>
        <property name="systemProperties">
            <list>
                <value>hibernate.dialect</value>
                <value>hibernate.query.substitutions</value>
                <value>hibernate.jdbc.use_get_generated_keys</value>
                <value>hibernate.default_schema</value>
            </list>
        </property>
    </bean>

    <!– Expand global properties and version information in bean definitions –>
    <bean id="repository-properties"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <!–  Non-overridable version information –>
                <value>classpath:alfresco/version.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders">
            <value>true</value>
        </property>
        <property name="properties">
            <ref bean="global-properties"/>
        </property>
        <!–  Do not allow version information to be overriden –>
        <property name="localOverride">
            <value>false</value>
        </property>
        <property name="systemPropertiesModeName">
            <value>SYSTEM_PROPERTIES_MODE_NEVER</value>
        </property>
    </bean>


    <!– Load properties that must be shared between the        –>
    <!– Alfresco server and its remote clients.                –>
    <!–                                                        –>
    <!– Note:  This is done in a separate bean to make it      –>
    <!–        for users who have already overridden their     –>
    <!–        "repository-properties" in a dev-context.xml    –>
    <!–        or custom-db-and-data-context.xml file.         –>

    <bean id="shared-properties"
          class="org.alfresco.config.JndiPropertyPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders">
            <value>true</value>
        </property>
        <property name="locations">
            <list>
                <value>classpath:alfresco/alfresco-shared.properties</value>
            </list>
        </property>
        <property name="order">
            <value>10</value>
        </property>
    </bean>
   
    <bean id="jgroupsPropertySetter" class="org.alfresco.config.SystemPropertiesSetterBean" init-method="init">
        <property name="propertyMap">
            <map>
                <entry key="jgroups.bind_addr">
                    <value>${alfresco.jgroups.bind_address}</value>
                </entry>
                <entry key="jgroups.bind_interface">
                    <value>${alfresco.jgroups.bind_interface}</value>
                </entry>
                <entry key="alfresco.tcp.start_port">
                    <value>${alfresco.tcp.start_port}</value>
                </entry>
                <entry key="alfresco.tcp.initial_hosts">
                    <value>${alfresco.tcp.initial_hosts}</value>
                </entry>
                <entry key="alfresco.tcp.port_range">
                    <value>${alfresco.tcp.port_range}</value>
                </entry>
                <entry key="alfresco.udp.mcast_addr">
                    <value>${alfresco.udp.mcast_addr}</value>
                </entry>
                <entry key="alfresco.udp.mcast_port">
                    <value>${alfresco.udp.mcast_port}</value>
                </entry>
            </map>
        </property>
    </bean>

    <!– Custom MBeanServer –>
    <bean id="alfrescoMBeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
        <property name="locateExistingServerIfPossible" value="${mbean.server.locateExistingServerIfPossible}" />
    </bean>

    <!– 
        The local in process RMI registry which will be bound to the address in
        java.rmi.server.hostname
    –>
   
    <bean id="registry"
          class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"
          lazy-init="true">
        <property name="port" value="${alfresco.rmi.services.port}"/>
    </bean>

    <!– MBeanServer Connector (registers itself with custom alfrescoMBeanServer) –>
    <bean id="serverConnector"
          class="org.springframework.jmx.support.ConnectorServerFactoryBean"
          depends-on="registry"
          lazy-init="true">

        <property name="server"      ref="alfrescoMBeanServer"/>
        <property name="objectName"  value="connector:name=rmi"/>
        <property name="serviceUrl"  value="service:jmx:rmi://${alfresco.rmi.services.host}:${monitor.rmi.service.port}/jndi/rmi://${alfresco.rmi.services.host}:${alfresco.rmi.services.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>

    <bean id="propertyBackedBeanRegistry" class="org.alfresco.repo.management.subsystems.DefaultPropertyBackedBeanRegistry"/>

    <bean id="abstractPropertyBackedBean" class="org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean"
        abstract="true">
        <property name="registry">
            <ref local="propertyBackedBeanRegistry" />
        </property>
        <!– Ensure that child application contexts propagate global default values –>
        <property name="propertyDefaults">
            <ref local="global-properties" />
        </property>
    </bean>

    <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
       <property name="server" ref="alfrescoMBeanServer"/>
       <property name="beans">
         <map>
           <!–  Used by Alfresco WCM Virtualisation server –>
           <entry key="Alfresco:Name=VirtServerRegistry,Type=VirtServerRegistry" value-ref="VirtServerRegistry"/>
         </map>
       </property>
       <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>      
    </bean>

    <!– MBeans registered with alfrescoMBeanServer –>
    <bean id="VirtServerRegistry"
          class="org.alfresco.mbeans.VirtServerRegistry"
          init-method="initialize" >

        <!– Authentication info to contact remote virtualization server  –>
        <!– NOTE:                                                        –>
        <!–    On the machine hosting the virtualization server,         –>
        <!–    $VIRTUAL_TOMCAT_HOME/conf/alfresco-jmxrmi.password and    –>
        <!–    $VIRTUAL_TOMCAT_HOME/conf/alfresco-jmxrmi.access          –>
        <!–    should have the same data as the corresponding files      –>
        <!–    contained here within the Alfresco webapp server.         –>
        <!–    By default, they do; however, if you change the password  –>
        <!–    file on one server, be sure to change it on the other.    –>
        <!–                                                              –>
        <!– WARNING:                                                     –>
        <!–    For security, be certain that *only* the uid under which  –>
        <!–    the servers run have read access to the password files    –>
        <!–    (e.g.:  under Unix, chmod them to "400").                 –>

        <property name="passwordFile"
                  value="${alfresco.jmx.dir}/alfresco-jmxrmi.password"/>

        <property name="accessFile"
                  value="${alfresco.jmx.dir}/alfresco-jmxrmi.access"/>
    </bean>

    <!–
         http://wiki.alfresco.com/wiki/Developing_an_Alfresco_Module#log4j.properties
    –>
    <bean id="log4JHierarchyInit" class="org.alfresco.repo.admin.Log4JHierarchyInit" init-method="init">
        <property name="extraLog4jUrls">
            <list>
                <!– NOTE: value entries are listed from lowest precedence to highest.  –>

                <!–  Installed  AMP modules  –>
                <value>classpath*:alfresco/module/*/log4j.properties</value>

                <!–  Other installed extensions  –>
                <value>classpath*:alfresco/extension/*-log4j.properties</value>

                <!–  private developer overrides –>
                <value>classpath*:alfresco/extension/dev-log4j.properties</value>
            </list>
        </property>
    </bean>


    <bean id="RepoServerMgmt" class="org.alfresco.repo.admin.RepoServerMgmt">
        <property name="transactionService"><ref bean="transactionService"/></property>
        <property name="authenticationService"><ref bean="authenticationService"/></property>
    </bean>


    <!– Datasource bean –>
    <bean id="defaultDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName">
            <value>${db.driver}</value>
        </property>
        <property name="url">
            <value>${db.url}</value>
        </property>
        <property name="username">
            <value>${db.username}</value>
        </property>
        <property name="password">
            <value>${db.password}</value>
        </property>
        <property name="initialSize" >
            <value>${db.pool.initial}</value>
        </property>
        <property name="maxActive" >
            <value>${db.pool.max}</value>
        </property>
        <property name="minIdle" >
            <value>${db.pool.min}</value>
        </property>
        <property name="maxIdle" >
            <value>${db.pool.idle}</value>
        </property>
        <property name="defaultAutoCommit" >
            <value>false</value>
        </property>
        <property name="defaultTransactionIsolation" >
            <value>${db.txn.isolation}</value>
        </property>
        <property name="maxWait" >
            <value>${db.pool.wait.max}</value>
        </property>
        <property name="validationQuery" >
            <value>${db.pool.validate.query}</value>
        </property>
        <property name="timeBetweenEvictionRunsMillis" >
            <value>${db.pool.evict.interval}</value>
        </property>
        <property name="minEvictableIdleTimeMillis" >
            <value>${db.pool.evict.idle.min}</value>
        </property>
        <property name="testOnBorrow" >
            <value>${db.pool.validate.borrow}</value>
        </property>
        <property name="testOnReturn" >
            <value>${db.pool.validate.return}</value>
        </property>
        <property name="testWhileIdle" >
            <value>${db.pool.evict.validate}</value>
        </property>
        <property name="removeAbandoned" >
            <value>${db.pool.abandoned.detect}</value>
        </property>
        <property name="removeAbandonedTimeout" >
            <value>${db.pool.abandoned.time}</value>
        </property>
        <property name="poolPreparedStatements" >
            <value>${db.pool.statements.enable}</value>
        </property>
        <property name="maxOpenPreparedStatements" >
            <value>${db.pool.statements.max}</value>
        </property>
    </bean>

    <bean id="dataSource" class="org.alfresco.config.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>java:comp/env/jdbc/dataSource</value>
        </property>
        <property name="defaultObject">
            <ref bean="defaultDataSource" />
        </property>
    </bean>

    <!– transaction service –>
    <alias name="transactionService" alias="transactionComponent"/>
    <bean id="transactionService" class="org.alfresco.repo.transaction.TransactionServiceImpl">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="authenticationContext">
            <ref bean="authenticationContext" />
        </property>
        <property name="sysAdminParams">
            <ref bean="sysAdminParams"/>
        </property>
        <property name="allowWrite">
            <value>${server.transaction.allow-writes}</value>
        </property>
        <property name="maxRetries">
            <value>${server.transaction.max-retries}</value>
        </property>
        <property name="minRetryWaitMs">
            <value>${server.transaction.min-retry-wait-ms}</value>
        </property>
        <property name="maxRetryWaitMs">
            <value>${server.transaction.max-retry-wait-ms}</value>
        </property>
        <property name="retryWaitIncrementMs">
            <value>${server.transaction.wait-increment-ms}</value>
        </property>
    </bean>

    <bean id="retryingTransactionHelper" class="org.alfresco.repo.transaction.RetryingTransactionHelper">
        <property name="transactionService">
            <ref bean="transactionService"/>
        </property>
        <property name="maxRetries">
            <value>${server.transaction.max-retries}</value>
        </property>
        <property name="minRetryWaitMs">
            <value>${server.transaction.min-retry-wait-ms}</value>
        </property>
        <property name="maxRetryWaitMs">
            <value>${server.transaction.max-retry-wait-ms}</value>
        </property>
        <property name="retryWaitIncrementMs">
            <value>${server.transaction.wait-increment-ms}</value>
        </property>
    </bean>

    <bean id="retryingWriteTxnAdvice" class="org.alfresco.repo.transaction.RetryingTransactionAdvice">
        <property name="txnHelper">
            <ref bean="retryingTransactionHelper"/>
        </property>
        <property name="readOnly">
            <value>false</value>
        </property>
        <property name="requiresNew">
            <value>false</value>
        </property>
    </bean>

    <bean id="retryingReadTxnAdvice" class="org.alfresco.repo.transaction.RetryingTransactionAdvice">
        <property name="txnHelper">
            <ref bean="retryingTransactionHelper"/>
        </property>
        <property name="readOnly">
            <value>true</value>
        </property>
        <property name="requiresNew">
            <value>false</value>
        </property>
    </bean>

    <bean id="checkTxnAdvice" class="org.alfresco.repo.transaction.CheckTransactionAdvice" />

    <!–                        –>
    <!– I18N                   –>
    <!–                        –>

    <bean id="resourceBundles" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
        <property name="resourceBundles">
            <list>
                <value>alfresco.messages.system-messages</value>
                <value>alfresco.messages.module-messages</value>
                <value>alfresco.messages.dictionary-messages</value>
                <value>alfresco.messages.version-service</value>
                <value>alfresco.messages.permissions-service</value>
                <value>alfresco.messages.content-service</value>
                <value>alfresco.messages.coci-service</value>
                <value>alfresco.messages.discussion-messages</value>
                <value>alfresco.messages.template-service</value>
                <value>alfresco.messages.templates-messages</value>
                <value>alfresco.messages.lock-service</value>
                <value>alfresco.messages.patch-service</value>
                <value>alfresco.messages.period-provider</value>
                <value>alfresco.messages.schema-update</value>
                <value>alfresco.messages.webdav-messages</value>
                <value>alfresco.messages.copy-service</value>
                <value>alfresco.messages.avm-messages</value>
                <value>alfresco.messages.linkvalidation-messages</value>
                <value>alfresco.messages.content-filter-languages</value>
                <value>alfresco.messages.jbpm-engine-messages</value>
            </list>
        </property>
    </bean>
   
    <!– Repo-based Message Service (based on Core I18NUtil) –>
   
    <bean id="messageService" class="org.alfresco.repo.i18n.MessageServiceImpl">
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="searchService">
            <ref bean="SearchService"/>
        </property>
        <property name="namespaceService">
            <ref bean="namespaceService"/>
        </property>
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <property name="contentService">
            <ref bean="ContentService"/>
        </property>
        <property name="resourceBundleBaseNamesCache">
            <ref bean="resourceBundleBaseNamesCache"/>
        </property>
        <property name="loadedResourceBundlesCache">
            <ref bean="loadedResourceBundlesCache"/>
        </property>
         <property name="messagesCache">
             <ref bean="messagesCache"/>
        </property>
    </bean>


    <!–                        –>
    <!– Property Component      –>
    <!–                         –>
   
    <bean id="propertyValueComponent" class="org.alfresco.repo.props.PropertyValueComponentImpl" init-method="init">
        <property name="propertyValueDAO" ref="propertyValueDAO"/>
    </bean>

    <!–                         –>
    <!– Indexing and Search API –>
    <!–                         –>

    <bean id="indexerComponent" class="org.alfresco.repo.search.IndexerComponent">
        <property name="storeRedirectorProxyFactory">
            <ref bean="&amp;indexerAndSearcherFactory" />
        </property>
<!–
        <property name="indexerAndSearcherFactory">
            <ref bean="indexerAndSearcherFactory" />
        </property>
   –>
    </bean>

    <bean id="searchService" class="org.alfresco.repo.search.SearcherComponent">
        <property name="indexerAndSearcherFactory">
            <ref bean="indexerAndSearcherFactory" />
        </property>
    </bean>

    <bean id="admSearchService" class="org.alfresco.repo.search.SearcherComponent">
        <property name="indexerAndSearcherFactory">
            <ref bean="admLuceneIndexerAndSearcherFactory" />
        </property>
    </bean>
   
    <bean id="versionSearchService" class="org.alfresco.repo.search.SearcherComponent">
        <property name="indexerAndSearcherFactory">
            <ref bean="admLuceneUnIndexedIndexerAndSearcherFactory" />
        </property>
    </bean>


    <!–                                                                               –>
    <!– Generic factory for making indexers and searchers for a given protol or store –>
    <!–                                                                               –>
    <bean id="indexerAndSearcherFactory" class="org.alfresco.repo.service.StoreRedirectorProxyFactory">
        <property name="proxyInterface">
            <value>org.alfresco.repo.search.impl.lucene.LuceneIndexerAndSearcher</value>
        </property>
        <property name="defaultBinding">
            <ref bean="admLuceneIndexerAndSearcherFactory"></ref>
        </property>
        <property name="redirectedProtocolBindings">
            <map>
                <entry key="workspace">
                    <ref bean="admLuceneIndexerAndSearcherFactory"></ref>
                </entry>
                <entry key="avm">
                    <ref bean="avmLuceneIndexerAndSearcherFactory"></ref>
                </entry>
            </map>
        </property>
        <property name="redirectedStoreBindings">
            <map>
                <entry key="workspace://lightWeightVersionStore">
                    <ref bean="admLuceneUnIndexedIndexerAndSearcherFactory"></ref>
                </entry>
                <entry key="workspace://version2Store">
                    <ref bean="admLuceneUnIndexedIndexerAndSearcherFactory"></ref>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="categoryService" class="org.alfresco.repo.service.StoreRedirectorProxyFactory">
        <property name="proxyInterface">
            <value>org.alfresco.service.cmr.search.CategoryService</value>
        </property>
        <property name="defaultBinding">
            <ref bean="luceneCategoryService"></ref>
        </property>
        <property name="redirectedProtocolBindings">
            <map>
                <entry key="workspace">
                    <ref bean="luceneCategoryService"></ref>
                </entry>
                <entry key="versionStore">
                    <ref bean="luceneCategoryService"></ref>
                </entry>
                <entry key="avm">
                    <ref bean="luceneCategoryService"></ref>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="indexThreadPoolExecutor" class="org.alfresco.util.ThreadPoolExecutorFactoryBean">
        <property name="poolName">
            <value>indexThread</value>
        </property>
        <property name="corePoolSize">
            <value>10</value>
        </property>
        <property name="maximumPoolSize">
            <value>20</value>
        </property>
        <property name="threadPriority">
            <value>5</value>
        </property>
    </bean>

   
   <bean id="lucene.fts.alfresco" class="org.alfresco.repo.search.impl.lucene.LuceneAlfrescoFtsQueryLanguage" >
        <property name="queryEngine">
            <ref bean="adm.luceneQueryEngineImpl" />
        </property>
       <property name="factories">
         <list>
             <ref bean="admLuceneIndexerAndSearcherFactory" />   
            <ref bean="admLuceneUnIndexedIndexerAndSearcherFactory" />   
            <ref bean="avmLuceneIndexerAndSearcherFactory" />   
         </list>
        </property>
    </bean>

    <bean id="abstractLuceneIndexerAndSearcherFactory" abstract="true">
        <property name="indexRootLocation">
            <value>${dir.indexes}</value>
        </property>
        <property name="lockDirectory">
            <value>${dir.indexes.lock}</value>
        </property>
        <property name="maxAtomicTransformationTime">
            <value>${lucene.maxAtomicTransformationTime}</value>  <!– milliseconds allowed for inline text transformation –>
        </property>
        <property name="queryMaxClauses">
            <value>${lucene.query.maxClauses}</value>
        </property>
        <property name="indexerBatchSize">
            <value>${lucene.indexer.batchSize}</value>
        </property>
        <!– cache –>
        <property name="cacheEnabled">
            <value>${lucene.indexer.cacheEnabled}</value>
        </property>
        <property name="maxDocIdCacheSize">
            <value>${lucene.indexer.maxDocIdCacheSize}</value>
        </property>
        <property name="maxDocumentCacheSize">
            <value>${lucene.indexer.maxDocumentCacheSize}</value>
        </property>
        <property name="maxIsCategoryCacheSize">
            <value>${lucene.indexer.maxIsCategoryCacheSize}</value>
        </property>
        <property name="maxLinkAspectCacheSize">
            <value>${lucene.indexer.maxLinkAspectCacheSize}</value>
        </property>
        <property name="maxParentCacheSize">
            <value>${lucene.indexer.maxParentCacheSize}</value>
        </property>
        <property name="maxPathCacheSize">
            <value>${lucene.indexer.maxPathCacheSize}</value>
        </property>
        <property name="maxTypeCacheSize">
            <value>${lucene.indexer.maxTypeCacheSize}</value>
        </property>
        <!– merge indexers –>
        <property name="mergerMaxMergeDocs">
            <value>${lucene.indexer.mergerMaxMergeDocs}</value>
        </property>
        <property name="mergerMergeFactor">
            <value>${lucene.indexer.mergerMergeFactor}</value>
        </property>
        <property name="mergerMergeBlockingFactor">
            <value>${lucene.indexer.mergerMergeBlockingFactor}</value>
        </property>
        <property name="mergerMaxBufferedDocs">
            <value>${lucene.indexer.mergerMaxBufferedDocs}</value>
        </property>
        <property name="mergerRamBufferSizeMb">
            <value>${lucene.indexer.mergerRamBufferSizeMb}</value>
        </property>
        <!– delta indexers –>
        <property name="writerMaxMergeDocs">
            <value>${lucene.indexer.writerMaxMergeDocs}</value>
        </property>
        <property name="writerMergeFactor">
            <value>${lucene.indexer.writerMergeFactor}</value>
        </property>
        <property name="writerMaxBufferedDocs">
            <value>${lucene.indexer.writerMaxBufferedDocs}</value>
        </property>
        <property name="writerRamBufferSizeMb">
            <value>${lucene.indexer.writerRamBufferSizeMb}</value>
        </property>
        <!– target –>
        <property name="mergerTargetIndexCount">
            <value>${lucene.indexer.mergerTargetIndexCount}</value>
        </property>
        <property name="mergerTargetOverlayCount">
            <value>${lucene.indexer.mergerTargetOverlayCount}</value>
        </property>
        <property name="mergerTargetOverlaysBlockingFactor">
            <value>${lucene.indexer.mergerTargetOverlaysBlockingFactor}</value>
        </property>
        <property name="maxDocsForInMemoryMerge">
            <value>${lucene.indexer.maxDocsForInMemoryMerge}</value>
        </property>
        <property name="maxRamInMbForInMemoryMerge">
            <value>${lucene.indexer.maxRamInMbForInMemoryMerge}</value>
        </property>
        <property name="maxDocsForInMemoryIndex">
            <value>${lucene.indexer.maxDocsForInMemoryIndex}</value>
        </property>
        <property name="maxRamInMbForInMemoryIndex">
            <value>${lucene.indexer.maxRamInMbForInMemoryIndex}</value>
        </property>
        <!– other –>   
        <property name="termIndexInterval">
            <value>${lucene.indexer.termIndexInterval}</value>
        </property>
        <property name="useNioMemoryMapping">
            <value>${lucene.indexer.useNioMemoryMapping}</value>
        </property>
        <property name="postSortDateTime">
            <value>${lucene.indexer.postSortDateTime}</value>
        </property>
        <property name="defaultMLIndexAnalysisMode">
            <value>${lucene.indexer.defaultMLIndexAnalysisMode}</value>
        </property>
        <property name="defaultMLSearchAnalysisMode">
            <value>${lucene.indexer.defaultMLSearchAnalysisMode}</value>
        </property>
        <property name="indexerMaxFieldLength">
            <value>${lucene.indexer.maxFieldLength}</value>
        </property>
        <property name="writeLockTimeout">
            <value>${lucene.write.lock.timeout}</value>
        </property>
        <property name="commitLockTimeout">
            <value>${lucene.commit.lock.timeout}</value>
        </property>
        <property name="lockPollInterval">
            <value>${lucene.lock.poll.interval}</value>
        </property>
    </bean>
   
    <!– Indexer and searchers for lucene –>
    <bean id="admLuceneIndexerAndSearcherFactory"
        parent="abstractLuceneIndexerAndSearcherFactory"
        class="org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerAndSearcherFactory">
        <property name="nodeService">
            <ref bean="mlAwareNodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="nameSpaceService">
            <ref bean="namespaceService" />
        </property>
        <property name="contentService">
            <ref bean="contentService" />
        </property>
        <property name="queryRegister">
            <ref bean="queryRegisterComponent" />
        </property>
        <property name="threadPoolExecutor">
            <ref bean="indexThreadPoolExecutor"></ref>
        </property>
        <property name="bulkLoader">
            <ref bean="nodeDaoServiceImpl"></ref>
        </property>
    </bean>
   
    <bean id="adm.luceneQueryEngineImpl" class="org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryEngine" >
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="indexAndSearcher">
            <ref bean="admLuceneIndexerAndSearcherFactory" />
        </property>
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService" />
        </property>
        <property name="namespaceService">
            <ref bean="namespaceService" />
        </property>
    </bean>
   
     <!– Indexer and searchers for lucene –>
    <bean id="admLuceneUnIndexedIndexerAndSearcherFactory"
        parent="abstractLuceneIndexerAndSearcherFactory"
        class="org.alfresco.repo.search.impl.lucene.ADMLuceneUnIndexedIndexAndSearcherFactory">
        <property name="nodeService">
            <ref bean="mlAwareNodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="nameSpaceService">
            <ref bean="namespaceService" />
        </property>
        <property name="contentService">
            <ref bean="contentService" />
        </property>
        <property name="queryRegister">
            <ref bean="queryRegisterComponent" />
        </property>
        <property name="threadPoolExecutor">
            <ref bean="indexThreadPoolExecutor"></ref>
        </property>
    </bean>

    <!– Indexer and searchers for lucene –>
    <bean id="avmLuceneIndexerAndSearcherFactory"
        parent="abstractLuceneIndexerAndSearcherFactory"
        class="org.alfresco.repo.search.impl.lucene.AVMLuceneIndexerAndSearcherFactory">
        <property name="nodeService">
            <ref bean="mlAwareNodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="nameSpaceService">
            <ref bean="namespaceService" />
        </property>
        <property name="contentService">
            <ref bean="contentService" />
        </property>
        <property name="contentStore">
            <ref bean="fileContentStore"/>
        </property>
        <property name="avmService">
            <ref bean="avmService" />
        </property>
        <property name="avmSyncService">
            <ref bean="avmSyncService" />
        </property>
        <property name="queryRegister">
            <ref bean="queryRegisterComponent" />
        </property>
        <property name="threadPoolExecutor">
            <ref bean="indexThreadPoolExecutor"></ref>
        </property>
    </bean>

   <bean id="avm.luceneQueryEngineImpl" class="org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryEngine" >
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="indexAndSearcher">
            <ref bean="avmLuceneIndexerAndSearcherFactory" />
        </property>
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService" />
        </property>
        <property name="namespaceService">
            <ref bean="namespaceService" />
        </property>
    </bean>

    <!– Indexer and searchers for lucene –>
    <bean id="luceneCategoryService" class="org.alfresco.repo.search.impl.lucene.LuceneCategoryServiceImpl">
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="publicNodeService">
            <ref bean="NodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="namespacePrefixResolver">
            <ref bean="namespaceService" />
        </property>
        <property name="indexerAndSearcher">
            <ref bean="indexerAndSearcherFactory" />
        </property>
    </bean>

    <!–                               –>
    <!–  Lock Service           –>
    <!–                               –>

    <bean id="lockService" class="org.alfresco.repo.lock.LockServiceImpl" init-method="init">
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="tenantService">
            <ref bean="tenantService" />
        </property>       
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="authenticationService">
            <ref bean="authenticationService"></ref>
        </property>
        <property name="ownableService">
            <ref bean="ownableService"></ref>
        </property>
        <property name="searchService">
            <ref bean="admSearchService"></ref>
        </property>
    </bean>

    <!–                               –>
    <!–  Version Service   –>
    <!–                               –>


    <bean id="versionService" class="org.alfresco.repo.version.Version2ServiceImpl" init-method="initialise">
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <property name="dbNodeService">
            <ref bean="mtAwareNodeService" />
        </property>
        <property name="searcher">
            <ref bean="versionSearchService" />
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="policyBehaviourFilter">
            <ref bean="policyBehaviourFilter" />
        </property>
        <property name="permissionService">
            <ref bean="permissionService" />
        </property>
        <property name="onlyUseDeprecatedV1">
            <value>${version.store.onlyUseDeprecatedV1}</value>
        </property>
    </bean>

    <bean id="versionNodeService" class="org.alfresco.repo.version.Node2ServiceImpl">
        <property name="contentDataDAO">
            <ref bean="contentDataDAO" />
        </property>
        <property name="dbNodeService">
            <ref bean="mtAwareNodeService" />
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
    </bean>

    <bean id="serialVersionLabelPolicy" class="org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy" >
    </bean>
   
    <bean id="registerContentWithVersionService" class="org.alfresco.repo.version.VersionServiceVersionLabelRegistrationBean" init-method="register">
       <property name="versionService">
            <ref bean="versionService" />
        </property>
        <property name="namespacePrefixResolver">
            <ref bean="namespaceService" />
        </property>
        <property name="typeQName">
            <value>cm:content</value>
        </property>
        <property name="policy">
             <ref bean="serialVersionLabelPolicy" />
        </property>
    </bean>
   
    <bean id="registerMLContainerWithVersionService" class="org.alfresco.repo.version.VersionServiceVersionLabelRegistrationBean" init-method="register">
       <property name="versionService">
            <ref bean="versionService" />
        </property>
        <property name="namespacePrefixResolver">
            <ref bean="namespaceService" />
        </property>
        <property name="typeQName">
            <value>cm:mlContainer</value>
        </property>
        <property name="policy">
             <ref bean="serialVersionLabelPolicy" />
        </property>
    </bean>
   
    <!–  –>
   
    <bean id="versionMigrator" class="org.alfresco.repo.version.VersionMigrator" init-method="init">
        <property name="dbNodeService">
            <ref bean="mtAwareNodeService" />
        </property>
        <property name="versionNodeService">
            <ref bean="versionNodeService" />
        </property>
        <property name="version2ServiceImpl">
            <ref bean="versionService" />
        </property>
        <property name="policyBehaviourFilter">
            <ref bean="policyBehaviourFilter" />
        </property>
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="transactionService">
            <ref bean="transactionService"/>
        </property>
    </bean>

    <bean id="versionableAspect" class="org.alfresco.repo.version.VersionableAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="versionService">
            <ref bean="versionService"/>
        </property>
        <property name="nodeService">
            <ref bean="nodeService"/>
        </property>
    </bean>

    <!–                 –>
    <!– Data Dictionary –>
    <!–                 –>

    <!– Constraint Registry –>
    <bean id="cm:constraintRegistry" class="org.alfresco.repo.dictionary.constraint.ConstraintRegistry" />

    <bean id="namespaceDAO" class="org.alfresco.repo.dictionary.NamespaceDAOImpl">
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="namespaceRegistryCache">
            <ref bean="prefixesCache"/>
        </property>
    </bean>

    <bean id="dictionaryModelType" class="org.alfresco.repo.dictionary.DictionaryModelType" init-method="init">
        <property name="dictionaryDAO">
            <ref bean="dictionaryDAO" />
        </property>
        <property name="namespaceDAO">
            <ref bean="namespaceDAO" />
        </property>
        <property name="nodeService">
            <ref bean="nodeService"/>
        </property>
        <property name="contentService">
            <ref bean="contentService"/>
        </property>
    </bean>

    <bean id="dictionaryDAO" class="org.alfresco.repo.dictionary.DictionaryDAOImpl">
        <constructor-arg index="0">
            <ref bean="namespaceDAO" />
        </constructor-arg>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
        <property name="dictionaryRegistryCache">
            <ref bean="compiledModelsCache"/>
        </property>
    </bean>

    <bean id="dictionaryService" class="org.alfresco.repo.dictionary.DictionaryComponent" depends-on="dictionaryBootstrap">
        <property name="dictionaryDAO">
            <ref bean="dictionaryDAO" />
        </property>
    </bean>

    <bean id="namespaceService" class="org.alfresco.repo.dictionary.DictionaryNamespaceComponent"
        depends-on="dictionaryDAO">
        <property name="namespaceDAO">
            <ref bean="namespaceDAO" />
        </property>
    </bean>

    <bean id="dictionaryModelBootstrap" class="org.alfresco.repo.dictionary.DictionaryBootstrap" init-method="bootstrap" abstract="true">
        <property name="dictionaryDAO"><ref local="dictionaryDAO"/></property>
        <property name="tenantService">
            <ref bean="tenantService"/>
        </property>
    </bean>

    <bean id="dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="resourceBundles">
        <property name="models">
            <list>
                <!– System models  –>
                <value>alfresco/model/dictionaryModel.xml</value>
                <value>alfresco/model/systemModel.xml</value>
                <value>org/alfresco/repo/security/authentication/userModel.xml</value>

                <!– Content models –>
                <value>alfresco/model/contentModel.xml</value>
                <value>alfresco/model/renditionModel.xml</value>
                <value>alfresco/model/bpmModel.xml</value>
                <value>alfresco/model/wcmModel.xml</value>
                <value>alfresco/model/forumModel.xml</value>
                <value>alfresco/model/imapModel.xml</value>
                <value>alfresco/model/transferModel.xml</value>

                <!– Content models –>
                <value>alfresco/model/applicationModel.xml</value>
                <value>alfresco/model/wcmAppModel.xml</value>

                <!– Implementation models –>
                <value>org/alfresco/repo/action/actionModel.xml</value>
                <value>org/alfresco/repo/rule/ruleModel.xml</value>
               
                <!–  Version models –>
                <value>org/alfresco/repo/version/version_model.xml</value> <!– deprecated –>
                <value>org/alfresco/repo/version/version2_model.xml</value>               

                <!– Email model –>
                <value>alfresco/model/emailServerModel.xml</value>
               
                <!– Calendar model –>
                <value>alfresco/model/calendarModel.xml</value>

                <!– Blog Integration model –>
                <value>alfresco/model/blogIntegrationModel.xml</value>

                <!– Links model –>
                <value>alfresco/model/linksModel.xml</value>
               
                <!– Share Data Lists model –>
                <value>alfresco/model/datalistModel.xml</value>

                <!– Deprecated types –>
                <value>alfresco/model/deprecated/deprecated_contentModel.xml</value>
            </list>
        </property>
        <property name="labels">
            <list>
                <value>alfresco/model/dataTypeAnalyzers</value>
                <value>alfresco/messages/system-model</value>
                <value>alfresco/messages/dictionary-model</value>
                <value>alfresco/messages/content-model</value>
                <value>alfresco/messages/bpm-messages</value>
                <value>alfresco/messages/application-model</value>
                <value>alfresco/messages/forum-model</value>
                <value>alfresco/messages/email-server-model</value>
                <value>alfresco/messages/data-list-model</value>
            </list>
        </property>
    </bean>
   
    <!– TODO - deprecate and replace with mechanism that does not rely on init-method (see AR-2207) –>
    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>alfresco/model/defaultCustomModel.xml</value>
            </list>
        </property>
    </bean>

    <!–                 –>
    <!– Copy Service    –>
    <!–                 –>

    <!– Note this uses the node service that enforces permissions so you can only copy what you can see –>

    <bean id="copyService" class="org.alfresco.repo.copy.CopyServiceImpl" init-method="init">
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="ruleService">
            <ref bean="ruleService" />
        </property>
        <property name="searchService">
            <ref bean="ADMSearchService" />
        </property>
        <property name="permissionService">
            <ref bean="PermissionService" />
        </property>
        <property name="authenticationService">
            <ref bean="AuthenticationService" />
        </property>
        <property name="internalNodeService">
            <ref bean="nodeService" />
        </property>
    </bean>

    <!–                           –>
    <!– CheckOut/CheckIn Service  –>
    <!–                           –>

    <bean id="checkOutCheckInService" class="org.alfresco.repo.coci.CheckOutCheckInServiceImpl" init-method="init">
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="versionService">
            <ref bean="versionService" />
        </property>
        <property name="lockService">
            <ref bean="LockService" />
        </property>
        <property name="copyService">
            <ref bean="CopyService" />
        </property>
        <property name="authenticationService">
            <ref bean="authenticationService" />
        </property>
        <property name="fileFolderService">
            <ref bean="fileFolderService" />
        </property>
        <property name="searchService">
            <ref bean="searchService" />
        </property>
        <property name="versionableAspect">
            <ref bean="versionableAspect" />
        </property>
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
    </bean>

    <bean id="workingCopyAspect" class="org.alfresco.repo.coci.WorkingCopyAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <property name="lockService">
            <ref bean="LockService" />
        </property>
    </bean>

    <bean id="discussableAspect" class="org.alfresco.repo.forum.DiscussableAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <property name="fileFolderService">
            <ref bean="fileFolderService" />
        </property>
    </bean>

    <!– Bean to support full text search –>

    <bean id="LuceneFullTextSearchIndexer"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" depends-on="indexerAndSearcherFactory">
        <property name="proxyInterfaces">
            <value>org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexer</value>
        </property>
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="target">
           <ref bean="luceneFullTextSearchIndexer" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">${server.transaction.mode.default}</prop>
            </props>
        </property>
    </bean>

     <bean id="luceneFullTextSearchIndexer" class="org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexerImpl">
        <property name="indexerAndSearcherFactory">
           <ref bean="indexerAndSearcherFactory" />
        </property>
     </bean>

    <!– Bean to backup Lucene indexes –>
    <bean id="luceneIndexBackupComponent"
          class="org.alfresco.repo.search.impl.lucene.AbstractLuceneIndexerAndSearcherFactory$LuceneIndexBackupComponent">
        <property name="transactionService">
            <ref bean="transactionService" />
        </property>
        <property name="factories">
            <set>
                <ref bean="admLuceneIndexerAndSearcherFactory" />
            </set>
        </property>
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="targetLocation">
            <value>${dir.indexes.backup}</value>
        </property>
        <property name="checkConfiguration">
            <value>true</value>
        </property>
    </bean>



    <!– Query Register Component –>

    <bean id="queryRegisterComponent" class="org.alfresco.repo.search.QueryRegisterComponentImpl">
        <property name="dictionaryService">
            <ref bean="dictionaryService" />
        </property>
        <property name="namespaceService">
            <ref bean="namespaceService" />
        </property>
        <!– Query collections should be loaded on demand using this component - once loaded thay are available for use –>
    </bean>

    <!– Multilingual Document–>
    <bean id="multilingualDocumentAspect" class="org.alfresco.repo.model.ml.MultilingualDocumentAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
        <property name="multilingualContentService">
            <ref bean="multilingualContentService" />
        </property>
    </bean>

    <!– Empty translation –>
    <bean id="emptyTranslationAspect" class="org.alfresco.repo.model.ml.EmptyTranslationAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="mlAwareNodeService" />
        </property>
    </bean>

    <!– Multilingual Container –>
    <bean id="mlContainerType" class="org.alfresco.repo.model.ml.MLContainerType" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="mlAwareNodeService" />
        </property>
        <property name="multilingualContentService">
            <ref bean="multilingualContentService" />
        </property>
    </bean>

    <!– Referenceable –>
    <bean id="referenceableAspect" class="org.alfresco.repo.node.ReferenceableAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
    </bean>

    <!– Temporary Aspect –>
    <bean id="temporaryAspect" class="org.alfresco.repo.node.TemporaryAspect" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
    </bean>

    <!– Configurable service –>
    <bean id="configurableService" class="org.alfresco.repo.configuration.ConfigurableServiceImpl">
        <property name="nodeService">
            <ref bean="nodeService" />
        </property>
    </bean>

    <!– Registry service –>
    <bean id="registryService" class="org.alfresco.repo.admin.registry.RegistryServiceImpl" init-method="init">
        <property name="namespaceService">
            <ref bean="namespaceService" />
        </property>
        <property name="searchService">
            <ref bean="SearchService" />
        </property>
        <property name="nodeService">
            <ref bean="NodeService" />
        </property>
        <!– Root properties –>
        <property name="registryStore">
            <value>system://system</value>
        </property>
        <property name="registryRootPath">
            <value>/sys:system-registry</value>
        </property>
    </bean>

    <bean id="serverDescriptorDAO" class="org.alfresco.repo.descriptor.ServerDescriptorDAOImpl">
       <property name="repositoryName">
           <value>${repository.name}</value>
       </property>
       <property name="resource">
           <value>classpath:alfresco/version.properties</value>
       </property>
    </bean>

    <bean id="currentRepoDescriptorDAO" class="org.alfresco.repo.descriptor.RepositoryDescriptorDAOImpl">
       <property name="name">
           <value>system.descriptor.current.childname</value>
       </property>
       <property name="systemBootstrap">
           <ref bean="systemBootstrap"/>
       </property>
       <property name="transactionService">
           <ref bean="transactionService"/>
       </property>
       <property name="namespaceService">
           <ref bean="namespaceService"/>
       </property>
       <property name="nodeService">
           <ref bean="nodeService"/>
       </property>
       <property name="contentService">
           <ref bean="contentService"/>
       </property>
       <property name="searchService">
           <ref bean="searchService"/>
       </property>
    </bean>

    <bean id="installedRepoDescriptorDAO" class="org.alfresco.repo.descriptor.RepositoryDescriptorDAOImpl">
       <property name="name">
           <value>system.descriptor.childname</value>
       </property>
       <property name="systemBootstrap">
           <ref bean="systemBootstrap"/>
       </property>
       <property name="transactionService">
           <ref bean="transactionService"/>
       </property>
       <property name="namespaceService">
           <ref bean="namespaceService"/>
       </property>
       <property name="nodeService">
           <ref bean="nodeService"/>
       </property>
       <property name="contentService">
           <ref bean="contentService"/>
       </property>
       <property name="searchService">
           <ref bean="searchService"/>
       </property>
    </bean>
   
    <!– Clustered (DB) locking Service –>
    <bean id="jobLockService" class="org.alfresco.repo.lock.JobLockServiceImpl">
        <property name="retryingTransactionHelper">
            <bean class="org.alfresco.repo.transaction.RetryingTransactionHelper">
                <property name="transactionService">
                    <ref bean="transactionService"/>
                </property>
                <property name="maxRetries">
                    <value>10</value>
                </property>
                <property name="minRetryWaitMs">
                    <value>10</value>
                </property>
                <property name="maxRetryWaitMs">
                    <value>10</value>
                </property>
                <property name="retryWaitIncrementMs">
                    <value>0</value>
                </property>
            </bean>
        </property>
        <property name="lockDAO" ref="lockDAO" />
        <property name="defaultRetryCount"><value>10</value></property>
        <property name="defaultRetryWait"><value>20</value></property>
    </bean>
   
   <!– Import the sys admin params from the sysAdmin subsystem –>
   <bean id="sysAdminParams" class="org.alfresco.repo.management.subsystems.SubsystemProxyFactory">
      <property name="sourceApplicationContextFactory">
         <ref bean="sysAdmin" />
      </property>
      <property name="interfaces">
         <list>
            <value>org.alfresco.repo.admin.SysAdminParams</value>
         </list>
      </property>
   </bean>
   
    <!– Bean that can be used for publishing events, even when the app is starting up –>
    <bean id="applicationEventPublisher" class="org.alfresco.repo.management.SafeEventPublisher"/>
   
<!– MAIL  –>

<bean id="mailService" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host">
    <value>${mail.host}</value>
  </property>
  <property name="port">
    <value>${mail.port}</value>
  </property>                                         
  <property name="protocol">                           
    <value>${mail.transport.protocol}</value>
  </property>
  <property name="username">
    <value>${mail.username}</value>
  </property>
  <property name="password">
    <value>${mail.password}</value>
  </property>
  <property name="defaultEncoding">
    <value>${mail.encoding}</value>
  </property>

  <property name="javaMailProperties">
    <props>
      <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
      <prop key="mail.smtp.socketFactory.port">${mail.smtp.socketFactory.port}</prop>
      <prop key="mail.smtp.socketFactory.class">${mail.smtp.socketFactory.class}</prop>
      <prop key="mail.smtp.socketFactory.fallback">${mail.smtp.socketFactory.fallback}</prop>
      <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
    </props>
  </property>
</bean>
</beans>

Outcomes