Java 如何将MySQL持久性管理器与Jackrabbit单机版一起使用
我已经成功地使用了ApacheJackrabbit 2.4.3和2.6.0(在这两种情况下都是独立服务器),使用了默认配置,因此存储库存储在文件系统上 如何让它连接到MySQL后端?我不需要担心迁移,只需将其设置为新安装 尝试以下步骤后,Jackrabbit无法正确启动或填充数据库中的数据存储表,我在日志中发现此错误:Java 如何将MySQL持久性管理器与Jackrabbit单机版一起使用,java,jackrabbit,Java,Jackrabbit,我已经成功地使用了ApacheJackrabbit 2.4.3和2.6.0(在这两种情况下都是独立服务器),使用了默认配置,因此存储库存储在文件系统上 如何让它连接到MySQL后端?我不需要担心迁移,只需将其设置为新安装 尝试以下步骤后,Jackrabbit无法正确启动或填充数据库中的数据存储表,我在日志中发现此错误: ERROR [main] RepositoryImpl.java:366 failed to start Repository: Cannot instant
ERROR [main] RepositoryImpl.java:366 failed to start Repository: Cannot instantiate persistence manager org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager
javax.jcr.RepositoryException: Cannot instantiate persistence manager org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager
[... oodles of backtrace cut ...]
[编辑:这是完整的回溯]
2013-03-04 10:59:27.526 WARN [main] Slf4jLog.java:89 unavailable
javax.jcr.RepositoryException: Cannot instantiate persistence manager org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager
at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1353) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.RepositoryImpl.createVersionManager(RepositoryImpl.java:486) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:311) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.RepositoryImpl.create(RepositoryImpl.java:589) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.RepositoryContext.create(RepositoryContext.java:149) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.servlet.jackrabbit.JackrabbitRepositoryServlet.init(JackrabbitRepositoryServlet.java:109) ~[jackrabbit-standalone-2.6.0.jar:na]
at javax.servlet.GenericServlet.init(GenericServlet.java:241) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.jetty.Server.doStart(Server.java:224) [jackrabbit-standalone-2.6.0.jar:na]
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) [jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.standalone.Main.run(Main.java:173) [jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.standalone.Main.main(Main.java:60) [jackrabbit-standalone-2.6.0.jar:na]
Caused by: javax.jcr.RepositoryException: Could not load JDBC driver class org.gjt.mm.mysql.Driver
at org.apache.jackrabbit.core.util.db.ConnectionFactory.getDriverClass(ConnectionFactory.java:265) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.util.db.ConnectionFactory.createDataSource(ConnectionFactory.java:233) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.util.db.ConnectionFactory.getDataSource(ConnectionFactory.java:169) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.getDataSource(BundleDbPersistenceManager.java:569) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.init(BundleDbPersistenceManager.java:537) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager.init(MySqlPersistenceManager.java:51) ~[jackrabbit-standalone-2.6.0.jar:na]
at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1349) ~[jackrabbit-standalone-2.6.0.jar:na]
... 23 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) ~[na:1.6.0_27]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_27]
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) ~[na:1.6.0_27]
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) ~[na:1.6.0_27]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) ~[na:1.6.0_27]
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) ~[na:1.6.0_27]
at java.lang.Class.forName0(Native Method) ~[na:1.6.0_27]
at java.lang.Class.forName(Class.java:188) ~[na:1.6.0_27]
at org.apache.jackrabbit.core.util.db.ConnectionFactory.getDriverClass(ConnectionFactory.java:260) ~[jackrabbit-standalone-2.6.0.jar:na]
... 29 common frames omitted
我从一个干净的目录(空的/var/jackrabbit目录)开始,除了配置文件来自这里:
以下是我正在使用的启动脚本:
下面是运行的java过程:
java -XX:MaxPermSize=128m -Xmx512M -Xms128M -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1111 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=/opt/jackrabbit/startup/jmx.user -Dcom.sun.management.jmxremote.access.file=/opt/jackrabbit/startup/jmx.role -jar /opt/jackrabbit/jackrabbit-standalone-2.6.0.jar -h 127.0.0.1 -p 8080
我不认为我做的足够多,所以这很重要,但我使用的是MySQL 5.5.28-1
我对2.4.3和2.6.0都有上述问题
此外:
另外,我随后在Debian上安装了MySQL JDBC库:
apt-get install libmysql-java
MySqlPersistenceManager
尝试加载非常旧的驱动程序类org.gjt.mm.mysql.driver
。尝试使用更新的驱动程序类,即类com.mysql.jdbc.driver
。为此,您需要在repository.xml
和所有workspace.xml
文件中配置持久性管理器,如下所示:
<PersistenceManager ...>
...
<param name="driver" value="com.mysql.jdbc.Driver"/>
</PersistenceManager>
...
回答我自己的问题,尽管它没有直接回答:
我没有尝试使用jackrabbit独立版本,而是按照以下说明在Tomcat下成功运行了它:
这给了我所需要的;连接到MySQL数据存储的工作Jackrabbit实例。虽然这对任何遇到这种情况并特别需要使用Jackrabbit standalone的人都没有帮助,但我想说,在Tomcat下设置它对我来说要容易得多,因此值得考虑。为了用Apache Jackrabbit standalone加载MySQL驱动程序。您需要更新MANIFEST.MF中的
jackrabbit-stabdalone-x.x.x.jar
只需在文件底部添加一个类路径语句,例如:
类路径:lib/mysql-connector-java-5.1.25-bin.jar
我遇到了与您相同的问题,这是我识别MySQL驱动程序类的唯一方法。请执行以下操作
Nitesh您能追加
[…大量回溯剪辑…]
吗?刚刚完成,谢谢您的关注。它似乎很难找到org.gjt.mm.mysql.Driver
(或者com.mysql.jdbc.Driver
,我也尝试过),尽管我可以在jar文件中看到这些类,并且已经尝试了classpath选项-cp/usr/share/java/mysql-connector-java-5.1.16.jar
,我在您的评论中没有看到您在repository.xml
/workspace.xml
文件中更改了mysql驱动程序。
apt-get install libmysql-java
<PersistenceManager ...>
...
<param name="driver" value="com.mysql.jdbc.Driver"/>
</PersistenceManager>