2014-12-20 4 views
0

Я пытаюсь использовать neo4j в качестве резервного хранилища для Apache Isis, но похоже, что некоторые разработки могут потребоваться. Если я добавляю зависимость datanucleus-neo4j, кажется, что инициализация соединения neo4j JDO инициализируется, но Apache Isis ожидает другого типа StoreManager.Как использовать neo4j с Apache Isis?

Это исключение я получаю

org.datanucleus.store.neo4j.Neo4jStoreManager не может быть приведен к org.datanucleus.store.schema.SchemaAwareStoreManager

Как я могу использовать Neo4j в качестве бэк-магазин в Apache Isis?
Я читал о поддержке nosql в Isis, но разве это не часть текущей версии? http://isis.apache.org/components/objectstores/nosql/about.html

Спасибо!

В persistor.properties -

# 
# neo4j 
# 
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=neo4j:testDB 
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=sa 
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword= 

Соответствующая часть трассировки стека -

Caused by: java.lang.ClassCastException: org.datanucleus.store.neo4j.Neo4jStoreManager cannot be cast to org.datanucleus.store.schema.SchemaAwareStoreManager 
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.createSchema(DataNucleusApplicationComponents.java:125) 
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.init(DataNucleusApplicationComponents.java:111) 
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:97) 
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createDataNucleusApplicationComponentsIfRequired(DataNucleusPersistenceMechanismInstaller.java:112) 
at org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller.createObjectStore(DataNucleusPersistenceMechanismInstaller.java:89) 
at org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createPersistenceSession(PersistenceSessionFactory.java:94) 
at org.apache.isis.core.runtime.system.session.IsisSessionFactoryDefault.openSession(IsisSessionFactoryDefault.java:217) 
at org.apache.isis.core.runtime.system.context.IsisContextThreadLocal.openSessionInstance(IsisContextThreadLocal.java:149) 
at org.apache.isis.core.runtime.system.context.IsisContext.openSession(IsisContext.java:271) 
at org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.initializeServices(IsisSystemFixturesHookAbstract.java:154) 
at org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.init(IsisSystemFixturesHookAbstract.java:122) 
at org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:133) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104) 
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) 
at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) 
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
at com.google.inject.Scopes$1$1.get(Scopes.java:65) 
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) 
at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) 
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) 
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75) 
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73) 
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) 
at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73) 
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60) 
... 48 more 
+0

и стек трассировки? –

+0

Добавлен счетчик стека – Jeremy

ответ

3

Я не уверен, какие последствия, но я был в состоянии получить Neo4j хранилищу работая с Apache Isis, изменив org.apache.isis.objectstore.jdo.datanucleus.DataNucleusApplicationComponents#createSchema в «Isis Core Runtime module», чтобы проверить, поддерживает ли datanucleus StoreManager интерфейс SchemaAwareStoreManager перед литьем.

Данные сохраняются успешно.
Кажется слишком легким, чтобы быть законным улучшением, но я буду запускать его вкладчиками никогда.

private void createSchema(final Map<String, String> props, final Set<String> classesToBePersisted) { 
    final JDOPersistenceManagerFactory jdopmf = (JDOPersistenceManagerFactory)persistenceManagerFactory; 
    final NucleusContext nucleusContext = jdopmf.getNucleusContext(); 
    final StoreManager storeManager = nucleusContext.getStoreManager(); 
    if (storeManager instanceof SchemaAwareStoreManager) { 
     ((SchemaAwareStoreManager)storeManager).createSchema(classesToBePersisted, asProperties(props)); 
    } 
} 
+0

@Dan - Спасибо! http://isis.apache.org/components/objectstores/jdo/using-neo4j.html – Jeremy

1

Смотрите списки рассылки Apache Isis, original query и subsequent ticket

+0

Спасибо! Реализация в рекордные сроки! http://isis.apache.org/components/objectstores/jdo/using-neo4j.html – Jeremy