Hi jerry,

Thanks for providing yet another example of how useless genai can be.

There is a sample configuration included in the zip file :
database.name=james
database.schema=public
database.host=postgres
database.port=5432
database.username=james
database.password=secret1


cheers
jean

On Fri, Jan 2, 2026 at 1:49 AM Jerry Malcolm <[email protected]> wrote:

> Thanks again.  You convinced me.  PostGreSQL it is.  I've spent the day
> digging deep into postgres and getting it installed, with the
> postgres/guice package 'almost' up and running.
>
> But (as usual) I hit one snag that I can't seem to get around. I've
> created postgres.properties and blob.properties in /opt/james/var/conf
> and set var/conf as the working directory.  I know it's processing the
> blob.properties (i had an omission, and it complained until i fixed
> it).  It screamed loudly when it initially couldn't find
> postgres.properties, and those errors went away when I created the
> postgres.properties file.  So it is definitely now finding that file.
> However, no matter what I put in that file (including one time with just
> trash characters), I always get the same error:
>
> 00:24:45.757 [main] INFO  org.apache.james.CONFIGURATION - Load
> configuration file /opt/james/var/conf/postgres.properties
> Exception in thread "main" java.lang.IllegalArgumentException: You need
> to specify username
>
> ChatGPT has told me two different formats for that file.  But neither
> makes any difference.  Always the same error above.  What am I doing wrong?
>
> version 1:
>
> host=db_pg_jwmbos.******.com
> port=5432
> database=jamesdb
> username=********
> password=***********
> maxConnections=10
>
> version 2:
>
> postgres.host=db_pg_jwmbos.******.com
> postgres.port=5432
> postgres.database=jamesdb
> postgres.username=*********
> postgres.password=*********
> postgres.maxConnections=10
>
>
>
>
> On 1/1/2026 11:23 AM, Jean Helou wrote:
> > Hi Jerry,
> >
> >> I'm doing a completely clean install, and I'm already set up to use
> > imapsync to populate the new instance.  So no  worries about migration.
> >
> > good to know
> >
> >> don't believe I care about spring vs guice.  I've never used a guice
> > version.  But spring-->guice should be transparent unless I've done
> custom
> > spring stuff, correct (which I haven't)?
> >
> > Exactly, unless you have custom spring extensions for james using either
> is
> > transparent for you
> >
> >> You said there were only the 4 pre-packaged assemblies with S3.  Does
> > that mean that (with a little work on my part), there 'could' be a
> > custom-packaged assembly created that would support mysql/s3?
> >
> > In theory: yes. However, I looked into how big a work it would be this
> > morning while writing my answer to see if I should suggest it and
> > unfortunately I expect it to be quite involved.
> >
> > there are 2 aspects :
> > - "short" term storage of mailqueue messages (mails that are being
> received
> > and processed or mails that are enqueued for sending, plus the various
> > error queues which may not be that short :D )
> > - long term storage of mailbox messages
> >
> > The first aspect can be managed through (a bit of tortuous) configuration
> > but the second requires code modifications
> > The only mysql support is based on openJPA [1] which is a generic java
> > persistence system. The code that writes the message to the database when
> > using openJPA is org.apache.james.mailbox.jpa.mail.JPAMessageMapper if
> you
> > look at it you will see that the implementation is quite straightforward
> in
> > the protected `org.apache.james.mailbox.jpa.mail.JPAMessageMapper#save`
> > method
> > The org.apache.james.mailbox.postgres.mail.PostgresMessageMapper is
> > structured a bit differently and if you look at the save method, it first
> > stores the message body ( private method saveBodyContent) then asks
> > the org.apache.james.mailbox.postgres.mail.dao.PostgresMessageDAO#insert
> to
> > store the message providing it with the message from which it extracts
> the
> > headers and the blobid of the saved body content.
> >
> > To enable such behaviour you would need to create a custom
> JPAMessageMapper
> > and probably a custom variant of JPAMailboxMessage that has a field to
> > store the blobId, create the correspond SQL migration to add the missing
> > column and do the dance around saving the body, then saving the message
> > etc. Since the MessageMapper is not created directly by the IOC container
> > you will need to implement a custom JPAMailboxSessionMapperFactory
> > Once you have done this, you will need to make the IOC container pick
> your
> > factory implementation over the standard one (whether using spring or
> > guice)
> >
> > An alternative but probably requiring even more work would be to create a
> > Mysql connector using Jooq (same as the postgres connector) thats
> probably
> > a lot more code.
> >
> > best regards,
> > Jean
> >
> >
> >
> >
> > On Thu, Jan 1, 2026 at 4:50 PM Jerry Malcolm <[email protected]>
> wrote:
> >
> >> Jean,
> >>
> >> Thank you so much for the detailed explanation.  One clarification that
> >> might make decisions easier... I'm doing a completely clean install, and
> >> I'm already set up to use imapsync to populate the new instance.  So no
> >> worries about migration.
> >>
> >> I don't believe I care about spring vs guice.  I've never used a guice
> >> version.  But spring-->guice should be transparent unless I've done
> >> custom spring stuff, correct (which I haven't)?
> >>
> >> So it really comes down to mysql vs. postgres, correct?  I've never used
> >> postgres.  But installing and learning it is doable. But before I head
> >> down that path, I would like to understand any other possibilities.  You
> >> said there were only the 4 pre-packaged assemblies with S3.  Does that
> >> mean that (with a little work on my part), there 'could' be a
> >> custom-packaged assembly created that would support mysql/s3?    I'm a
> >> programmer, but I don't purport to know the inner workings of James
> >> wiring.  But just for exploration purposes, how big a project would it
> >> be to make james use mysql with s3 instead of postgres with s3
> >> (obviously requiring some code changes and wiring).  But I'm just
> >> curious if this is something that is doable on my part?  If it's massive
> >> changes... then on to postgres.  But I'm not adverse to a little coding,
> >> especially if it reduces the learning curve for a new db environment.
> >>    Or if there are plans anytime in the immediate future for james to
> >> release a mysql/s3 option, then I might just pay a bit more for db
> >> storage and wait it out.
> >>
> >> Again, I appreciate you taking time on New Years Day to answer my
> >> questions  Thanks again.
> >>
> >> Jerry
> >>
> >>
> >> On 1/1/2026 3:38 AM, Jean Helou wrote:
> >>> Hello jerry,
> >>>
> >>> I'm afraid you are a bit out of luck: james has a modular architecture
> >> and
> >>> there are multiple implementations for most if not all modules, this
> >> means
> >>> that the number of module combination is very high.
> >>> the packaged assemblies cover some of the combinations, some assemblies
> >> are
> >>> configurable to make it possible to cover even more through
> >> configuration (
> >>> at the cost of increased package size )
> >>>
> >>> Unfortunately there is no pre-packaged assembly which supports both
> MySQL
> >>> AND S3 blobstore today.
> >>>
> >>> Only 4 assemblies have blobstore capabilities :
> >>> - james distributed
> >>> - james distributed pop3
> >>> - james postgresql
> >>> - scaling pulsar smtp ( this is a demo assembly for an SMTP only server
> >>> which uses the pulsar message broker/postgres and s3 )
> >>> so that really only leaves 2 options:
> >>> - james distributed
> >>> - james postgresql
> >>>
> >>> The former is designed for large enterprise deployments and relies on
> >>> complex systems
> >>> The latter is designed for small to medium deployments
> >>>
> >>> Given you are using the spring/mysql james server  today and only want
> s3
> >>> to optimize storage costs, I think your best bet is to go with  james
> >>> postgresql. The distributed version is designed for enterprise with
> tens
> >> or
> >>> hundreds of thousands of users, or for high volume servers. Cassandra
> is
> >>> not easy to operate.
> >>>
> >>> Unless you customized it quite heavily, the spring assembly should be
> >> using
> >>> the jpa implementation to access the database, this means you can use
> the
> >>> provided migration tool[1]  to move you data from JPA to Postgres.
> >>> You will have to build the migration tool from source as it is not
> >> included
> >>> in the officially published artifacts for the project.
> >>> This is a one shot operation after which you will be able to use the
> >>> james-server-postgres-app assembly which supports both postgres and s3
> >>> blobstore.
> >>>
> >>> The postgres server is an officially published artifact[2]  (there is a
> >> bug
> >>> in the website as the title for that link is
> >>> also  james-server-distributed-guice.zip but its only the title which
> is
> >>> incorrect, the link goes to the right place)
> >>> You can run both servers side by side for a while, repeatedly running
> the
> >>> migration tool (it is designed for this) until you are satisfied the
> >>> migration is complete with the limitation that the migration only goes
> >> one
> >>> way so mails you send/receive  with the postgres server will never be
> >> known
> >>> by the mysql server.
> >>> A basic configuration will
> >>> - store queued messages (either incoming or outgoing) in postgres
> >>> - store mailbox messages (long term storage for received or sent
> >> messages)
> >>> in s3
> >>> further configuration can store queued messages in s3 too if you want
> >>>
> >>> With regards to your compilation problems it's hard to tell without
> >> seeing
> >>> the actual errors, a full compilation running all tests takes about 5
> >> hours
> >>> (there are a lot of rather slow integration tests when you build
> >>> everything), so you probably want to either skip the tests or target a
> >>> specific project
> >>>
> >>> mvn clean package -DskipTests will build everything without running the
> >>> tests
> >>> mvn clean package -am -pl :$project-name will build a project and all
> its
> >>> dependencies running all the tests for all the built projects, you can
> >> also
> >>> add the -DskipTests to avoid running the tests
> >>>
> >>> if you encounter further errors don't hesitate to upload the output to
> a
> >>> pastebin or filebin of some kind and include the link, the last build
> for
> >>> master[3] and the 3.9.x[4] branch on the james CI are green so the
> build
> >>> should be ok
> >>>
> >>> Cheers,
> >>> Jean
> >>>
> >>> 1
> >>>
> >>
> https://github.com/apache/james-project/tree/master/server/apps/migration/core-data-jpa-to-pg
> >>> 2
> >>>
> >>
> https://www.apache.org/dyn/closer.lua/james/server/3.9.0/james-server-postgres-app.zip
> >>> 3 https://ci-builds.apache.org/job/james/job/ApacheJames/job/master/
> >>> 4 https://ci-builds.apache.org/job/james/job/ApacheJames/job/3.9.x/
> >>>
> >>> On Wed, Dec 31, 2025 at 7:31 PM Jerry Malcolm <[email protected]>
> >>> wrote:
> >>>
> >>>> I am so confused.  I have been trying for 5 days to upgrade to James
> >>>> 3.9.0 and begin using AWS S3 blobstore.   I've been using ChatGPT for
> >>>> guidance.  But I'm beginning to realize that ChatGPT is just making up
> >>>> answers on the fly, giving me completely different and wrong answers
> >>>> depending on the time of day.
> >>>>
> >>>> - first answer from ChatGPT - I should install 3.9.0 spring with
> >>>> JPA/mySQL and configure AWS S3 for blob storage (never could get james
> >>>> to even recognize that I had blob storage configured)
> >>>>
> >>>>     - revised answer from ChatGPT - Oh, you can't use blobstore with
> >>>> JPA/mySQL... you have to get Cassandra version to use blobstore....
> took
> >>>> over a day to make cassandra happy with it's Java 17 requirement while
> >>>> keeping James 3.9.0 happy with its required Java 21.   Now I can't
> find
> >>>> the 'required' James 3.9.0 Spring-Cassandra version zipfile to
> download
> >>>>
> >>>> - revised answer from ChatGPT - Oh, there is no Spring/Cassandra....
> you
> >>>> need to use 3.9.0 Guice/Cassandra, which is not recommended since
> Spring
> >>>> is strategic even though with last release spring was going away.....
> >>>> <head exploding icon>
> >>>>
> >>>> I'm sick of 'recommendation du-jour' from ChatGPT...  I've been on
> James
> >>>> / James-spring for over 20 years with mySQL.  I simply want to cut my
> >>>> horrendous RDS/mySQL expenses for James mail data by using S3 for blob
> >>>> storage.  I'll use any configuration available that I can get to work
> as
> >>>> long as I can have S3 blob storage.
> >>>>
> >>>> Oh, yeah... and I cloned the 3.9.0 release source from GitHub and
> tried
> >>>> to run maven.  maven ran for about 20 minutes, then crashed and burned
> >>>> on a bunch of errors.  So I had to go with the pre-built 3.9.0 zip.
> >>>>
> >>>> I have just one simple question.... What are my options for
> >>>> configuration in order to use AWS S3 for blob storage.
> >>>>
> >>>> Thx
> >>>>
> >>>> Jerry
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [email protected]
> >>>> For additional commands, e-mail: [email protected]
> >>>>
> >>>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to