420 lines
19 KiB
XML
420 lines
19 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
-->
|
|
|
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:camel="http://camel.apache.org/schema/spring"
|
|
xmlns:amq="http://activemq.apache.org/schema/core"
|
|
xsi:schemaLocation="
|
|
http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
|
|
http://camel.apache.org/schema/spring classpath:camel-spring.xsd
|
|
http://activemq.apache.org/schema/core classpath:activemq.xsd">
|
|
|
|
<!--
|
|
===========================================================================
|
|
Spring Wiring for James Server: Annotation, Bean Post-Processors...
|
|
===========================================================================
|
|
-->
|
|
|
|
<!--
|
|
Enable Java Annotations processing.
|
|
-->
|
|
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
|
|
<property name="order" value="3" />
|
|
</bean>
|
|
|
|
<!--
|
|
Enable support for Persistence Annotations processing.
|
|
-->
|
|
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
|
|
|
|
<!--
|
|
Spring "Bean-Post-Processor" for LogEnabled interface.
|
|
-->
|
|
<bean class="org.apache.james.container.spring.lifecycle.LogEnabledBeanPostProcessor">
|
|
<property name="logProvider" ref="logprovider" />
|
|
<property name="order" value="0" />
|
|
</bean>
|
|
<bean id="logprovider" class="org.apache.james.container.spring.lifecycle.LogProviderImpl">
|
|
</bean>
|
|
|
|
<!--
|
|
Configuration "Bean-Factory-Post-Processor"
|
|
responsible to register beans from James specific configuration files
|
|
-->
|
|
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.ConfigurationBeanFactoryPostProcessor">
|
|
<property name="beans">
|
|
<map>
|
|
<!-- User Repository-->
|
|
<entry>
|
|
<key>
|
|
<value>usersrepository</value>
|
|
</key>
|
|
<!-- no alias needed -->
|
|
<value></value>
|
|
</entry>
|
|
<!-- Recipient Rewrite Table-->
|
|
<entry>
|
|
<key>
|
|
<value>recipientrewritetable</value>
|
|
</key>
|
|
<!-- no alias needed -->
|
|
<value></value>
|
|
</entry>
|
|
<!-- Domain List -->
|
|
<entry>
|
|
<key>
|
|
<value>domainlist</value>
|
|
</key>
|
|
<!-- no alias needed -->
|
|
<value></value>
|
|
</entry>
|
|
<entry>
|
|
<key>
|
|
<value>usersrepository23</value>
|
|
</key>
|
|
<!-- no alias needed -->
|
|
<value></value>
|
|
</entry>
|
|
</map>
|
|
</property>
|
|
</bean>
|
|
|
|
<!--
|
|
Spring "Bean-Post-Processor" for Configurable interface.
|
|
-->
|
|
<bean class="org.apache.james.container.spring.lifecycle.ConfigurableBeanPostProcessor">
|
|
<property name="configurationProvider" ref="configurationprovider" />
|
|
<property name="order" value="1" />
|
|
</bean>
|
|
<bean id="configurationprovider" class="org.apache.james.container.spring.lifecycle.ConfigurationProviderImpl">
|
|
<property name="configurationMappings">
|
|
<map>
|
|
<entry key="mailprocessor" value="mailetcontainer.processors"/>
|
|
<entry key="mailspooler" value="mailetcontainer.spooler"/>
|
|
<entry key="mailetcontext" value="mailetcontainer.context"/>
|
|
</map>
|
|
</property>
|
|
</bean>
|
|
|
|
<!--
|
|
Mail Repository Store "Bean-Factory"
|
|
-->
|
|
<bean id="mailrepositorystore" class="org.apache.james.container.spring.bean.factory.mailrepositorystore.MailRepositoryStoreBeanFactory" />
|
|
|
|
<!--
|
|
===========================================================================
|
|
Queues
|
|
===========================================================================
|
|
-->
|
|
|
|
<!--
|
|
Mail Queue Factory
|
|
-->
|
|
<bean id="mailqueuefactory" class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory" depends-on="broker"/>
|
|
|
|
<!--
|
|
ActiveMQ: Broker, Connections, BlobTransferPolicy...
|
|
-->
|
|
<amq:broker useJmx="true" persistent="true" brokerName="james" dataDirectory="filesystem=file://var/store/activemq/brokers" useShutdownHook="false" schedulerSupport="false" id="broker">
|
|
<amq:destinationPolicy>
|
|
<amq:policyMap>
|
|
<amq:policyEntries>
|
|
<!-- Support priority handling of messages -->
|
|
<!-- http://activemq.apache.org/how-can-i-support-priority-queues.html -->
|
|
<amq:policyEntry queue=">" prioritizedMessages="true"/>
|
|
</amq:policyEntries>
|
|
</amq:policyMap>
|
|
</amq:destinationPolicy>
|
|
<amq:managementContext>
|
|
<amq:managementContext createConnector="false"/>
|
|
</amq:managementContext>
|
|
<amq:persistenceAdapter>
|
|
<amq:amqPersistenceAdapter/>
|
|
</amq:persistenceAdapter>
|
|
<amq:plugins>
|
|
<amq:statisticsBrokerPlugin/>
|
|
</amq:plugins>
|
|
<amq:transportConnectors>
|
|
<amq:transportConnector uri="tcp://localhost:0" />
|
|
</amq:transportConnectors>
|
|
</amq:broker>
|
|
<amq:connectionFactory id="amqConnectionFactory" brokerURL="vm://james?create=false">
|
|
<amq:prefetchPolicy>
|
|
<!-- Disable prefetch so slow consuming can not block other threads -->
|
|
<!-- See JAMES-1253 -->
|
|
<amq:prefetchPolicy queuePrefetch="0" topicPrefetch="0"/>
|
|
</amq:prefetchPolicy>
|
|
<property name="blobTransferPolicy" ref="blobTransferPolicy"/>
|
|
</amq:connectionFactory>
|
|
<bean id="blobTransferPolicy" class="org.apache.james.queue.activemq.FileSystemBlobTransferPolicy">
|
|
<property name="defaultUploadUrl" value="file://var/store/activemq/blob-transfer"/>
|
|
</bean>
|
|
<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
|
|
<property name="targetConnectionFactory" ref="amqConnectionFactory"/>
|
|
<property name="sessionCacheSize" value="10"/>
|
|
<property name="cacheConsumers" value="false"/>
|
|
<property name="cacheProducers" value="true"/>
|
|
</bean>
|
|
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
|
|
<property name="connectionFactory" ref="jmsConnectionFactory"/>
|
|
</bean>
|
|
|
|
<!--
|
|
===========================================================================
|
|
Mailet Container
|
|
===========================================================================
|
|
-->
|
|
|
|
<!--
|
|
Mailet Container Beans.
|
|
-->
|
|
<bean id="mailprocessor" name="processorRoute" class="org.apache.james.mailetcontainer.impl.camel.CamelCompositeProcessor"/>
|
|
|
|
<!--
|
|
!!! mailetcontext bean must be defined after mailProcessor
|
|
otherwise LogEnabled injection via LogEnabledBeanPostProcessor will not occur before
|
|
it is used - Seems like a Spring bug...
|
|
-->
|
|
<bean id="mailetcontext" class="org.apache.james.mailetcontainer.impl.JamesMailetContext"/>
|
|
<bean id="mailspooler" class="org.apache.james.mailetcontainer.impl.JamesMailSpooler"/>
|
|
|
|
<!--
|
|
Mailet and Matcher "Bean-Factory".
|
|
-->
|
|
<bean id="mailetloader" class="org.apache.james.container.spring.bean.factory.mailetcontainer.MailetLoaderBeanFactory" />
|
|
<bean id="matcherloader" class="org.apache.james.container.spring.bean.factory.mailetcontainer.MatcherLoaderBeanFactory" />
|
|
|
|
<!--
|
|
Camel Context
|
|
-->
|
|
<camel:camelContext id="jamesCamelContext" trace="false" >
|
|
<camel:jmxAgent id="agent" disabled="false" createConnector="false" serviceUrlPath="/jmxrmi/jamescamel"/>
|
|
<camel:template id="producerTemplate"/>
|
|
</camel:camelContext>
|
|
|
|
<!--
|
|
===========================================================================
|
|
File System
|
|
===========================================================================
|
|
-->
|
|
|
|
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.FileSystemBeanFactoryPostProcessor">
|
|
<property name="fileSystem" ref="filesystem" />
|
|
</bean>
|
|
<bean id="filesystem" class="org.apache.james.container.spring.filesystem.FileSystemImpl" />
|
|
|
|
<!--
|
|
===========================================================================
|
|
DNS Service
|
|
===========================================================================
|
|
-->
|
|
|
|
<bean id="dnsservice" class="org.apache.james.dnsservice.dnsjava.DNSJavaService" />
|
|
|
|
<!--
|
|
===========================================================================
|
|
FetchMail
|
|
===========================================================================
|
|
-->
|
|
|
|
<bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler" />
|
|
|
|
|
|
<!--
|
|
===========================================================================
|
|
Mail Protocol Servers
|
|
===========================================================================
|
|
-->
|
|
<bean id="protocolhandlerloader" class="org.apache.james.container.spring.bean.factory.protocols.ProtocolHandlerLoaderBeanFactory" />
|
|
|
|
<!--
|
|
SMTP Server
|
|
-->
|
|
<bean id="smtpserver" class="org.apache.james.smtpserver.netty.SMTPServerFactory"/>
|
|
|
|
<!--
|
|
LMTP Server
|
|
-->
|
|
<bean id="lmtpserver" class="org.apache.james.lmtpserver.netty.LMTPServerFactory"/>
|
|
|
|
<!--
|
|
POP3 Server
|
|
-->
|
|
<bean id="pop3server" class="org.apache.james.pop3server.netty.POP3ServerFactory"/>
|
|
|
|
<!--
|
|
IMAP Server
|
|
-->
|
|
<bean id="imapserver" class="org.apache.james.imapserver.netty.IMAPServerFactory">
|
|
<property name="imapDecoder" ref="imapDecoder"/>
|
|
<property name="imapEncoder" ref="imapEncoder"/>
|
|
</bean>
|
|
<!-- The imapProcessor configuration will be reviewed when IMAP will be integrated into Protocols project -->
|
|
<!-- Temporary configuration - see IMAP-357 -->
|
|
<bean id="imapProcessor" class="org.apache.james.imap.processor.main.DefaultImapProcessorFactory" factory-method="createXListSupportingProcessor">
|
|
<constructor-arg index="0" ref="mailboxmanager"/>
|
|
<constructor-arg index="1" ref="subscriptionManager"/>
|
|
<!-- The mailboxTyper -->
|
|
<constructor-arg index="2" value="#{null}"/>
|
|
<!-- The idleKeepAlive -->
|
|
<constructor-arg index="3" value="120"/>
|
|
<!-- The list of disabled capabilities -->
|
|
<constructor-arg index="4">
|
|
<set>
|
|
<value>ACL</value>
|
|
</set>
|
|
</constructor-arg>
|
|
</bean>
|
|
<bean id="imapDecoder" factory-bean="imapDecoderFactory" factory-method="buildImapDecoder"/>
|
|
<bean id="imapDecoderFactory" class="org.apache.james.imap.main.DefaultImapDecoderFactory"/>
|
|
<bean id="imapEncoder" factory-bean="imapEncoderFactory" factory-method="buildImapEncoder"/>
|
|
<bean id="imapEncoderFactory" class="org.apache.james.imap.encode.main.DefaultImapEncoderFactory"/>
|
|
|
|
<!--
|
|
===========================================================================
|
|
Mailbox
|
|
===========================================================================
|
|
-->
|
|
|
|
<!--
|
|
Mailbox Managers
|
|
-->
|
|
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.MailboxConfigurationBeanFactoryPostProcessor"/>
|
|
|
|
<bean id="locker" class="org.apache.james.mailbox.store.JVMMailboxPathLocker"/>
|
|
<import resource="classpath:META-INF/org/apache/james/spring-mailbox.xml" />
|
|
|
|
<!--
|
|
Mailbox Copier
|
|
-->
|
|
<bean id="mailboxcopier" class="org.apache.james.mailbox.copier.MailboxCopierImpl"/>
|
|
|
|
<!--
|
|
Mailbox Importer
|
|
-->
|
|
<bean id="james23importer" class="org.apache.james.container.spring.tool.James23Importer"/>
|
|
|
|
<!--
|
|
===========================================================================
|
|
Database DataSource
|
|
===========================================================================
|
|
-->
|
|
|
|
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
|
|
<property name="ignoreUnresolvablePlaceholders" value="true"/>
|
|
<property name ="location" value="classpath:james-database.properties"/>
|
|
</bean>
|
|
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
|
|
<property name="driverClassName" value="${database.driverClassName}" />
|
|
<property name="url" value="${database.url}" />
|
|
<property name="username" value="${database.username}" />
|
|
<property name="password" value="${database.password}" />
|
|
<!--The value for maxActive should always be larger than the number of spooler threads. The-->
|
|
<!--reason is that a spooler thread normally requires 1 connection to process a mail, however-->
|
|
<!--sometimes OpenJPA requires 1 connection to finish the processing on top of that. If-->
|
|
<!-- maxActive <= num spooler threads,-->
|
|
<!--it can happen that the spooler threads grab all maxActive connections but then cannot-->
|
|
<!--finish processing because each of them blocks waiting for OpenJPA which itself is waiting-->
|
|
<!--for a connection. See https://issues.apache.org/jira/browse/JAMES-1317.-->
|
|
<property name="maxActive" value="21"/>
|
|
<!-- This lets a mail fail to be processed rather than the server freezing. -->
|
|
<property name="maxWait" value="30000"/>
|
|
<!-- This keeps the number of connections in the pool low on average -->
|
|
<property name="timeBetweenEvictionRunsMillis" value="300000"/>
|
|
<property name="minEvictableIdleTimeMillis" value="300000"/>
|
|
<property name="removeAbandoned" value="true"/>
|
|
<property name="logAbandoned" value="true"/>
|
|
<property name="removeAbandonedTimeout" value="300"/>
|
|
</bean>
|
|
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
|
|
<property name="dataSource" ref="datasource"/>
|
|
<property name="jpaVendorAdapter" ref="vendorAdapter"/>
|
|
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
|
|
</bean>
|
|
<bean id="vendorAdapter" class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
|
|
<property name="database" value="${vendorAdapter.database}"/>
|
|
<!-- set this to true for debugging purposes -->
|
|
<property name="showSql" value="false"/>
|
|
</bean>
|
|
|
|
<!--
|
|
===========================================================================
|
|
JMX
|
|
===========================================================================
|
|
-->
|
|
|
|
<!--
|
|
JMX Server
|
|
-->
|
|
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
|
|
<property name="ignoreUnresolvablePlaceholders" value="true"/>
|
|
<property name="location" value="classpath:jmx.properties"/>
|
|
</bean>
|
|
<bean id="mbeanserver" class="org.springframework.jmx.support.MBeanServerFactoryBean" >
|
|
<property name="locateExistingServerIfPossible" value="true"/>
|
|
<property name="registerWithFactory" value="true"/>
|
|
</bean>
|
|
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry">
|
|
<property name="objectName" value="connector:name=rmi" />
|
|
<property name="serviceUrl" value="service:jmx:rmi://${jmx.address}/jndi/rmi://${jmx.address}:${jmx.port}/jmxrmi" />
|
|
</bean>
|
|
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
|
|
<property name="port" value="${jmx.port}" />
|
|
<property name="serverSocketFactory" ref="restrictedRmiSocketFactory"/>
|
|
<property name="clientSocketFactory" ref="restrictedRmiSocketFactory"/>
|
|
</bean>
|
|
<bean id="restrictedRmiSocketFactory" class="org.apache.james.util.RestrictingRMISocketFactory">
|
|
<constructor-arg value="${jmx.address}"/>
|
|
</bean>
|
|
|
|
<!--
|
|
JMX Export
|
|
-->
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="org.apache.james:type=component,name=domainlist" value-ref="domainlistmanagement"/>
|
|
<entry key="org.apache.james:type=component,name=dnsservice" value-ref="dnsservice"/>
|
|
<entry key="org.apache.james:type=component,name=recipientrewritetable" value-ref="recipientrewritetablemanagement"/>
|
|
<entry key="org.apache.james:type=component,name=usersrepository" value-ref="usersrepositorymanagement"/>
|
|
<entry key="org.apache.james:type=component,name=fetchmail" value-ref="fetchmail"/>
|
|
<entry key="org.apache.james:type=component,name=mailboxmanagement" value-ref="mailboxmanagermanagement"/>
|
|
<entry key="org.apache.james:type=component,component=mailetcontainer,name=mailspooler" value-ref="mailspooler"/>
|
|
<entry key="org.apache.james:type=component,name=mailboxcopier" value-ref="mailboxcopiermanagement"/>
|
|
<entry key="org.apache.james:type=component,name=james23importer" value-ref="james23importermanagement"/>
|
|
<entry key="org.apache.james:type=container,name=logprovider" value-ref="logprovider"/>
|
|
</map>
|
|
</property>
|
|
<property name="assembler">
|
|
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
|
|
<property name="managedInterfaces" value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.container.spring.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean"/>
|
|
</bean>
|
|
</property>
|
|
</bean>
|
|
<bean id="usersrepositorymanagement" class="org.apache.james.user.lib.UsersRepositoryManagement" />
|
|
<bean id="recipientrewritetablemanagement" class="org.apache.james.rrt.lib.RecipientRewriteTableManagement" />
|
|
<bean id="domainlistmanagement" class="org.apache.james.domainlist.lib.DomainListManagement" />
|
|
<bean id="mailboxmanagermanagement" class="org.apache.james.adapter.mailbox.MailboxManagerManagement" />
|
|
<bean id="mailboxcopiermanagement" class="org.apache.james.container.spring.mailbox.MailboxCopierManagement" />
|
|
<bean id="james23importermanagement" class="org.apache.james.container.spring.tool.James23ImporterManagement" />
|
|
|
|
</beans>
|