2013-03-01 46 views
0

我已經使用默認配置成功使用Apache Jackrabbit 2.4.3和2.6.0(兩種情況下的獨立服務器),因此存儲庫存儲在文件系統中。如何使用Jackrabbit獨立版的MySQL持久性管理器

我該如何將它連接到MySQL後端呢?我不需要擔心遷移,只需將其設置爲全新安裝即可。

嘗試下面的步驟後,兔崽子無法正常啓動或填充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 

什麼我迄今所做的:

我創建了兔崽子數據庫/用戶,我可以連接到沒有問題:

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

我開始用乾淨的石板(空的/ var /兔崽子目錄),但在配置文件來自這裏: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) 

另外,我後來安裝了MySQL JDBC庫在Debian:

apt-get install libmysql-java 
+0

你Coud追加'[...回溯切...巨量]'? – 2013-03-04 09:01:43

+0

剛剛完成,感謝您的期待。它似乎無法找到'org.gjt.mm.mysql.Driver'(或者我嘗試過的'com.mysql.jdbc.Driver'),儘管我可以在jar中看到這些類文件,並且已經嘗試了類路徑選項'-cp/usr/share/java/mysql-connector-java-5.1.16.jar' – fazy 2013-03-04 11:02:45

回答

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> 
+0

謝謝,我也已經試過這個了(見上面的註釋)。 – fazy 2013-03-04 15:38:28

+0

嗯,我沒有看到你的任何評論,你改變了'repository.xml' /'workspace.xml'文件中的MySQL驅動程序。 – 2013-03-04 15:55:12

0

回答我的問題,雖然它不直接答案它:

相反試圖使用兔崽子,單機版,我已經成功地得到它運行Tomcat下,按照這裏的說明:

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

這給了我所需要的東西;一個工作的Jackrabbit實例,連接到MySQL數據存儲。雖然這並不能幫助任何遇到這種情況並特別需要使用Jackrabbit獨立的人,但我會說在Tomcat下設置它對我來說更容易,所以值得考慮。

1

爲了使用Apache Jackrabbit獨立加載MySQL驅動程序。您需要更新MANIFEST.MF中的jackrabbit-stabndalone-x.x.x.jar

只需添加一個類路徑語句將文件等的底部:

類路徑:LIB/MySQL的連接器的Java-5.1.25-bin.jar

我和你有同樣的問題,這是我能夠識別MySQL驅動程序類的唯一方法。

0

請做以下活動。

  1. un-jar獨立服務器jar(在我的情況下是:jackrabbit-standalone-2.8.3)。你會看到很多文件夾。其中你會發現兩個文件夾。 1.com 2. org。

  2. Un-jar mysql-connector-java-5.1.30-bin。你會發現上面提到的兩個文件夾。進入這兩個文件夾並複製git(org)和mysql(com)

  3. 分別粘貼到步驟1的文件夾中。並重新啓動獨立服務器。

問候, Nitesh

相關問題