Using James 2.0a3 on RH Linux 7.2 (JDK 1.4) with MySQL 3.23.49a:
I am seeing a problem fairly frequently where I get "SQLException: Giving up... no
connections available." showing up in the logs, and the email ending up in the error
repository. I have included two snippets from smtpserver.log and spoolmanager.log
below.
It usually happens when several emails are sent to '[EMAIL PROTECTED]' nearly
simultaneously, where I have forwarding set up as follows in config.xml:
<mailet match="[EMAIL PROTECTED]" class="Forward">
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
<forwardto> [EMAIL PROTECTED] </forwardto>
</mailet>
Note that it has occasionally happened when a single email is sent to two or more
users as well. Also, James seems to keep on working, i.e. other emails sent after
this occurs are processed normally.
I realize this is probably a configuration problem, but I haven't been able to figure
out what I need to change to make this problem go away. Should adjusting the
spoolmanager thread count have an effect? Or is the instance of MySQL simply not
configured properly to allow enough connections to be created simultaneously?
Thanks for your help.
Sam
snippet from smtpserver.log:
1021475060742 [DEBUG ] (smtpserver): Exception opening socket: An exception occurred
getting a database connection.
org.apache.avalon.framework.CascadingRuntimeException: An exception occurred getting a
database connection.
at
org.apache.james.userrepository.AbstractJdbcUsersRepository.openConnection(AbstractJdbcUsersRepository.java:493)
at
org.apache.james.userrepository.AbstractJdbcUsersRepository.getUserByName(AbstractJdbcUsersRepository.java:403)
at
org.apache.james.userrepository.AbstractUsersRepository.test(AbstractUsersRepository.java:256)
at org.apache.james.smtpserver.SMTPHandler.doAUTH(SMTPHandler.java:354)
at org.apache.james.smtpserver.SMTPHandler.parseCommand(SMTPHandler.java:238)
at
org.apache.james.smtpserver.SMTPHandler.handleConnection(SMTPHandler.java:163)
at
org.apache.avalon.cornerstone.blocks.connection.ConnectionRunner.run(Connection.java:167)
rethrown from
java.sql.SQLException: Giving up... no connections available.
at
org.apache.james.util.mordred.JdbcDataSource.getConnection(JdbcDataSource.java:396)
at
org.apache.james.userrepository.AbstractJdbcUsersRepository.openConnection(AbstractJdbcUsersRepository.java:490)
at
org.apache.james.userrepository.AbstractJdbcUsersRepository.getUserByName(AbstractJdbcUsersRepository.java:403)
at
org.apache.james.userrepository.AbstractUsersRepository.test(AbstractUsersRepository.java:256)
at org.apache.james.smtpserver.SMTPHandler.doAUTH(SMTPHandler.java:354)
at org.apache.james.smtpserver.SMTPHandler.parseCommand(SMTPHandler.java:238)
at
org.apache.james.smtpserver.SMTPHandler.handleConnection(SMTPHandler.java:163)
snippet from spoolmanager.log:
1021481004321 [ERROR ] (spoolmanager.transport): Exception calling Forward: Exception
spooling message: Exception caught while storing mail Container: java.io.IOException:
java.sql.SQLException: Giving up... no connections available.;
nested exception is:
java.lang.RuntimeException: Exception caught while storing mail Container:
java.io.IOException: java.sql.SQLException: Giving up... no connections available.
javax.mail.MessagingException: Exception spooling message: Exception caught while
storing mail Container: java.io.IOException: java.sql.SQLException: Giving up... no
connections available.;
nested exception is:
java.lang.RuntimeException: Exception caught while storing mail Container:
java.io.IOException: java.sql.SQLException: Giving up... no connections available.
at org.apache.james.James.sendMail(James.java:260)
at org.apache.james.James.sendMail(James.java:235)
at org.apache.james.James.sendMail(James.java:228)
at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:91)
at $Proxy9.sendMail(Unknown Source)
at org.apache.james.transport.mailets.Forward.service(Forward.java:38)
at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:183)
at
org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:241)
at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:208)
at
org.apache.avalon.excalibur.thread.impl.ExecutableRunnable.execute(ExecutableRunnable.java:47)
at
org.apache.avalon.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:86)
java.lang.RuntimeException: Exception caught while storing mail Container:
java.io.IOException: java.sql.SQLException: Giving up... no connections available.
at
org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:422)
at
org.apache.james.mailrepository.JDBCSpoolRepository.store(JDBCSpoolRepository.java:176)
at org.apache.james.James.sendMail(James.java:254)
at org.apache.james.James.sendMail(James.java:235)
at org.apache.james.James.sendMail(James.java:228)
at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:91)
at $Proxy9.sendMail(Unknown Source)
at org.apache.james.transport.mailets.Forward.service(Forward.java:38)
at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:183)
at
org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:241)
at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:208)
at
org.apache.avalon.excalibur.thread.impl.ExecutableRunnable.execute(ExecutableRunnable.java:47)
at
org.apache.avalon.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:86)