我已经在玻璃鱼4中使用了jca-jca-2.6.4.rar部署了Jack兔子2.6.4。
当我使用以下配置(通过JDBC的Derby)时,一切都正常:
<PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.DerbyPersistenceManager">
<param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>
<param name="schemaObjectPrefix" value="${wsp.name}_"/>
</PersistenceManager>但是,当我切换到这个(通过数据源的Mysql)时:
<PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager">
<param name="url" value="jdbc/MySQLDataSource"/>
<param name="driver" value="javax.naming.InitialContext"/>
<param name="schemaObjectPrefix" value="${wsp.name}_"/>
</PersistenceManager>没有运行时属性数据库供应商:在部署时创建空表:在SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,中为‘java:comp/env/jcr/SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,’错误删除表: falsejava.naming.factory.url.pkgs=com.sun.enterprise.naming} at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:717) at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:484) at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:170) at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:138) . 70多个原因是: SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,中的‘java:comp/env/jcr/存储库’查找失败: javax.naming.NamingException:查找失败java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming} [根异常是javax.naming.CommunicationException: SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming,的通信异常com.sun.enterprise.naming.logicalName=java:comp/env/jcr/repository}根异常是java.lang.RuntimeException: javax.resource.ResourceException:未能创建存储库:无法实例化持久性管理器org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at javax.naming.InitialContext.lookup(InitialContext.java:在javax.naming.InitialContext.lookup(InitialContext.java:411) at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:613) . 73更多的原因是: javax.naming.CommunicationException: SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,的通信异常java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming,com.sun.enterprise.naming.logicalName=java:comp/env/jcr/repository}根异常是java.lang.RuntimeException: javax.resource.ResourceException:未能创建存储库:无法实例化持久性管理器org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) at javax.naming.InitialContext.lookup(InitialContext.java:411javax.naming.InitialContext.lookup(InitialContext.java:411) at com.sun.enterprise.naming.util.JndiNamingObjectFactory.create(JndiNamingObjectFactory.java:90) at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:745) at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:715) at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:159) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:471) . 77更多的原因是: java.lang.RuntimeException: javax.resource.ResourceException:未能创建存储库:无法实例化持久性管理器org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager在com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:200) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) at com.sun.enterprise。naming.impl.SerialContext.getObjectInstance(SerialContext.java:527) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:487) . 85更多原因是: javax.resource.ResourceException:未能创建存储库:无法实例化持久性管理器org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager at org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createRepository(JCAManagedConnectionFactory.java:220) at org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createConnectionFactory(JCAManagedConnectionFactory.java::153)在com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:156) . 88 ]]
我在Glassfish中配置了Mysql连接池和JDBC连接资源( JDBC /MySQLDataSource),并将mysql-连接器-java-5.1.26-bin.jar放在域/lib目录中。我可以通过Admin中的Glassfish JDBC连接池页面成功地平入数据库。
我是不是在JackRabbit PersistanceManager配置中遗漏了什么?
更新1
如果我不使用我的数据源,而是在我的PersistanceManager配置中使用JDBC来连接到数据库,它就会像预期的那样工作。
发布于 2013-10-28 21:57:43
事实证明,Mysql连接池没有正确配置。
为了使它正常工作,我必须设置以下属性:
我还必须在Url和URL字段中重复数据库和服务器名称。
jdbc:mysql://127.0.0.1:3306/db_name
此时,我不知道为什么会有Url和URL属性,但是将它们都设置为上面的URL是有效的。
https://stackoverflow.com/questions/19644294
复制相似问题