0

我已经使用默认配置成功使用了 Apache Jackrabbit 2.4.3 和现在的 2.6.0(两种情况下的独立服务器),因此存储库存储在文件系统上。

我怎样才能让它连接到 MySQL 后端呢?我不需要担心迁移,只需将其设置为全新安装即可。

尝试以下步骤后,Jackrabbit 无法正确启动或填充数据库中的 DATASTORE 表,我在日志中发现此错误:

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

到目前为止我所做的:

我已经创建了 Jackrabbit 数据库/用户,我可以毫无问题地连接:

mysql -D jackrabbit -u jackrabbit -h localhost -pjackrabbit

我从一个干净的石板开始(空 /var/jackrabbit 目录),除了配置文件来自这里:https ://raw.github.com/wiki/jackalope/jackalope/files/repository.xml

这是我正在使用的启动脚本:https ://github.com/sixty-nine/Jackrabbit-startup-script

这是运行的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 中都遇到了上述问题。

还:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

另外,我随后在 Debian 上安装了 MySQL JDBC 库:

apt-get install libmysql-java
4

4 回答 4

1

MySqlPersistenceManager尝试加载org.gjt.mm.mysql.Driver非常旧的驱动程序类。尝试使用更新的驱动程序类,com.mysql.jdbc.Driver而不是类。为此,您需要在repository.xml和所有workspace.xml文件中配置持久性管理器,如下所示:

<PersistenceManager ...>
    ...
    <param name="driver" value="com.mysql.jdbc.Driver"/>
</PersistenceManager>
于 2013-03-04T13:52:14.167 回答
1

为了使用 Apache Jackrabbit-standalone 加载 MySQL 驱动程序。您将需要更新jackrabbit-stabndalone-x.x.x.jarMANIFEST.MF 中的内容。

只需在文件底部添加一个 Class-Path 语句,例如:

类路径:lib/mysql-connector-java-5.1.25-bin.jar

我和你有同样的问题,这是我可以让 MySQL 驱动程序类被识别的唯一方法。

于 2013-06-04T15:38:51.840 回答
0

回答我自己的问题,虽然它没有直接回答:

我没有尝试使用jackrabbit-standalone版本,而是按照此处的说明成功地让它在Tomcat下运行:

https://github.com/jackalope/jackalope/wiki/Running-jackrabbit-in-tomcat-with-mysql

这给了我我需要的东西;一个连接到 MySQL 数据存储的工作 Jackrabbit 实例。尽管这对遇到此问题且特别需要独立使用 Jackrabbit 的任何人都没有帮助,但我想说在 Tomcat 下设置它对我来说更容易,因此值得考虑。

于 2013-03-04T15:42:49.357 回答
0

请进行以下活动。

  1. 解压独立服务器 jar(在我的例子中是:jackrabbit-standalone-2.8.3)。你会看到很多文件夹。其中你会发现两个文件夹。1.com 2.组织。

  2. 解压 mysql-connector-java-5.1.30-bin。再次你会发现上面提到的两个文件夹。进入两个文件夹并复制 git(org) 和 mysql(com)

  3. 分别粘贴到步骤 1 的文件夹中。并重新启动独立服务器。

问候, Nitesh

于 2016-11-07T14:40:50.850 回答