0

我使用 jackrabbit-jca-2.6.4.rar 在 Glassfish 4 中部署了 Jackrabbit 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>

没有运行时属性数据库供应商:null 在部署时创建表:false 在取消部署时删除表:false 进入类 com.pepedigital.omakase.template.boundary.TemplateManager:在 SerialContext [ 中查找“java:comp/env/jcr/repository”失败 [ 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.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:717) 在 com.sun.enterprise.container.common .impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:484) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:170) 在 org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:138) ... 70 更多原因:javax.naming.NamingException:在 SerialContext[myEnv={ 中查找“java:comp/env/jcr/repository”失败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} [根异常是 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。逻辑名称=java:comp/env/jcr/repository} [根异常是 java.lang.RuntimeException:javax.resource.ResourceException:无法创建存储库:无法实例化持久性管理器 org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager]] 在 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:411) 在 javax.naming.InitialContext.lookup(InitialContext.java:411) 在 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] 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:513) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) 在 javax.naming。 InitialContext.lookup(InitialContext.java:411) at javax.naming.InitialContext.lookup(InitialContext.java:411) at com.sun.enterprise.naming.util.JndiNamingObjectFactory.create(JndiNamingObjectFactory.java:90) 在 com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:715) 在 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:无法创建存储库:无法在 com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:200 实例化持久性管理器 org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager ) 在 com.sun.enterprise 的 javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)。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.jca.JCAManagedConnectionFactory 的 org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createRepository(JCAManagedConnectionFactory.java:220) 实例化持久性管理器 org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager .createConnectionFactory(JCAManagedConnectionFactory.java:153) 在 com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java:156) ... 88 更多]]查找(SerialContext.java:487)... 85 更多原因:javax.resource.ResourceException:无法创建存储库:无法在 org.apache.jackrabbit 实例化持久性管理器 org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager .jca.JCAManagedConnectionFactory.createRepository(JCAManagedConnectionFactory.java:220) 在 org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createConnectionFactory(JCAManagedConnectionFactory.java:153) 在 com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java :156) ... 88 更多 ]]查找(SerialContext.java:487)... 85 更多原因:javax.resource.ResourceException:无法创建存储库:无法在 org.apache.jackrabbit 实例化持久性管理器 org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager .jca.JCAManagedConnectionFactory.createRepository(JCAManagedConnectionFactory.java:220) 在 org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createConnectionFactory(JCAManagedConnectionFactory.java:153) 在 com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance(ConnectorObjectFactory.java :156) ... 88 更多 ]]com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance( ConnectorObjectFactory.java:156) ... 88 更多]]com.sun.enterprise.resource.naming.ConnectorObjectFactory.getObjectInstance( ConnectorObjectFactory.java:156) ... 88 更多]]

我在 Glassfish 中配置了 Mysql JDBC 连接池和 JDBC 连接资源(jdbc/MySQLDataSource),并将 mysql-connector-java-5.1.26-bin.jar 放在 domain/lib 目录中。我可以通过管理 UI 中的 Glassfish JDBC 连接池页面成功 ping 数据库。

我在 JackRabbit PersistanceManager 配置中遗漏了什么吗?

更新 1

如果我不使用我的数据源,而是在我的 PersistanceManager 配置中使用 JDBC URL 连接到数据库,它会按预期工作。

4

1 回答 1

0

原来是Mysql JDBC连接池配置不正确。

为了让它工作,我必须设置以下属性:

  • 用户
  • 密码
  • 数据库名称
  • 服务器名称
  • 网址
  • 网址

我还必须在 URL 和 URL 字段中重复数据库和服务器名称,例如

jdbc:mysql://127.0.0.1:3306/db_name

在这一点上,我不确定为什么会有一个 Url 和一个 URL 属性,但是将它们都设置为上述 URL 是可行的。

于 2013-10-28T21:57:43.347 回答