¿Cómo puedo usar la interfaz webadmin con una instancia incorporada de Neo4j 2.0?
spring-data-neo4j (3)
Tengo un proyecto que se ha estado ejecutando con una interfaz de administrador web incorporada de Neo4j 1.8.2 plus.
Ahora actualicé el proyecto para ejecutarlo con el último Neo4j 2.0.1. Aunque hubo algunos obstáculos durante ese curso (ya que estoy utilizando Spring Data Neo4j) al final todo salió bien.
Pero actualmente estoy atrapado en conseguir que el administrador web se ejecute con él.
Cualquier consejo sería muy apreciado.
Aquí está mi configuración que estaba usando para la versión 1.8
(clase de configuración a la que se hace referencia en los fragmentos)
package com.example;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.MapConfiguration;
import org.neo4j.server.configuration.Configurator;
import org.neo4j.server.configuration.ThirdPartyJaxRsPackage;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Neo4jServerConfig implements Configurator {
private Configuration config;
public Neo4jServerConfig(Map<String, String> config) {
this.config = new MapConfiguration(config);
}
@Override
public Configuration configuration() {
return config;
}
@Override
public Map<String, String> getDatabaseTuningProperties() {
return null;
}
@Override
public Set<ThirdPartyJaxRsPackage> getThirdpartyJaxRsClasses() {
return new HashSet<>();
}
@Override
public Set<ThirdPartyJaxRsPackage> getThirdpartyJaxRsPackages() {
return new HashSet<>();
}
}
Y las definiciones de frijol ... ... ... ...
Como se mencionó ... esto funciona como se esperaba para el 1.8 integrado Neo4j.
Pero la inicialización bajo Neo4j 2.0 cambió bastante. Así que me vi obligado a usar las siguientes definiciones de bean para que todo vuelva a funcionar
<!-- neo4j server configuration -->
<util:map id="neo4jConfig">
<entry key="allow_store_upgrade" value="true"/>
<entry key="enable_remote_shell" value="true"/>
<entry key="online_backup_enabled" value="true"/>
<entry key="node_auto_indexing" value="true"/>
<entry key="node_keys_indexable" value="id,name,type,__type__"/>
<entry key="relationship_auto_indexing" value="true"/>
</util:map>
<bean id="graphDbFactory" class="org.neo4j.graphdb.factory.GraphDatabaseFactory"/>
<bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newEmbeddedDatabaseBuilder">
<constructor-arg index="0" value="${neo4j.db.path}"/>
</bean>
<bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" factory-method="setConfig">
<constructor-arg ref="neo4jConfig"/>
</bean>
<bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal" factory-method="newGraphDatabase" destroy-method="shutdown" />
Después de eso obtengo marcadores de error en esta definición de frijol
<bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper" init-method="start" destroy-method="stop">
<constructor-arg index="0" ref="graphDatabaseService" />
<constructor-arg index="1" ref="config"/>
</bean>
Primero, el "org.neo4j.server.WrappingNeoServerBootstrapper" ahora está en desuso, ¿hay alguna alternativa que pueda usar?
Y en segundo lugar, se queja de constructor-arg incorrecto "graphDatabaseService" ... dice "bean debe ser de org.neo4j.kernel.GraphDatabaseAPI" (que también está en desuso)
El servidor se inicia (al menos, lo que puedo ver en mis registros de embarcadero) sin errores, pero al intentar navegar a localhost: 28473 termina sin respuesta.
¿Cualquier pista?
Gracias por adelantado.
WrappingNeoServerBootstrapper y GraphDatabaseAPI están en desuso, pero no hay alternitve por ahora ... Entonces debes usarlos.
Para ti, este es un código de muestra de mi aplicación, donde webadmin se inicia con un servidor neo4j 2.0.1 integrado:
val graphdb = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(DBPath)
.loadPropertiesFromFile(neo4jPropertiesPath)
.newGraphDatabase()
.asInstanceOf[GraphDatabaseAPI}
val srv = new WrappingNeoServerBootstrapper(graphdb, config);
srv.start()
Por lo tanto, debe convertir su "graphDatabaseService" en "GraphDatabaseAPI". Perdón, no sé cómo hacerlo con la primavera ... pero puedes hacer un envoltorio de WrappingNeoServerBootstrapper con el tipo correcto.
Aclamaciones
Me tomó más tiempo del que me importa admitir para hacer que esto funcione. Por favor, eche un vistazo a este pom para las dependencias, básicamente 2 incluye para neo4j-server y 2 para Jersey. También debe configurar WrappingNeoServerBootstrapper (obsoleto).
Mi POM excluye el registro CH.QOS de Neo4J a favor de mi propia configuración de registro.
También he usado Spring y he externalizado la mayoría de las configuraciones. Puedes ver ese archivo aquí .
Una vez hecho ese pequeño lote, simplemente acceda a localhost en el puerto 7474.
<util:map id="config">
<entry key="remote_shell_enabled" value="true"/>
</util:map>
<bean id="graphDbFactory" class="org.neo4j.graphdb.factory.GraphDatabaseFactory"/>
<bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newEmbeddedDatabaseBuilder">
<constructor-arg value="${neo4j.datastore}"/>
</bean>
<bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" factory-method="setConfig">
<constructor-arg ref="config"/>
</bean>
<bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal" factory-method="newGraphDatabase"
destroy-method="shutdown"/>
<bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper" init-method="start"
destroy-method="stop">
<constructor-arg ref="graphDatabaseService"/>
</bean>
Así que verificado esto en OSX; Para que quede claro una vez que agregue las actualizaciones de POM y la configuración de primavera, eso es todo lo que necesita hacer. Luego simplemente navegando a localhost: 7474 le da su gráfico de objetos.