私は、JavaからSQLiteにアクセスするにはCommons DBCPを良く使う。他のDBに切り替えるときも楽そうだしマルチスレッドで何かと助かるし。
んで、こいつから実際のSQLiteのJDBCドライバを読み込む訳だが、そのドライバが、まだ何もしていないのに、ただclassを読み込むだけでエクセプションを起こすでござる。
直接の原因はlog4jのjarが無いと言っているんだけど、私はlog4jは使わんのでjava.util.loggingだし。つか最近まで普通に動いてたのに。
んで犯人はActiveMQのjar(activemq-all.jar)がクラスパスの中に紛れていたこと。
slf4jもこのactivemq-all.jarに含まれていたのでlog4jのjarを探しに行ってしまったのね。
ちなみにactivemq-all.jarが紛れ込んだ原因は、SugerSyncをLinuxでrsyncで使う方法の誤り…ややこしい。
んで、こいつから実際のSQLiteのJDBCドライバを読み込む訳だが、そのドライバが、まだ何もしていないのに、ただclassを読み込むだけでエクセプションを起こすでござる。
直接の原因はlog4jのjarが無いと言っているんだけど、私はlog4jは使わんのでjava.util.loggingだし。つか最近まで普通に動いてたのに。
んで犯人はActiveMQのjar(activemq-all.jar)がクラスパスの中に紛れていたこと。
slf4jもこのactivemq-all.jarに含まれていたのでlog4jのjarを探しに行ってしまったのね。
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.sqlite.JDBC'at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)at org.apache.commons.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098)at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350)at ほげほげ.initConnectionPool(Utils.java:145)at ほげほげ.exec(ふがふが.java:183)at ほげほげ.main(ふがふが.java:65)Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.sqlite.JDBCat java.base/java.lang.Class.forName0(Native Method)at java.base/java.lang.Class.forName(Class.java:467)at java.base/java.lang.Class.forName(Class.java:458)at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1415)... 6 moreCaused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger [in thread "main"]at org.apache.logging.slf4j.SLF4JServiceProvider.initialize(SLF4JServiceProvider.java:56)at org.slf4j.LoggerFactory.bind(LoggerFactory.java:199)at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:186)at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:496)at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:482)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:431)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:457)at org.sqlite.util.LoggerFactory$SLF4JLogger.<init>(LoggerFactory.java:78)at org.sqlite.util.LoggerFactory.getLogger(LoggerFactory.java:32)at org.sqlite.JDBC.<clinit>(JDBC.java:26)at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1169)at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:341)at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:104)at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:138)at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:546)at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:496)at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:707)at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:672)at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1256)at java.sql/java.sql.DriverManager.ensureDriversInitialized(DriverManager.java:553)at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:382)at org.apache.commons.dbcp.BasicDataSource.<clinit>(BasicDataSource.java:57)at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:167)
ちなみにactivemq-all.jarが紛れ込んだ原因は、SugerSyncをLinuxでrsyncで使う方法の誤り…ややこしい。












