You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Jerry Malcolm <te...@malcolms.com> on 2021/10/04 04:06:46 UTC

MySQL/MariaDB driver jar location?

I have a different issue in my migration from spring to jpa-guice.  I 
absolutely cannot get james/java to locate my jdbc driver.  I copied a 
working driver from my spring server and the associated 
james-database.properties to my jpa-guice server.  I played around with 
classpaths and ended up putting the mysql jar directly in the 
james-server-jpa-app.lib folder.  But no matter what I do,  I always get:

Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
         at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
         at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)

I'm using mysql, not maria.  But just in desperation, I downloaded the 
mariadb driver and put it in the lib folder as well.  I changed the 
properties file to call out the mariadb driver.  Got the same error.  It 
can't find mariadb driver either.  I changed it back to derby, and it 
worked.

So I've got mysql (that is working fine in my production server), 
mariadb, and derby drivers side by side in the same lib folder. Java 
finds 1 and can't find the other two.

I have a pretty good handle on how jar files, classpaths, loaders work.  
This one totally baffles me.  Is there something I need to change for 
the jpa-guice build or some place specific that I need to put the driver 
jar?


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
Benoit,

Thank you for getting this figured out.  I've never used an executable 
jar in a java command.  So I had no clue about these restrictions. But 
good to know.

I've moved back to spring temporarily.  But I'm interested in changing 
back to jpa-guice now that this appears to be resolved.

Thanks again.

Jerry

On 10/8/2021 5:34 AM, btellier@apache.org wrote:
> FYI I opened https://github.com/apache/james-project/pull/684 to clarify
> this issue.
>
> On 08/10/2021 15:48, btellier@apache.org wrote:
>> Problem sorted out:
>>
>> https://stackoverflow.com/questions/1708534/can-i-use-the-classpath-to-override-a-file-in-a-jar-that-is-being-run
>>
>> In short you can't override the classpath of the manifest file of the
>> target jar.
>>
>> However you could specify manually the classpath and the target Main class
>>
>> sudo java \
>>     -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>     -Dworking.directory=. \
>>     -Djdk.tls.ephemeralDHKeySize=2048 \
>>     -Dlogback.configurationFile=conf/logback.xml \
>>     -cp
>> "james-server-jpa-app.jar:james-server-jpa-app.lib/*:mariadb-java-client-2.7.2.jar"
>> \
>>     org.apache.james.JPAJamesServerMain
>>
>> This is actually what the JPAs docker images are doing.
>>
>> I will update the READMEs accordingly.
>>
>> Cheers,
>>
>> Benoit
>>
>> On 06/10/2021 08:06, Jerry Malcolm wrote:
>>> Benoit,
>>>
>>> I am still dead in the water.  I've spent the entire day trying things
>>> and digging into the code.
>>> - It works fine on the same build with the spring version
>>> - If FAILS on WINDOWS as well as Linux
>>> - Other jars in the same folder are loaded without problem
>>>
>>> I've tried putting the driver file in every folder I can think of. and
>>> tried both relative and fully qualified paths in classpath.  I
>>> expanded the driver jar file and pulled the Driver class setting up a
>>> com/mysql/jdbc/Driver folder path for the class file.  I've tried
>>> setting classpath externally and specifying classpath in the java
>>> command. Nothing works.
>>>
>>> I downloaded jpa source and dug into the code.  It is failing in jpa's
>>> DataSourceFactory.java on a simple java native classForName api.  It
>>> fails on the custom loader call, then tries again using native java in
>>> the catch block.  Failing there throws the exception.   I've used that
>>> method hundreds of times.  The three ways I know it can fail:
>>>
>>> - Class truly doesn't exist in classpath (I'm certain after days of
>>> testing that this is not the case)
>>> - Class is corrupted (but same jar file is loaded with no problem in
>>> the spring implementation
>>> - Classpath is missing or incorrect by the time the loader is called.
>>>
>>> Unfortunately, I have found no way to get a trace of the classpath
>>> used by the classloader. I know I'm passing in the correct classpath.
>>> Is there any possibility that the classpath could be altered prior to
>>> calling the jpa class resolver code?
>>>
>>> Is there any way you can try to reproduce this just to confirm or
>>> reject the thought that I'm going crazy?  It should only take a couple
>>> of minutes.  Simply explode the jpa-guice zip, change
>>> james-database.properties, and copy the driver file somewhere.  If it
>>> finds the driver for you, then I'll try to figure out what is
>>> different.  If it fails for you as well, maybe the two of us together
>>> can figure out what is wrong.
>>>
>>> Please advise.
>>>
>>> Thanks. I really appreciate your help.
>>>
>>> Jerry
>>>
>>>
>>> On 10/4/2021 7:21 PM, Jerry Malcolm wrote:
>>>> Benoit,
>>>>
>>>> Update to my earlier post below:
>>>>
>>>> - Uploaded spring implementation to a parallel directory on the same
>>>> server I'm setting up guice implementation on
>>>> - Tested out-of-the-box.  Server started clean.
>>>> - Edited james-database.properties and changed to mysql
>>>> - Copied the mysql driver to lib folder.
>>>> - Successfully started.  And I verified in the console logs that it
>>>> was indeed talking to the mysql server.
>>>>
>>>> So from what I have found,  out-of-the-box spring + mysql driver
>>>> works fine
>>>>
>>>> Out of the box guice (from the jpa-guice folder of the same build) +
>>>> maria/mysql cannot find driver jar file (see earlier post below for
>>>> more details)
>>>>
>>>> I am more than willing to add some debug statements in the jpa-guice
>>>> code if you can tell me what to look for and where to look.  But I'm
>>>> at a loss.
>>>>
>>>> Let me know what you think.
>>>>
>>>> Jerry
>>>>
>>>>
>>>> On 10/4/2021 6:50 PM, Jerry Malcolm wrote:
>>>>> Benoit,
>>>>>
>>>>> No success yet.  I started over completely clean:
>>>>>
>>>>> -- Refreshed latest master from git, rebuilt clean and re-deployed
>>>>> to my server.
>>>>> -- Created keystore using password in sample-configuration files.
>>>>> -- Out of the box, it started clean.
>>>>> -- I renamed james-database.properties to *.save and renamed
>>>>> james.database.mariadb.properties to james.database.properties
>>>>> -- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb
>>>>> site.
>>>>> -- I first put it in extensions-jars folder.  Failed
>>>>> -- I moved it to james-server-jpa.app.lib Failed.
>>>>>
>>>>> I actually need mysql, not maria.  I didn't try the test again with
>>>>> mysql this time.  But if mariadb doesn't work. I'm going to assume
>>>>> that mysql still will not work.
>>>>>
>>>>> Earlier in the day when I couldn't think of anything else to try, I
>>>>> went back to derby just to get past this problem temporarily, and I
>>>>> brought in all of my own customized conf xml files and added all of
>>>>> the associated jar files to extensions-jars just to see if JAMES
>>>>> could find other extension jar files.  I got a bunch of Guice
>>>>> @inject errors on my mailet implementations, which is a question for
>>>>> another day.  But the fact that it reported Guice errors means it
>>>>> found my custom mailet jar files without any problem.
>>>>>
>>>>> I also double-checked my java version, and I'm running 11.
>>>>>
>>>>> As I mentioned earlier, I copied the mysql jar from my running
>>>>> production server (probably 10-12 month old production JAMES 3.0.x,
>>>>> but not having any problems.)
>>>>>
>>>>> My next step is to install a parallel spring server from the same
>>>>> build on this same server using the same mariadb / mysql drivers and
>>>>> see if the problem moves to spring install or not. Not sure what
>>>>> I'll do either way to resolve the guice problem. But more
>>>>> information is good.
>>>>>
>>>>> I am also totally comfortable with adding log or println statements
>>>>> anywhere in the james code if you tell me what to log.
>>>>>
>>>>> Thanks again for your help.
>>>>>
>>>>> Jerry
>>>>>
>>>>>
>>>>> On 10/4/2021 3:11 AM, btellier@apache.org wrote:
>>>>>> Have you tried puttil the driver JAR in james-server-jpa-app.lib,
>>>>>> maybe?
>>>>>>
>>>>>> On 04/10/2021 12:02, Jerry Malcolm wrote:
>>>>>>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>>>>>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>> Extra driver needs to be explicitly added to the classpath.
>>>>>>>>>
>>>>>>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>>>>         -classpath
>>>>>>>>> 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>>>>>>         -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>>>>>> -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>>>>>>          -Dworking.directory=/root/
>>>>>>>>> org.apache.james.JPAJamesServerMain
>>>>>>>>>
>>>>>>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>>>>>>> Benoit,
>>>>>>>>
>>>>>>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>>>>>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>>>>>>> think I've got everything working, I'll pull again from the master
>>>>>>>> for my production build.
>>>>>>>>
>>>>>>> Benoit,
>>>>>>>
>>>>>>> No success using the classpath parameter.  Here's what I have for the
>>>>>>> full start up line:
>>>>>>>
>>>>>>> exec java \
>>>>>>>    -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>>>>>>    -classpath
>>>>>>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar'
>>>>>>>
>>>>>>> \
>>>>>>>    -Dworking.directory=. \
>>>>>>>    -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>>    -Dlogback.configurationFile=conf/logback.xml \
>>>>>>>    -Xms128m \
>>>>>>>    -Xmx512m \
>>>>>>>    -Dcom.sun.management.jmxremote=true \
>>>>>>>    -Dcom.sun.management.jmxremote.authenticate=false \
>>>>>>>    -jar james-server-jpa-app.jar \
>>>>>>>
>>>>>>> I checked that the jar file specified does exist in conf/lib/eternal.
>>>>>>>
>>>>>>> I tried using the relative path: conf/lib/external/....jar as well as
>>>>>>> the fully qualified path as specified in the command line above.  I'm
>>>>>>> still getting ClassNotFound exceptions on the mySQL class.
>>>>>>>
>>>>>>>>>     -
>>>>>>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     -
>>>>>>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>>
>>>>>>>>> Benoit
>>>>>>>>>
>>>>>>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>>>>>>> I have a different issue in my migration from spring to
>>>>>>>>>> jpa-guice.  I
>>>>>>>>>> absolutely cannot get james/java to locate my jdbc driver.  I
>>>>>>>>>> copied a
>>>>>>>>>> working driver from my spring server and the associated
>>>>>>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>>>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>>>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>>>>>>> always get:
>>>>>>>>>>
>>>>>>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>>>>>>            at
>>>>>>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>            at
>>>>>>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I'm using mysql, not maria.  But just in desperation, I
>>>>>>>>>> downloaded the
>>>>>>>>>> mariadb driver and put it in the lib folder as well. I changed the
>>>>>>>>>> properties file to call out the mariadb driver.  Got the same
>>>>>>>>>> error.
>>>>>>>>>> It can't find mariadb driver either.  I changed it back to
>>>>>>>>>> derby, and
>>>>>>>>>> it worked.
>>>>>>>>>>
>>>>>>>>>> So I've got mysql (that is working fine in my production server),
>>>>>>>>>> mariadb, and derby drivers side by side in the same lib folder.
>>>>>>>>>> Java
>>>>>>>>>> finds 1 and can't find the other two.
>>>>>>>>>>
>>>>>>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>>>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>>>>>>> change for the jpa-guice build or some place specific that I
>>>>>>>>>> need to
>>>>>>>>>> put the driver jar?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>
>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by "btellier@apache.org" <bt...@apache.org>.
FYI I opened https://github.com/apache/james-project/pull/684 to clarify
this issue.

On 08/10/2021 15:48, btellier@apache.org wrote:
> Problem sorted out:
>
> https://stackoverflow.com/questions/1708534/can-i-use-the-classpath-to-override-a-file-in-a-jar-that-is-being-run
>
> In short you can't override the classpath of the manifest file of the
> target jar.
>
> However you could specify manually the classpath and the target Main class
>
> sudo java \
>    -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>    -Dworking.directory=. \
>    -Djdk.tls.ephemeralDHKeySize=2048 \
>    -Dlogback.configurationFile=conf/logback.xml \
>    -cp
> "james-server-jpa-app.jar:james-server-jpa-app.lib/*:mariadb-java-client-2.7.2.jar"
> \
>    org.apache.james.JPAJamesServerMain
>
> This is actually what the JPAs docker images are doing.
>
> I will update the READMEs accordingly.
>
> Cheers,
>
> Benoit
>
> On 06/10/2021 08:06, Jerry Malcolm wrote:
>> Benoit,
>>
>> I am still dead in the water.  I've spent the entire day trying things
>> and digging into the code.
>> - It works fine on the same build with the spring version
>> - If FAILS on WINDOWS as well as Linux
>> - Other jars in the same folder are loaded without problem
>>
>> I've tried putting the driver file in every folder I can think of. and
>> tried both relative and fully qualified paths in classpath.  I
>> expanded the driver jar file and pulled the Driver class setting up a
>> com/mysql/jdbc/Driver folder path for the class file.  I've tried
>> setting classpath externally and specifying classpath in the java
>> command. Nothing works.
>>
>> I downloaded jpa source and dug into the code.  It is failing in jpa's
>> DataSourceFactory.java on a simple java native classForName api.  It
>> fails on the custom loader call, then tries again using native java in
>> the catch block.  Failing there throws the exception.   I've used that
>> method hundreds of times.  The three ways I know it can fail:
>>
>> - Class truly doesn't exist in classpath (I'm certain after days of
>> testing that this is not the case)
>> - Class is corrupted (but same jar file is loaded with no problem in
>> the spring implementation
>> - Classpath is missing or incorrect by the time the loader is called.
>>
>> Unfortunately, I have found no way to get a trace of the classpath
>> used by the classloader. I know I'm passing in the correct classpath. 
>> Is there any possibility that the classpath could be altered prior to
>> calling the jpa class resolver code?
>>
>> Is there any way you can try to reproduce this just to confirm or
>> reject the thought that I'm going crazy?  It should only take a couple
>> of minutes.  Simply explode the jpa-guice zip, change
>> james-database.properties, and copy the driver file somewhere.  If it
>> finds the driver for you, then I'll try to figure out what is
>> different.  If it fails for you as well, maybe the two of us together
>> can figure out what is wrong.
>>
>> Please advise.
>>
>> Thanks. I really appreciate your help.
>>
>> Jerry
>>
>>
>> On 10/4/2021 7:21 PM, Jerry Malcolm wrote:
>>> Benoit,
>>>
>>> Update to my earlier post below:
>>>
>>> - Uploaded spring implementation to a parallel directory on the same
>>> server I'm setting up guice implementation on
>>> - Tested out-of-the-box.  Server started clean.
>>> - Edited james-database.properties and changed to mysql
>>> - Copied the mysql driver to lib folder.
>>> - Successfully started.  And I verified in the console logs that it
>>> was indeed talking to the mysql server.
>>>
>>> So from what I have found,  out-of-the-box spring + mysql driver
>>> works fine
>>>
>>> Out of the box guice (from the jpa-guice folder of the same build) +
>>> maria/mysql cannot find driver jar file (see earlier post below for
>>> more details)
>>>
>>> I am more than willing to add some debug statements in the jpa-guice
>>> code if you can tell me what to look for and where to look.  But I'm
>>> at a loss.
>>>
>>> Let me know what you think.
>>>
>>> Jerry
>>>
>>>
>>> On 10/4/2021 6:50 PM, Jerry Malcolm wrote:
>>>> Benoit,
>>>>
>>>> No success yet.  I started over completely clean:
>>>>
>>>> -- Refreshed latest master from git, rebuilt clean and re-deployed
>>>> to my server.
>>>> -- Created keystore using password in sample-configuration files.
>>>> -- Out of the box, it started clean.
>>>> -- I renamed james-database.properties to *.save and renamed
>>>> james.database.mariadb.properties to james.database.properties
>>>> -- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb
>>>> site.
>>>> -- I first put it in extensions-jars folder.  Failed
>>>> -- I moved it to james-server-jpa.app.lib Failed.
>>>>
>>>> I actually need mysql, not maria.  I didn't try the test again with
>>>> mysql this time.  But if mariadb doesn't work. I'm going to assume
>>>> that mysql still will not work.
>>>>
>>>> Earlier in the day when I couldn't think of anything else to try, I
>>>> went back to derby just to get past this problem temporarily, and I
>>>> brought in all of my own customized conf xml files and added all of
>>>> the associated jar files to extensions-jars just to see if JAMES
>>>> could find other extension jar files.  I got a bunch of Guice
>>>> @inject errors on my mailet implementations, which is a question for
>>>> another day.  But the fact that it reported Guice errors means it
>>>> found my custom mailet jar files without any problem.
>>>>
>>>> I also double-checked my java version, and I'm running 11.
>>>>
>>>> As I mentioned earlier, I copied the mysql jar from my running
>>>> production server (probably 10-12 month old production JAMES 3.0.x,
>>>> but not having any problems.)
>>>>
>>>> My next step is to install a parallel spring server from the same
>>>> build on this same server using the same mariadb / mysql drivers and
>>>> see if the problem moves to spring install or not. Not sure what
>>>> I'll do either way to resolve the guice problem. But more
>>>> information is good.
>>>>
>>>> I am also totally comfortable with adding log or println statements
>>>> anywhere in the james code if you tell me what to log.
>>>>
>>>> Thanks again for your help.
>>>>
>>>> Jerry
>>>>
>>>>
>>>> On 10/4/2021 3:11 AM, btellier@apache.org wrote:
>>>>> Have you tried puttil the driver JAR in james-server-jpa-app.lib,
>>>>> maybe?
>>>>>
>>>>> On 04/10/2021 12:02, Jerry Malcolm wrote:
>>>>>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>>>>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> Extra driver needs to be explicitly added to the classpath.
>>>>>>>>
>>>>>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>>>        -classpath
>>>>>>>> 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>>>>>        -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>>>>> -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>>>>>         -Dworking.directory=/root/
>>>>>>>> org.apache.james.JPAJamesServerMain
>>>>>>>>
>>>>>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>>>>>> Benoit,
>>>>>>>
>>>>>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>>>>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>>>>>> think I've got everything working, I'll pull again from the master
>>>>>>> for my production build.
>>>>>>>
>>>>>> Benoit,
>>>>>>
>>>>>> No success using the classpath parameter.  Here's what I have for the
>>>>>> full start up line:
>>>>>>
>>>>>> exec java \
>>>>>>   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>>>>>   -classpath
>>>>>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar'
>>>>>>
>>>>>> \
>>>>>>   -Dworking.directory=. \
>>>>>>   -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>   -Dlogback.configurationFile=conf/logback.xml \
>>>>>>   -Xms128m \
>>>>>>   -Xmx512m \
>>>>>>   -Dcom.sun.management.jmxremote=true \
>>>>>>   -Dcom.sun.management.jmxremote.authenticate=false \
>>>>>>   -jar james-server-jpa-app.jar \
>>>>>>
>>>>>> I checked that the jar file specified does exist in conf/lib/eternal.
>>>>>>
>>>>>> I tried using the relative path: conf/lib/external/....jar as well as
>>>>>> the fully qualified path as specified in the command line above.  I'm
>>>>>> still getting ClassNotFound exceptions on the mySQL class.
>>>>>>
>>>>>>>>    -
>>>>>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>    -
>>>>>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> Benoit
>>>>>>>>
>>>>>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>>>>>> I have a different issue in my migration from spring to
>>>>>>>>> jpa-guice.  I
>>>>>>>>> absolutely cannot get james/java to locate my jdbc driver.  I
>>>>>>>>> copied a
>>>>>>>>> working driver from my spring server and the associated
>>>>>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>>>>>> always get:
>>>>>>>>>
>>>>>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>>>>>           at
>>>>>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>           at
>>>>>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I'm using mysql, not maria.  But just in desperation, I
>>>>>>>>> downloaded the
>>>>>>>>> mariadb driver and put it in the lib folder as well. I changed the
>>>>>>>>> properties file to call out the mariadb driver.  Got the same
>>>>>>>>> error.
>>>>>>>>> It can't find mariadb driver either.  I changed it back to
>>>>>>>>> derby, and
>>>>>>>>> it worked.
>>>>>>>>>
>>>>>>>>> So I've got mysql (that is working fine in my production server),
>>>>>>>>> mariadb, and derby drivers side by side in the same lib folder.
>>>>>>>>> Java
>>>>>>>>> finds 1 and can't find the other two.
>>>>>>>>>
>>>>>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>>>>>> change for the jpa-guice build or some place specific that I
>>>>>>>>> need to
>>>>>>>>> put the driver jar?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>
>>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>
>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by "btellier@apache.org" <bt...@apache.org>.
Problem sorted out:

https://stackoverflow.com/questions/1708534/can-i-use-the-classpath-to-override-a-file-in-a-jar-that-is-being-run

In short you can't override the classpath of the manifest file of the
target jar.

However you could specify manually the classpath and the target Main class

sudo java \
   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
   -Dworking.directory=. \
   -Djdk.tls.ephemeralDHKeySize=2048 \
   -Dlogback.configurationFile=conf/logback.xml \
   -cp
"james-server-jpa-app.jar:james-server-jpa-app.lib/*:mariadb-java-client-2.7.2.jar"
\
   org.apache.james.JPAJamesServerMain

This is actually what the JPAs docker images are doing.

I will update the READMEs accordingly.

Cheers,

Benoit

On 06/10/2021 08:06, Jerry Malcolm wrote:
> Benoit,
>
> I am still dead in the water.  I've spent the entire day trying things
> and digging into the code.
> - It works fine on the same build with the spring version
> - If FAILS on WINDOWS as well as Linux
> - Other jars in the same folder are loaded without problem
>
> I've tried putting the driver file in every folder I can think of. and
> tried both relative and fully qualified paths in classpath.  I
> expanded the driver jar file and pulled the Driver class setting up a
> com/mysql/jdbc/Driver folder path for the class file.  I've tried
> setting classpath externally and specifying classpath in the java
> command. Nothing works.
>
> I downloaded jpa source and dug into the code.  It is failing in jpa's
> DataSourceFactory.java on a simple java native classForName api.  It
> fails on the custom loader call, then tries again using native java in
> the catch block.  Failing there throws the exception.   I've used that
> method hundreds of times.  The three ways I know it can fail:
>
> - Class truly doesn't exist in classpath (I'm certain after days of
> testing that this is not the case)
> - Class is corrupted (but same jar file is loaded with no problem in
> the spring implementation
> - Classpath is missing or incorrect by the time the loader is called.
>
> Unfortunately, I have found no way to get a trace of the classpath
> used by the classloader. I know I'm passing in the correct classpath. 
> Is there any possibility that the classpath could be altered prior to
> calling the jpa class resolver code?
>
> Is there any way you can try to reproduce this just to confirm or
> reject the thought that I'm going crazy?  It should only take a couple
> of minutes.  Simply explode the jpa-guice zip, change
> james-database.properties, and copy the driver file somewhere.  If it
> finds the driver for you, then I'll try to figure out what is
> different.  If it fails for you as well, maybe the two of us together
> can figure out what is wrong.
>
> Please advise.
>
> Thanks. I really appreciate your help.
>
> Jerry
>
>
> On 10/4/2021 7:21 PM, Jerry Malcolm wrote:
>> Benoit,
>>
>> Update to my earlier post below:
>>
>> - Uploaded spring implementation to a parallel directory on the same
>> server I'm setting up guice implementation on
>> - Tested out-of-the-box.  Server started clean.
>> - Edited james-database.properties and changed to mysql
>> - Copied the mysql driver to lib folder.
>> - Successfully started.  And I verified in the console logs that it
>> was indeed talking to the mysql server.
>>
>> So from what I have found,  out-of-the-box spring + mysql driver
>> works fine
>>
>> Out of the box guice (from the jpa-guice folder of the same build) +
>> maria/mysql cannot find driver jar file (see earlier post below for
>> more details)
>>
>> I am more than willing to add some debug statements in the jpa-guice
>> code if you can tell me what to look for and where to look.  But I'm
>> at a loss.
>>
>> Let me know what you think.
>>
>> Jerry
>>
>>
>> On 10/4/2021 6:50 PM, Jerry Malcolm wrote:
>>> Benoit,
>>>
>>> No success yet.  I started over completely clean:
>>>
>>> -- Refreshed latest master from git, rebuilt clean and re-deployed
>>> to my server.
>>> -- Created keystore using password in sample-configuration files.
>>> -- Out of the box, it started clean.
>>> -- I renamed james-database.properties to *.save and renamed
>>> james.database.mariadb.properties to james.database.properties
>>> -- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb
>>> site.
>>> -- I first put it in extensions-jars folder.  Failed
>>> -- I moved it to james-server-jpa.app.lib Failed.
>>>
>>> I actually need mysql, not maria.  I didn't try the test again with
>>> mysql this time.  But if mariadb doesn't work. I'm going to assume
>>> that mysql still will not work.
>>>
>>> Earlier in the day when I couldn't think of anything else to try, I
>>> went back to derby just to get past this problem temporarily, and I
>>> brought in all of my own customized conf xml files and added all of
>>> the associated jar files to extensions-jars just to see if JAMES
>>> could find other extension jar files.  I got a bunch of Guice
>>> @inject errors on my mailet implementations, which is a question for
>>> another day.  But the fact that it reported Guice errors means it
>>> found my custom mailet jar files without any problem.
>>>
>>> I also double-checked my java version, and I'm running 11.
>>>
>>> As I mentioned earlier, I copied the mysql jar from my running
>>> production server (probably 10-12 month old production JAMES 3.0.x,
>>> but not having any problems.)
>>>
>>> My next step is to install a parallel spring server from the same
>>> build on this same server using the same mariadb / mysql drivers and
>>> see if the problem moves to spring install or not. Not sure what
>>> I'll do either way to resolve the guice problem. But more
>>> information is good.
>>>
>>> I am also totally comfortable with adding log or println statements
>>> anywhere in the james code if you tell me what to log.
>>>
>>> Thanks again for your help.
>>>
>>> Jerry
>>>
>>>
>>> On 10/4/2021 3:11 AM, btellier@apache.org wrote:
>>>> Have you tried puttil the driver JAR in james-server-jpa-app.lib,
>>>> maybe?
>>>>
>>>> On 04/10/2021 12:02, Jerry Malcolm wrote:
>>>>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>>>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> Extra driver needs to be explicitly added to the classpath.
>>>>>>>
>>>>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>>        -classpath
>>>>>>> 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>>>>        -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>>>> -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>>>>         -Dworking.directory=/root/
>>>>>>> org.apache.james.JPAJamesServerMain
>>>>>>>
>>>>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>>>>> Benoit,
>>>>>>
>>>>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>>>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>>>>> think I've got everything working, I'll pull again from the master
>>>>>> for my production build.
>>>>>>
>>>>> Benoit,
>>>>>
>>>>> No success using the classpath parameter.  Here's what I have for the
>>>>> full start up line:
>>>>>
>>>>> exec java \
>>>>>   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>>>>   -classpath
>>>>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar'
>>>>>
>>>>> \
>>>>>   -Dworking.directory=. \
>>>>>   -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>   -Dlogback.configurationFile=conf/logback.xml \
>>>>>   -Xms128m \
>>>>>   -Xmx512m \
>>>>>   -Dcom.sun.management.jmxremote=true \
>>>>>   -Dcom.sun.management.jmxremote.authenticate=false \
>>>>>   -jar james-server-jpa-app.jar \
>>>>>
>>>>> I checked that the jar file specified does exist in conf/lib/eternal.
>>>>>
>>>>> I tried using the relative path: conf/lib/external/....jar as well as
>>>>> the fully qualified path as specified in the command line above.  I'm
>>>>> still getting ClassNotFound exceptions on the mySQL class.
>>>>>
>>>>>>>    -
>>>>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>    -
>>>>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Best regards,
>>>>>>>
>>>>>>> Benoit
>>>>>>>
>>>>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>>>>> I have a different issue in my migration from spring to
>>>>>>>> jpa-guice.  I
>>>>>>>> absolutely cannot get james/java to locate my jdbc driver.  I
>>>>>>>> copied a
>>>>>>>> working driver from my spring server and the associated
>>>>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>>>>> always get:
>>>>>>>>
>>>>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>>>>           at
>>>>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>>>>>>>
>>>>>>>>
>>>>>>>>           at
>>>>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I'm using mysql, not maria.  But just in desperation, I
>>>>>>>> downloaded the
>>>>>>>> mariadb driver and put it in the lib folder as well. I changed the
>>>>>>>> properties file to call out the mariadb driver.  Got the same
>>>>>>>> error.
>>>>>>>> It can't find mariadb driver either.  I changed it back to
>>>>>>>> derby, and
>>>>>>>> it worked.
>>>>>>>>
>>>>>>>> So I've got mysql (that is working fine in my production server),
>>>>>>>> mariadb, and derby drivers side by side in the same lib folder.
>>>>>>>> Java
>>>>>>>> finds 1 and can't find the other two.
>>>>>>>>
>>>>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>>>>> change for the jpa-guice build or some place specific that I
>>>>>>>> need to
>>>>>>>> put the driver jar?
>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>
>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
Benoit,

I am still dead in the water.  I've spent the entire day trying things 
and digging into the code.
- It works fine on the same build with the spring version
- If FAILS on WINDOWS as well as Linux
- Other jars in the same folder are loaded without problem

I've tried putting the driver file in every folder I can think of. and 
tried both relative and fully qualified paths in classpath.  I expanded 
the driver jar file and pulled the Driver class setting up a 
com/mysql/jdbc/Driver folder path for the class file.  I've tried 
setting classpath externally and specifying classpath in the java 
command. Nothing works.

I downloaded jpa source and dug into the code.  It is failing in jpa's 
DataSourceFactory.java on a simple java native classForName api.  It 
fails on the custom loader call, then tries again using native java in 
the catch block.  Failing there throws the exception.   I've used that 
method hundreds of times.  The three ways I know it can fail:

- Class truly doesn't exist in classpath (I'm certain after days of 
testing that this is not the case)
- Class is corrupted (but same jar file is loaded with no problem in the 
spring implementation
- Classpath is missing or incorrect by the time the loader is called.

Unfortunately, I have found no way to get a trace of the classpath used 
by the classloader. I know I'm passing in the correct classpath.  Is 
there any possibility that the classpath could be altered prior to 
calling the jpa class resolver code?

Is there any way you can try to reproduce this just to confirm or reject 
the thought that I'm going crazy?  It should only take a couple of 
minutes.  Simply explode the jpa-guice zip, change 
james-database.properties, and copy the driver file somewhere.  If it 
finds the driver for you, then I'll try to figure out what is 
different.  If it fails for you as well, maybe the two of us together 
can figure out what is wrong.

Please advise.

Thanks. I really appreciate your help.

Jerry


On 10/4/2021 7:21 PM, Jerry Malcolm wrote:
> Benoit,
>
> Update to my earlier post below:
>
> - Uploaded spring implementation to a parallel directory on the same 
> server I'm setting up guice implementation on
> - Tested out-of-the-box.  Server started clean.
> - Edited james-database.properties and changed to mysql
> - Copied the mysql driver to lib folder.
> - Successfully started.  And I verified in the console logs that it 
> was indeed talking to the mysql server.
>
> So from what I have found,  out-of-the-box spring + mysql driver works 
> fine
>
> Out of the box guice (from the jpa-guice folder of the same build) + 
> maria/mysql cannot find driver jar file (see earlier post below for 
> more details)
>
> I am more than willing to add some debug statements in the jpa-guice 
> code if you can tell me what to look for and where to look.  But I'm 
> at a loss.
>
> Let me know what you think.
>
> Jerry
>
>
> On 10/4/2021 6:50 PM, Jerry Malcolm wrote:
>> Benoit,
>>
>> No success yet.  I started over completely clean:
>>
>> -- Refreshed latest master from git, rebuilt clean and re-deployed to 
>> my server.
>> -- Created keystore using password in sample-configuration files.
>> -- Out of the box, it started clean.
>> -- I renamed james-database.properties to *.save and renamed 
>> james.database.mariadb.properties to james.database.properties
>> -- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb 
>> site.
>> -- I first put it in extensions-jars folder.  Failed
>> -- I moved it to james-server-jpa.app.lib Failed.
>>
>> I actually need mysql, not maria.  I didn't try the test again with 
>> mysql this time.  But if mariadb doesn't work. I'm going to assume 
>> that mysql still will not work.
>>
>> Earlier in the day when I couldn't think of anything else to try, I 
>> went back to derby just to get past this problem temporarily, and I 
>> brought in all of my own customized conf xml files and added all of 
>> the associated jar files to extensions-jars just to see if JAMES 
>> could find other extension jar files.  I got a bunch of Guice @inject 
>> errors on my mailet implementations, which is a question for another 
>> day.  But the fact that it reported Guice errors means it found my 
>> custom mailet jar files without any problem.
>>
>> I also double-checked my java version, and I'm running 11.
>>
>> As I mentioned earlier, I copied the mysql jar from my running 
>> production server (probably 10-12 month old production JAMES 3.0.x, 
>> but not having any problems.)
>>
>> My next step is to install a parallel spring server from the same 
>> build on this same server using the same mariadb / mysql drivers and 
>> see if the problem moves to spring install or not. Not sure what I'll 
>> do either way to resolve the guice problem. But more information is 
>> good.
>>
>> I am also totally comfortable with adding log or println statements 
>> anywhere in the james code if you tell me what to log.
>>
>> Thanks again for your help.
>>
>> Jerry
>>
>>
>> On 10/4/2021 3:11 AM, btellier@apache.org wrote:
>>> Have you tried puttil the driver JAR in james-server-jpa-app.lib, 
>>> maybe?
>>>
>>> On 04/10/2021 12:02, Jerry Malcolm wrote:
>>>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>>>> Hello,
>>>>>>
>>>>>> Extra driver needs to be explicitly added to the classpath.
>>>>>>
>>>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>>        -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>>>        -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>>> -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>>>         -Dworking.directory=/root/ 
>>>>>> org.apache.james.JPAJamesServerMain
>>>>>>
>>>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>>>> Benoit,
>>>>>
>>>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>>>> think I've got everything working, I'll pull again from the master
>>>>> for my production build.
>>>>>
>>>> Benoit,
>>>>
>>>> No success using the classpath parameter.  Here's what I have for the
>>>> full start up line:
>>>>
>>>> exec java \
>>>>   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>>>   -classpath
>>>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar' 
>>>>
>>>> \
>>>>   -Dworking.directory=. \
>>>>   -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>   -Dlogback.configurationFile=conf/logback.xml \
>>>>   -Xms128m \
>>>>   -Xmx512m \
>>>>   -Dcom.sun.management.jmxremote=true \
>>>>   -Dcom.sun.management.jmxremote.authenticate=false \
>>>>   -jar james-server-jpa-app.jar \
>>>>
>>>> I checked that the jar file specified does exist in conf/lib/eternal.
>>>>
>>>> I tried using the relative path: conf/lib/external/....jar as well as
>>>> the fully qualified path as specified in the command line above.  I'm
>>>> still getting ClassNotFound exceptions on the mySQL class.
>>>>
>>>>>>    -
>>>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers 
>>>>>>
>>>>>>
>>>>>>
>>>>>>    -
>>>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml 
>>>>>>
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Benoit
>>>>>>
>>>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>>>> I have a different issue in my migration from spring to 
>>>>>>> jpa-guice.  I
>>>>>>> absolutely cannot get james/java to locate my jdbc driver.  I 
>>>>>>> copied a
>>>>>>> working driver from my spring server and the associated
>>>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>>>> always get:
>>>>>>>
>>>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>>>           at
>>>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 
>>>>>>>
>>>>>>>
>>>>>>>           at
>>>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I'm using mysql, not maria.  But just in desperation, I 
>>>>>>> downloaded the
>>>>>>> mariadb driver and put it in the lib folder as well. I changed the
>>>>>>> properties file to call out the mariadb driver.  Got the same 
>>>>>>> error.
>>>>>>> It can't find mariadb driver either.  I changed it back to 
>>>>>>> derby, and
>>>>>>> it worked.
>>>>>>>
>>>>>>> So I've got mysql (that is working fine in my production server),
>>>>>>> mariadb, and derby drivers side by side in the same lib folder. 
>>>>>>> Java
>>>>>>> finds 1 and can't find the other two.
>>>>>>>
>>>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>>>> change for the jpa-guice build or some place specific that I 
>>>>>>> need to
>>>>>>> put the driver jar?
>>>>>>>
>>>>>>>
>>>>>>> --------------------------------------------------------------------- 
>>>>>>>
>>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>>
>>>>>>>
>>>>>> --------------------------------------------------------------------- 
>>>>>>
>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
Benoit,

Update to my earlier post below:

- Uploaded spring implementation to a parallel directory on the same 
server I'm setting up guice implementation on
- Tested out-of-the-box.  Server started clean.
- Edited james-database.properties and changed to mysql
- Copied the mysql driver to lib folder.
- Successfully started.  And I verified in the console logs that it was 
indeed talking to the mysql server.

So from what I have found,  out-of-the-box spring + mysql driver works fine

Out of the box guice (from the jpa-guice folder of the same build) + 
maria/mysql cannot find driver jar file (see earlier post below for more 
details)

I am more than willing to add some debug statements in the jpa-guice 
code if you can tell me what to look for and where to look.  But I'm at 
a loss.

Let me know what you think.

Jerry


On 10/4/2021 6:50 PM, Jerry Malcolm wrote:
> Benoit,
>
> No success yet.  I started over completely clean:
>
> -- Refreshed latest master from git, rebuilt clean and re-deployed to 
> my server.
> -- Created keystore using password in sample-configuration files.
> -- Out of the box, it started clean.
> -- I renamed james-database.properties to *.save and renamed 
> james.database.mariadb.properties to james.database.properties
> -- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb 
> site.
> -- I first put it in extensions-jars folder.  Failed
> -- I moved it to james-server-jpa.app.lib Failed.
>
> I actually need mysql, not maria.  I didn't try the test again with 
> mysql this time.  But if mariadb doesn't work. I'm going to assume 
> that mysql still will not work.
>
> Earlier in the day when I couldn't think of anything else to try, I 
> went back to derby just to get past this problem temporarily, and I 
> brought in all of my own customized conf xml files and added all of 
> the associated jar files to extensions-jars just to see if JAMES could 
> find other extension jar files.  I got a bunch of Guice @inject errors 
> on my mailet implementations, which is a question for another day.  
> But the fact that it reported Guice errors means it found my custom 
> mailet jar files without any problem.
>
> I also double-checked my java version, and I'm running 11.
>
> As I mentioned earlier, I copied the mysql jar from my running 
> production server (probably 10-12 month old production JAMES 3.0.x, 
> but not having any problems.)
>
> My next step is to install a parallel spring server from the same 
> build on this same server using the same mariadb / mysql drivers and 
> see if the problem moves to spring install or not.  Not sure what I'll 
> do either way to resolve the guice problem.  But more information is 
> good.
>
> I am also totally comfortable with adding log or println statements 
> anywhere in the james code if you tell me what to log.
>
> Thanks again for your help.
>
> Jerry
>
>
> On 10/4/2021 3:11 AM, btellier@apache.org wrote:
>> Have you tried puttil the driver JAR in james-server-jpa-app.lib, maybe?
>>
>> On 04/10/2021 12:02, Jerry Malcolm wrote:
>>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>>> Hello,
>>>>>
>>>>> Extra driver needs to be explicitly added to the classpath.
>>>>>
>>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>>        -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>>        -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>>        -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>>         -Dworking.directory=/root/ 
>>>>> org.apache.james.JPAJamesServerMain
>>>>>
>>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>>> Benoit,
>>>>
>>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>>> think I've got everything working, I'll pull again from the master
>>>> for my production build.
>>>>
>>> Benoit,
>>>
>>> No success using the classpath parameter.  Here's what I have for the
>>> full start up line:
>>>
>>> exec java \
>>>   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>>   -classpath
>>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar' 
>>>
>>> \
>>>   -Dworking.directory=. \
>>>   -Djdk.tls.ephemeralDHKeySize=2048 \
>>>   -Dlogback.configurationFile=conf/logback.xml \
>>>   -Xms128m \
>>>   -Xmx512m \
>>>   -Dcom.sun.management.jmxremote=true \
>>>   -Dcom.sun.management.jmxremote.authenticate=false \
>>>   -jar james-server-jpa-app.jar \
>>>
>>> I checked that the jar file specified does exist in conf/lib/eternal.
>>>
>>> I tried using the relative path: conf/lib/external/....jar as well as
>>> the fully qualified path as specified in the command line above.  I'm
>>> still getting ClassNotFound exceptions on the mySQL class.
>>>
>>>>>    -
>>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers 
>>>>>
>>>>>
>>>>>
>>>>>    -
>>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml 
>>>>>
>>>>>
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Benoit
>>>>>
>>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>>> I have a different issue in my migration from spring to 
>>>>>> jpa-guice.  I
>>>>>> absolutely cannot get james/java to locate my jdbc driver.  I 
>>>>>> copied a
>>>>>> working driver from my spring server and the associated
>>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>>> always get:
>>>>>>
>>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>>           at
>>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 
>>>>>>
>>>>>>
>>>>>>           at
>>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 
>>>>>>
>>>>>>
>>>>>>
>>>>>> I'm using mysql, not maria.  But just in desperation, I 
>>>>>> downloaded the
>>>>>> mariadb driver and put it in the lib folder as well.  I changed the
>>>>>> properties file to call out the mariadb driver.  Got the same error.
>>>>>> It can't find mariadb driver either.  I changed it back to derby, 
>>>>>> and
>>>>>> it worked.
>>>>>>
>>>>>> So I've got mysql (that is working fine in my production server),
>>>>>> mariadb, and derby drivers side by side in the same lib folder. Java
>>>>>> finds 1 and can't find the other two.
>>>>>>
>>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>>> change for the jpa-guice build or some place specific that I need to
>>>>>> put the driver jar?
>>>>>>
>>>>>>
>>>>>> --------------------------------------------------------------------- 
>>>>>>
>>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
Benoit,

No success yet.  I started over completely clean:

-- Refreshed latest master from git, rebuilt clean and re-deployed to my 
server.
-- Created keystore using password in sample-configuration files.
-- Out of the box, it started clean.
-- I renamed james-database.properties to *.save and renamed 
james.database.mariadb.properties to james.database.properties
-- I downloaded a new mariadb-java-client-2.0.2.jar from the mariadb site.
-- I first put it in extensions-jars folder.  Failed
-- I moved it to james-server-jpa.app.lib Failed.

I actually need mysql, not maria.  I didn't try the test again with 
mysql this time.  But if mariadb doesn't work. I'm going to assume that 
mysql still will not work.

Earlier in the day when I couldn't think of anything else to try, I went 
back to derby just to get past this problem temporarily, and I brought 
in all of my own customized conf xml files and added all of the 
associated jar files to extensions-jars just to see if JAMES could find 
other extension jar files.  I got a bunch of Guice @inject errors on my 
mailet implementations, which is a question for another day.  But the 
fact that it reported Guice errors means it found my custom mailet jar 
files without any problem.

I also double-checked my java version, and I'm running 11.

As I mentioned earlier, I copied the mysql jar from my running 
production server (probably 10-12 month old production JAMES 3.0.x, but 
not having any problems.)

My next step is to install a parallel spring server from the same build 
on this same server using the same mariadb / mysql drivers and see if 
the problem moves to spring install or not.  Not sure what I'll do 
either way to resolve the guice problem.  But more information is good.

I am also totally comfortable with adding log or println statements 
anywhere in the james code if you tell me what to log.

Thanks again for your help.

Jerry


On 10/4/2021 3:11 AM, btellier@apache.org wrote:
> Have you tried puttil the driver JAR in james-server-jpa-app.lib, maybe?
>
> On 04/10/2021 12:02, Jerry Malcolm wrote:
>> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>>> Hello,
>>>>
>>>> Extra driver needs to be explicitly added to the classpath.
>>>>
>>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>>        -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>>        -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>>        -Dlogback.configurationFile=/root/conf/logback.xml \
>>>>         -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain
>>>>
>>>> Note that I did add extra instructions on the 3.7.0 release line.
>>> Benoit,
>>>
>>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>>> missed that in the release notes.  I'm just sandboxing now. Once I
>>> think I've got everything working, I'll pull again from the master
>>> for my production build.
>>>
>> Benoit,
>>
>> No success using the classpath parameter.  Here's what I have for the
>> full start up line:
>>
>> exec java \
>>   -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>>   -classpath
>> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar'
>> \
>>   -Dworking.directory=. \
>>   -Djdk.tls.ephemeralDHKeySize=2048 \
>>   -Dlogback.configurationFile=conf/logback.xml \
>>   -Xms128m \
>>   -Xmx512m \
>>   -Dcom.sun.management.jmxremote=true \
>>   -Dcom.sun.management.jmxremote.authenticate=false \
>>   -jar james-server-jpa-app.jar \
>>
>> I checked that the jar file specified does exist in conf/lib/eternal.
>>
>> I tried using the relative path: conf/lib/external/....jar as well as
>> the fully qualified path as specified in the command line above.  I'm
>> still getting ClassNotFound exceptions on the mySQL class.
>>
>>>>    -
>>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers
>>>>
>>>>
>>>>    -
>>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml
>>>>
>>>>
>>>> Best regards,
>>>>
>>>> Benoit
>>>>
>>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>>> I have a different issue in my migration from spring to jpa-guice.  I
>>>>> absolutely cannot get james/java to locate my jdbc driver.  I copied a
>>>>> working driver from my spring server and the associated
>>>>> james-database.properties to my jpa-guice server.  I played around
>>>>> with classpaths and ended up putting the mysql jar directly in the
>>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>>> always get:
>>>>>
>>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>>           at
>>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>>>>
>>>>>           at
>>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>>>>
>>>>>
>>>>> I'm using mysql, not maria.  But just in desperation, I downloaded the
>>>>> mariadb driver and put it in the lib folder as well.  I changed the
>>>>> properties file to call out the mariadb driver.  Got the same error.
>>>>> It can't find mariadb driver either.  I changed it back to derby, and
>>>>> it worked.
>>>>>
>>>>> So I've got mysql (that is working fine in my production server),
>>>>> mariadb, and derby drivers side by side in the same lib folder. Java
>>>>> finds 1 and can't find the other two.
>>>>>
>>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>>> work.  This one totally baffles me.  Is there something I need to
>>>>> change for the jpa-guice build or some place specific that I need to
>>>>> put the driver jar?
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by "btellier@apache.org" <bt...@apache.org>.
Have you tried puttil the driver JAR in james-server-jpa-app.lib, maybe?

On 04/10/2021 12:02, Jerry Malcolm wrote:
>
> On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>>
>> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>>> Hello,
>>>
>>> Extra driver needs to be explicitly added to the classpath.
>>>
>>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>>       -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>>       -javaagent:/root/libs/openjpa-3.1.2.jar \
>>>       -Dlogback.configurationFile=/root/conf/logback.xml \
>>>        -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain
>>>
>>> Note that I did add extra instructions on the 3.7.0 release line.
>>
>> Benoit,
>>
>> Thanks, I'll try that.  I did a git clone about a month ago.  So I
>> missed that in the release notes.  I'm just sandboxing now. Once I
>> think I've got everything working, I'll pull again from the master
>> for my production build.
>>
> Benoit,
>
> No success using the classpath parameter.  Here's what I have for the
> full start up line:
>
> exec java \
>  -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
>  -classpath
> 'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar'
> \
>  -Dworking.directory=. \
>  -Djdk.tls.ephemeralDHKeySize=2048 \
>  -Dlogback.configurationFile=conf/logback.xml \
>  -Xms128m \
>  -Xmx512m \
>  -Dcom.sun.management.jmxremote=true \
>  -Dcom.sun.management.jmxremote.authenticate=false \
>  -jar james-server-jpa-app.jar \
>
> I checked that the jar file specified does exist in conf/lib/eternal.
>
> I tried using the relative path: conf/lib/external/....jar as well as
> the fully qualified path as specified in the command line above.  I'm
> still getting ClassNotFound exceptions on the mySQL class.
>
>>
>>>
>>>   -
>>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers
>>>
>>>
>>>   -
>>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml
>>>
>>>
>>> Best regards,
>>>
>>> Benoit
>>>
>>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>>> I have a different issue in my migration from spring to jpa-guice.  I
>>>> absolutely cannot get james/java to locate my jdbc driver.  I copied a
>>>> working driver from my spring server and the associated
>>>> james-database.properties to my jpa-guice server.  I played around
>>>> with classpaths and ended up putting the mysql jar directly in the
>>>> james-server-jpa-app.lib folder.  But no matter what I do,  I
>>>> always get:
>>>>
>>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>>          at
>>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>>>>
>>>>          at
>>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>>>>
>>>>
>>>> I'm using mysql, not maria.  But just in desperation, I downloaded the
>>>> mariadb driver and put it in the lib folder as well.  I changed the
>>>> properties file to call out the mariadb driver.  Got the same error.
>>>> It can't find mariadb driver either.  I changed it back to derby, and
>>>> it worked.
>>>>
>>>> So I've got mysql (that is working fine in my production server),
>>>> mariadb, and derby drivers side by side in the same lib folder. Java
>>>> finds 1 and can't find the other two.
>>>>
>>>> I have a pretty good handle on how jar files, classpaths, loaders
>>>> work.  This one totally baffles me.  Is there something I need to
>>>> change for the jpa-guice build or some place specific that I need to
>>>> put the driver jar?
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
On 10/3/2021 11:36 PM, Jerry Malcolm wrote:
>
> On 10/3/2021 11:14 PM, btellier@apache.org wrote:
>> Hello,
>>
>> Extra driver needs to be explicitly added to the classpath.
>>
>> java -Djdk.tls.ephemeralDHKeySize=2048 \
>>       -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>>       -javaagent:/root/libs/openjpa-3.1.2.jar \
>>       -Dlogback.configurationFile=/root/conf/logback.xml \
>>        -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain
>>
>> Note that I did add extra instructions on the 3.7.0 release line.
>
> Benoit,
>
> Thanks, I'll try that.  I did a git clone about a month ago.  So I 
> missed that in the release notes.  I'm just sandboxing now. Once I 
> think I've got everything working, I'll pull again from the master for 
> my production build.
>
Benoit,

No success using the classpath parameter.  Here's what I have for the 
full start up line:

exec java \
  -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
  -classpath 
'james-server-jpa-app.lib/*:/usr/share/james/conf/lib/external/mysql-connector-java-8.0.26.jar' 
\
  -Dworking.directory=. \
  -Djdk.tls.ephemeralDHKeySize=2048 \
  -Dlogback.configurationFile=conf/logback.xml \
  -Xms128m \
  -Xmx512m \
  -Dcom.sun.management.jmxremote=true \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -jar james-server-jpa-app.jar \

I checked that the jar file specified does exist in conf/lib/eternal.

I tried using the relative path: conf/lib/external/....jar as well as 
the fully qualified path as specified in the command line above.  I'm 
still getting ClassNotFound exceptions on the mySQL class.

>
>>
>>   -
>> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers 
>>
>>
>>   -
>> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml 
>>
>>
>> Best regards,
>>
>> Benoit
>>
>> On 04/10/2021 11:06, Jerry Malcolm wrote:
>>> I have a different issue in my migration from spring to jpa-guice.  I
>>> absolutely cannot get james/java to locate my jdbc driver.  I copied a
>>> working driver from my spring server and the associated
>>> james-database.properties to my jpa-guice server.  I played around
>>> with classpaths and ended up putting the mysql jar directly in the
>>> james-server-jpa-app.lib folder.  But no matter what I do,  I always 
>>> get:
>>>
>>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>>          at
>>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 
>>>
>>>          at
>>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 
>>>
>>>
>>> I'm using mysql, not maria.  But just in desperation, I downloaded the
>>> mariadb driver and put it in the lib folder as well.  I changed the
>>> properties file to call out the mariadb driver.  Got the same error.
>>> It can't find mariadb driver either.  I changed it back to derby, and
>>> it worked.
>>>
>>> So I've got mysql (that is working fine in my production server),
>>> mariadb, and derby drivers side by side in the same lib folder. Java
>>> finds 1 and can't find the other two.
>>>
>>> I have a pretty good handle on how jar files, classpaths, loaders
>>> work.  This one totally baffles me.  Is there something I need to
>>> change for the jpa-guice build or some place specific that I need to
>>> put the driver jar?
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>>> For additional commands, e-mail: server-dev-help@james.apache.org
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Re: MySQL/MariaDB driver jar location?

Posted by Jerry Malcolm <te...@malcolms.com>.
On 10/3/2021 11:14 PM, btellier@apache.org wrote:
> Hello,
>
> Extra driver needs to be explicitly added to the classpath.
>
> java -Djdk.tls.ephemeralDHKeySize=2048 \
>       -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
>       -javaagent:/root/libs/openjpa-3.1.2.jar \
>       -Dlogback.configurationFile=/root/conf/logback.xml \
>        -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain
>
> Note that I did add extra instructions on the 3.7.0 release line.

Benoit,

Thanks, I'll try that.  I did a git clone about a month ago.  So I 
missed that in the release notes.  I'm just sandboxing now. Once I think 
I've got everything working, I'll pull again from the master for my 
production build.


>
>   -
> https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers 
>
>
>   -
> https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml 
>
>
> Best regards,
>
> Benoit
>
> On 04/10/2021 11:06, Jerry Malcolm wrote:
>> I have a different issue in my migration from spring to jpa-guice.  I
>> absolutely cannot get james/java to locate my jdbc driver.  I copied a
>> working driver from my spring server and the associated
>> james-database.properties to my jpa-guice server.  I played around
>> with classpaths and ended up putting the mysql jar directly in the
>> james-server-jpa-app.lib folder.  But no matter what I do,  I always 
>> get:
>>
>> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>>          at
>> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 
>>
>>          at
>> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 
>>
>>
>> I'm using mysql, not maria.  But just in desperation, I downloaded the
>> mariadb driver and put it in the lib folder as well.  I changed the
>> properties file to call out the mariadb driver.  Got the same error.
>> It can't find mariadb driver either.  I changed it back to derby, and
>> it worked.
>>
>> So I've got mysql (that is working fine in my production server),
>> mariadb, and derby drivers side by side in the same lib folder. Java
>> finds 1 and can't find the other two.
>>
>> I have a pretty good handle on how jar files, classpaths, loaders
>> work.  This one totally baffles me.  Is there something I need to
>> change for the jpa-guice build or some place specific that I need to
>> put the driver jar?
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
>> For additional commands, e-mail: server-dev-help@james.apache.org
>>
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>

Re: MySQL/MariaDB driver jar location?

Posted by "btellier@apache.org" <bt...@apache.org>.
Hello,

Extra driver needs to be explicitly added to the classpath.

java -Djdk.tls.ephemeralDHKeySize=2048 \
     -classpath 'james-server-jpa-app.lib/*:/path/to/driver.jar' \
     -javaagent:/root/libs/openjpa-3.1.2.jar \
     -Dlogback.configurationFile=/root/conf/logback.xml \
      -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain

Note that I did add extra instructions on the 3.7.0 release line.

 -
https://github.com/apache/james-project/tree/master/server/apps/jpa-app#using-alternative-jdbc-drivers

 -
https://github.com/apache/james-project/blob/master/server/apps/jpa-app/docker-compose.yml

Best regards,

Benoit

On 04/10/2021 11:06, Jerry Malcolm wrote:
> I have a different issue in my migration from spring to jpa-guice.  I
> absolutely cannot get james/java to locate my jdbc driver.  I copied a
> working driver from my spring server and the associated
> james-database.properties to my jpa-guice server.  I played around
> with classpaths and ended up putting the mysql jar directly in the
> james-server-jpa-app.lib folder.  But no matter what I do,  I always get:
>
> Caused by: java.lang.ClassNotFoundException: org.mysql.jdbc.Driver
>         at
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
>         at
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>
> I'm using mysql, not maria.  But just in desperation, I downloaded the
> mariadb driver and put it in the lib folder as well.  I changed the
> properties file to call out the mariadb driver.  Got the same error. 
> It can't find mariadb driver either.  I changed it back to derby, and
> it worked.
>
> So I've got mysql (that is working fine in my production server),
> mariadb, and derby drivers side by side in the same lib folder. Java
> finds 1 and can't find the other two.
>
> I have a pretty good handle on how jar files, classpaths, loaders
> work.  This one totally baffles me.  Is there something I need to
> change for the jpa-guice build or some place specific that I need to
> put the driver jar?
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org