Не удалось создать экземпляр диспетчера персистентности org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager
Я развернул Jackrabbit 2.6.4 в Glassfish 4, используя jackrabbit-jca-2.6.4.rar.
Все работает, когда я использую следующую конфигурацию (Derby через JDBC):
<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>
Нет Runtime properties База данных Поставщик: null Создание таблиц в Deploy: false Удаление таблиц в Undeploy: false в класс com.pepedigital.omakase.template.boundary.TemplateManager: Не удалось выполнить поиск для "java:comp/env/jcr/repository" в 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.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.mpelserser..aroundInject(InjectionServicesImpl.java:138) ... еще 70 Вызвано: javax.naming.NamingException: не удалось выполнить поиск для 'java:comp/env/jcr/repository'в 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} [Исключением корня является 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:491) по адресу com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) на 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.enterpr ise.naming.impl.SerialContext.lookup (SerialContext.java:438) в javax.naming.InitialContext.lookup(InitialContext.java:411) в javax.naming.InitialContext.lookup(InitialContext.java:411) в com.sun.enterprise.naming.util..lookup(GlassfishNamingManagerImpl.java:715) на com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:159) на 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) в javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) на com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:527) на com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:487) ... еще 85 Причина: javax.resource.ResourceException: Не удалось создать хранилище: Не удалось создать экземпляр диспетчера сохраняемости org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager в org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createRepository(JCAManagedConnectionFactory.java:220) в org.apache.jackrabbit.jca.JCAManagedConnectionFactory.createConnectionFactory(JCAManagedConnectionFactory.jj.jpg.jpg)... еще 88]
Я настроил Mysql JDBC Connection Pool и JDBC Connection Resource (jdbc/MySQLDataSource) в Glassfish и поместил mysql-connector-java-5.1.26-bin.jar в каталог домена /lib. Я могу успешно проверить связь с базой данных через страницу пула соединений Glassfish JDBC в пользовательском интерфейсе администратора.
Я что-то упустил в конфигурации JackRabbit PersistanceManager?
ОБНОВЛЕНИЕ 1
Если я не использую свой источник данных и вместо этого использую URL-адрес JDBC в моей конфигурации PersistanceManager для подключения к базе данных, он работает как положено.
1 ответ
Оказывается, пул соединений Mysql JDBC настроен неправильно.
Чтобы заставить его работать, я должен был установить следующие свойства:
- пользователь
- пароль
- DatabaseName
- Название сервера
- Веб-сайт
- URL
Я также должен был повторить базу данных и имя сервера в полях URL и URL, например
JDBC: MySQL://127.0.0.1:3306/db_name
На данный момент я не уверен, почему существует URL-адрес и свойство URL-адреса, но настройка их обоих на вышеуказанный URL-адрес сработала.