One last comment from testing current james from sources with postgresql 11. The property standard_conforming_strings in postgresql.conf should be kept as the default (standard_conforming_strings = on). No error shows when running james this way.

The other error regarding JAMES_SIEVE_SCRIPT.ACTIVATION_DATE_TIME incompatibility with the same column in the given schema definition, seems related to openjpa and its postgresql integration. The error does not show with Derby.

Pablo Pita

On 24.11.20 09:32, Pablo Pita Leira wrote:
Hello,

there is a hint on the issue below by reading in James Server Wide Configuration (https://james.apache.org/server/config-system.html):

Note for postgresql databases: Add standard_conforming_strings=off to your postgresql.xml, otherwise you will get ""Invalid escape string Hint: Escape string must be empty or one character. {prepstmnt 174928937 SELECT t0.mailbox_id, t0.mailbox_highest_modseq, t0.mailbox_last_uid, t0.mailbox_name, t0.mailbox_namespace, t0.mailbox_uid_validity, t0.user_name FROM public.james_mailbox t0 WHERE (t0.mailbox_name LIKE ? ESCAPE '\\' AND t0.user_name = ? AND t0.mailbox_namespace = ?) [params=?, ?, ?]} [code=0, state=22025]"

The postgresql.conf has standard_conforming_strings = off, and so it is configured in the postgresql instance I am using. As the documentation mentions postgresql.xml, is that a typo or is it pointing to some other configuration somewhere else ? Any feedback here ?

Pablo

On 21.11.20 11:27, Pablo Pita Leira wrote:
Hello,

I have compiled the current james-project from linagora's github repository. Then built the jpa docker server. I took the files that would get installed in the docker image to used them as installation in a debian server with PostgreSQL as database.

When testing this installation, I have encounter two issues which seem related to openjpa.

The first, is regarding the Sieve mailet, and a problem mapping a column of an entity:

9507  Global  INFO   [main] openjpa.Runtime - Starting OpenJPA 3.1.2
9744  Global  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary". 18173  Global  INFO   [main] openjpa.jdbc.JDBC - Connected to PostgreSQL version 11.9 using JDBC driver PostgreSQL JDBC Driver version 42.2.18. 24017  Global  WARN   [main] openjpa.jdbc.Schema - Existing column "activation_date_time" on table "public.JAMES_SIEVE_SCRIPT" is incompatible with the same column in the given schema definition. Existing column:
Full Name: JAMES_SIEVE_SCRIPT.activation_date_time
Type: timestamp
Size: 35
Default: null
Not Null: false
Given column:
Full Name: JAMES_SIEVE_SCRIPT.ACTIVATION_DATE_TIME
Type: unknown(2014)
Size: 0
Default: null
Not Null: false


The second, is that the imap server throws a persistence exception. It seems that the sql to find the mailbox has a ESCAPE '\' part that is not OK.

Wrapped by: org.apache.openjpa.persistence.PersistenceException: Unterminated string literal started at position 213 in SQL SELECT t0.mailbox_id, t0.mailbox_highest_modseq, t0.mailbox_last_uid, t0.mailbox_name, t0.mailbox_namespace, t0.mailbox_uid_validity, t0.user_name FROM public.JAMES_MAILBOX t0 WHERE (t0.mailbox_name LIKE ? ESCAPE '\' AND t0.user_name = ? AND t0.mailbox_namespace = ?). Expected  char {SELECT t0.mailbox_id, t0.mailbox_highest_modseq, t0.mailbox_last_uid, t0.mailbox_name, t0.mailbox_namespace, t0.mailbox_uid_validity, t0.user_name FROM public.JAMES_MAILBOX t0 WHERE (t0.mailbox_name LIKE ? ESCAPE '\' AND t0.user_name = ? AND t0.mailbox_namespace = ?)} [code=0, state=42601]     at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:5278)     at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:5238)     at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:134)     at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:115)     at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)     at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:162)     at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:42)
    at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1311)
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1062)
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:912)
    at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:843)
    at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:601)     at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:297)     at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:314)     at reactor.core.publisher.MonoFlattenIterable.subscribeOrReturn(MonoFlattenIterable.java:87)
    ... 45 common frames omitted
Wrapped by: org.apache.james.mailbox.exception.MailboxException: Search of mailbox UserBound{namespace=Optional[#private], user=Optional[Username{localPart=pablo.pita, domainPart=Optional[Domain : pitagoral.com]}], mailboxNameExpression=org.apache.james.mailbox.model.search.PrefixedRegex@9365af5b} failed     at org.apache.james.mailbox.jpa.mail.JPAMailboxMapper.lambda$findMailboxWithPathLike$13(JPAMailboxMapper.java:175)
    at reactor.core.publisher.Flux.lambda$onErrorMap$29(Flux.java:6479)


Anyway, the emails somehow arrived at the destination, and I could also read emails from thunderbird.

The upgrade to OpenJPA 3.1.2 from version 3.1.0, particularly because OpenJPA 3.1.1 claims to solve some issues related to date/time mappings (http://openjpa.apache.org/openjpa-3.1.x.html#changes-in-openjpa-311), did not solve the issues.

Any feedback for the problems here ?

Pablo



---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org
For additional commands, e-mail: server-user-h...@james.apache.org

Reply via email to