FYI I opened https://github.com/apache/james-project/pull/684 to clarify this issue.
On 08/10/2021 15:48, btell...@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, btell...@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, btell...@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-unsubscr...@james.apache.org >>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org >>>>>>>>> >>>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> >>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org >>>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org >>>>>> >>>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >>>>> For additional commands, e-mail: server-dev-h...@james.apache.org >>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >>>> For additional commands, e-mail: server-dev-h...@james.apache.org >>>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >>> For additional commands, e-mail: server-dev-h...@james.apache.org >>> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >> For additional commands, e-mail: server-dev-h...@james.apache.org >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org