blob: be39003c2c7218636e57cad402e9198e12cfa61c [file] [log] [blame]
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!--
===========================================================================
Spring Wiring for James Server: Annotation, Bean Post-Processors...
===========================================================================
-->
<context:component-scan base-package="org.apache.james" />
<!-- 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"/>
<import resource="classpath:META-INF/spring/loaders-context.xml"/>
<!--
===========================================================================
Authenticator
===========================================================================
-->
<import resource="classpath:META-INF/org/apache/james/spring-mailbox-authenticator.xml"/>
<!--
===========================================================================
Queues
===========================================================================
-->
<!--
Default Mail Queue Factory is the ActiveMQMailQueueFactory.
Alternative queue is FileMailQueueFactory - Can be used instead of the default one.
To use FileMailQueueFactory, replace the import of activemq-queue-context.xml with:
<import resource="classpath:META-INF/spring/file-queue-context.xml"/>
-->
<import resource="classpath:META-INF/spring/activemq-queue-context.xml"/>
<!-- Mailet Container -->
<import resource="classpath:META-INF/spring/mailetcontainer-context.xml"/>
<!-- Camel Context -->
<camel:camelContext id="jamesCamelContext" trace="false">
<camel:jmxAgent id="agent" disabled="false" createConnector="false" serviceUrlPath="/jmxrmi/jamescamel"/>
</camel:camelContext>
<!-- DNS Service -->
<import resource="classpath:META-INF/spring/dns-context.xml"/>
<!-- FetchMail -->
<import resource="classpath:META-INF/spring/fetchmail-context.xml"/>
<!--
===========================================================================
Mail Protocol Servers
===========================================================================
-->
<!-- SMTP Server -->
<import resource="classpath:META-INF/spring/smtpserver-context.xml"/>
<!-- LMTP Server -->
<import resource="classpath:META-INF/spring/lmtpserver-context.xml"/>
<!-- POP3 Server -->
<import resource="classpath:META-INF/spring/pop3server-context.xml"/>
<!-- IMAP4 Server -->
<import resource="classpath:META-INF/spring/imapserver-context.xml"/>
<!-- IMAP4 Server -->
<import resource="classpath:META-INF/spring/managesieveserver-context.xml"/>
<!--
===========================================================================
Indexer
===========================================================================
-->
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.IndexerConfigurationBeanFactoryPostProcessor"/>
<!--
===========================================================================
Mailbox
===========================================================================
-->
<bean id="messageParser" class="org.apache.james.mailbox.store.mail.model.impl.MessageParser" init-method="init"/>
<!-- 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/spring/spring-mailbox.xml"/>
<!-- Quotas -->
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.QuotaBeanFactoryPostProcessor"/>
<import resource="classpath:META-INF/spring/quota.xml"/>
<bean id="quota" class="org.apache.james.container.spring.mailbox.MaxQuotaConfigurationReader">
<constructor-arg index="0" ref="maxQuotaManager"/>
<constructor-arg index="1" ref="quotaRootResolver"/>
</bean>
<!-- Event system -->
<bean class="org.apache.james.container.spring.bean.factorypostprocessor.EventsConfigurationBeanFactoryPostProcessor"/>
<import resource="classpath:META-INF/spring/event-system.xml"/>
<!-- Mailbox Copier -->
<bean id="mailboxcopier" class="org.apache.james.mailbox.copier.MailboxCopierImpl"/>
<bean id="mailboxmanagerresolver" class="org.apache.james.container.spring.mailbox.SpringResolver" />
<!-- 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=mailboxmanagerbean"
value-ref="mailboxmanagermanagementbean"/>
<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"/>
<entry key="org.apache.james:type=component,name=quotamanagerbean" value-ref="quotamanagermanagement"/>
<entry key="org.apache.james:type=component,name=reindexerbean" value-ref="reindexermanagement"/>
<entry key="org.apache.james:type=component,name=sievemanagerbean" value-ref="sievemanagerbean"/>
</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.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean,org.apache.james.adapter.mailbox.QuotaManagementMBean,org.apache.james.adapter.mailbox.ReIndexerManagementMBean,org.apache.james.sieverepository.api.SieveRepositoryManagementMBean"/>
</bean>
</property>
</bean>
<import resource="classpath:META-INF/spring/mailbox-tools.xml"/>
<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="mailboxmanagermanagementbean" class="org.apache.james.adapter.mailbox.MailboxManagerManagement"/>
<bean id="mailboxcopiermanagement" class="org.apache.james.adapter.mailbox.MailboxCopierManagement"/>
<bean id="quotamanagermanagement" class="org.apache.james.adapter.mailbox.QuotaManagement">
<property name="maxQuotaManager" ref="maxQuotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
<property name="quotaManager" ref="quotaManager"/>
</bean>
<bean id="reindexermanagement" class="org.apache.james.adapter.mailbox.ReIndexerManagement">
<constructor-arg index="0" ref="reindexer"/>
</bean>
<bean id="sievemanagerbean" class="org.apache.james.sieverepository.lib.SieveRepositoryManagement"/>
<!--
<bean id="james23importermanagement" class="org.apache.james.container.spring.tool.James23ImporterManagement" />
-->
<!-- uncomment the folowing line to enable JETM monitoring -->
<!--
<import resource="classpath:jetm-monitoring.conf" />
-->
<beans profile="cassandra">
<import resource="classpath:META-INF/cassandra-session.xml"/>
</beans>
</beans>