Apache James 2.3.2 не будет писать в MySQL

У меня был работающий почтовый сервер Apache James, но я только что преобразовал его для использования базы данных MySQL вместо файловой системы.
Он создал (некоторые) таблицы, но не записывает в них. Это приводит к тому, что он не доставляет почту.

Поскольку он будет взаимодействовать с базой данных и вставлять пользователей, я думаю, что у меня правильно настроен источник данных базы данных и пользователь...

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
    <driver>com.mysql.jdbc.Driver</driver>
    <dburl>jdbc:mysql://127.0.0.1/james</dburl>
    <user>xxxx</user>
    <password>yyyy</password>
    <max>20</max>
</data-source>

Но когда я пытаюсь отправить электронное письмо, я не получаю никакой ошибки от клиента, но я ничего не получаю в базе данных ни в одной таблице. Все, что я получаю, это эта ошибка на консоли Джеймса...

exception! javax.mail.MessagingException: Exception caught while storing mail Container: ;
  nested exception is:
        com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1

Вот полная трассировка стека из почтового журнала...

10/12/14 16:23:18 INFO  James.Mailet: Error while storing mail.
javax.mail.MessagingException: Exception caught while storing mail Container: ;
  nested exception is:
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:764)
    at org.apache.james.transport.mailets.ToMultiRepository.storeMail(ToMultiRepository.java:230)
    at org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:154)
    at org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66)
    at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424)
    at org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
    at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2973)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1129)
    at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:681)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:803)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:752)
10/12/14 16:23:18 INFO  James.Mailet: ToRepository: Storing mail Mail1418257398530-1 in dbfile://maildb/deadletter/error

Вот как я указал репозиторий...

<mailet match="All" class="ToRepository">
    <repositoryPath> db://maildb/deadletter/error </repositoryPath>
</mailet>

Поскольку он, кажется, жалуется на пустую дату и время last_updated, я сделал этот столбец пустым, но это не помогло. Я никак не меняю java, так что я ничего не напутал. Я даже не знаю, где он берет дату и время.

Может ли кто-нибудь увидеть что-то, что я пропустил?


person SpeedRacer350    schedule 11.12.2014    source источник


Ответы (1)


Решено: я нашел малоизвестный пост в архивах ошибок Apache, в котором упоминается добавление этого параметра...

<dburl>jdbc:mysql://127.0.0.1/james?useServerPrepStmts=false</dburl> 

...в область источника данных. На самом деле, в сообщении говорится, что здесь нужно добавить 2 параметра, но я обнаружил, что он примет только один параметр.

Я не знаю, как я должен был знать об этих парамах или о том, что они делают, но это заставило все волшебным образом работать. Иногда использование программного обеспечения с открытым исходным кодом учит больше исследованиям, чем программированию.

person SpeedRacer350    schedule 12.12.2014