neo4j-contrib / neo4j-apoc-procedures

Awesome Procedures On Cypher for Neo4j - codenamed "apoc"                     If you like it, please ★ above ⇧            
https://neo4j.com/labs/apoc
Apache License 2.0
1.71k stars 494 forks source link

Update to apoc-hadoop-dependencies-*.jar needed #3294

Closed CaldwellRenea closed 1 year ago

CaldwellRenea commented 1 year ago

Expected Behavior (Mandatory)

Neo4j starts successfully with a compatible apoc-hadoop-dependencies-x.x.x.jar without conflict

Actual Behavior (Mandatory)

Starting Neo4j 4.3.21 with apoc-hadoop-dependencies-4.3.0.10.jar fails due to org.slf4j version Starting Neo4j 4.4.14 with apoc-hadoop-dependencies-4.4.0.11.jar fails due to org.slf4j version

How to Reproduce the Problem

Steps (Mandatory)

Steps to create issue via Desktop as in customer report:

  1. create and start a test database using neo4j desktop and version 4.3.21

  2. shutdown database

  3. copy in apoc 4.3.0.10, all modules ( except 'core' ) to the plugins folder for the database

    apoc-4.3.0.10-all.jar apoc-bolt-dependencies-4.3.0.10.jar apoc-couchbase-dependencies-4.3.0.10.jar apoc-email-dependencies-4.3.0.10.jar apoc-hadoop-dependencies-4.3.0.10.jar apoc-mongodb-dependencies-4.3.0.10.jar apoc-nlp-dependencies-4.3.0.10.jar apoc-redis-dependencies-4.3.0.10.jar apoc-selenium-dependencies-4.3.0.10.jar apoc-xls-dependencies-4.3.0.10.jar

  4. attempt to restart database, it will fail.

  5. delete apoc-hadoop-dependencies-4.3.0.10.jar from plugins folder

  6. start database, no failure will be encountered

Log entry Message below:

2022-11-15 20:28:54.211+0000 INFO Starting...
Powershell : SLF4J: Class path contains multiple SLF4J bindings.
At C:\Users\xxxx\AppData\Local\Neo4j\Relate\Cache\neo4j-start.ps1:11 char:1
+ Powershell -NoProfile -NonInteractive -NoLogo `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (SLF4J: Class pa...SLF4J bindings.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

SLF4J: Found binding in [jar:file:/C:/Users/xxxx/.Neo4jDesktop/relate-data/dbmss/dbms-85b7aa72-d9f0-46dd-90fa-a5d346d
e538c/plugins/apoc-hadoop-dependencies-4.3.0.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/xxxx/.Neo4jDesktop/relate-data/dbmss/dbms-85b7aa72-d9f0-46dd-90fa-a5d346d
e538c/lib/slf4j-nop-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

server debug.log

2022-11-15 20:29:15.262+0000 ERROR [o.n.g.f.DatabaseManagementServiceFactory] Error starting Neo4j database server at C:\Users\xxxx\.Neo4jDesktop\relate-data\dbmss\dbms-85b7aa72-d9f0-46dd-90fa-a5d346de538c\data\databases
org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.procedure.impl.GlobalProceduresRegistry@106cd9c8' was successfully initialized, but failed to start. Please see the attached cause exception "class org.apache.commons.compress.harmony.pack200.Segment$ArrayVisitor can not implement org.objectweb.asm.AnnotationVisitor, because it is not an interface (org.objectweb.asm.AnnotationVisitor is in unnamed module of loader 'app')".
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:463) ~[neo4j-common-4.3.21.jar:4.3.21]
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:110) ~[neo4j-common-4.3.21.jar:4.3.21]
    at org.neo4j.graphdb.facade.DatabaseManagementServiceFactory.startDatabaseServer(DatabaseManagementServiceFactory.java:204) [neo4j-4.3.21.jar:4.3.21]
    at org.neo4j.graphdb.facade.DatabaseManagementServiceFactory.build(DatabaseManagementServiceFactory.java:169) [neo4j-4.3.21.jar:4.3.21]
    at com.neo4j.server.enterprise.EnterpriseManagementServiceFactory.createManagementService(EnterpriseManagementServiceFactory.java:38) [neo4j-enterprise-4.3.21.jar:4.3.21]
    at com.neo4j.server.enterprise.EnterpriseBootstrapper.createNeo(EnterpriseBootstrapper.java:20) [neo4j-enterprise-4.3.21.jar:4.3.21]
    at org.neo4j.server.NeoBootstrapper.start(NeoBootstrapper.java:134) [neo4j-4.3.21.jar:4.3.21]
    at org.neo4j.server.NeoBootstrapper.start(NeoBootstrapper.java:90) [neo4j-4.3.21.jar:4.3.21]
    at com.neo4j.server.enterprise.EnterpriseEntryPoint.main(EnterpriseEntryPoint.java:24) [neo4j-enterprise-4.3.21.jar:4.3.21]
Caused by: java.lang.IncompatibleClassChangeError: class org.apache.commons.compress.harmony.pack200.Segment$ArrayVisitor can not implement org.objectweb.asm.AnnotationVisitor, because it is not an interface (org.objectweb.asm.AnnotationVisitor is in unnamed module of loader 'app')
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[?:?]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) ~[?:?]
    at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) ~[?:?]
    at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) ~[?:?]
    at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[?:?]
    at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:576) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
    at org.neo4j.procedure.impl.ProcedureJarLoader$1.fetchNextOrNull(ProcedureJarLoader.java:165) ~[neo4j-procedure-4.3.21.jar:4.3.21]
    at org.neo4j.procedure.impl.ProcedureJarLoader$1.fetchNextOrNull(ProcedureJarLoader.java:148) ~[neo4j-procedure-4.3.21.jar:4.3.21]
    at org.neo4j.collection.AbstractPrefetchingRawIterator.peek(AbstractPrefetchingRawIterator.java:50) ~[neo4j-collections-4.3.21.jar:4.3.21]
    at org.neo4j.collection.AbstractPrefetchingRawIterator.hasNext(AbstractPrefetchingRawIterator.java:36) ~[neo4j-collections-4.3.21.jar:4.3.21]
    at org.neo4j.procedure.impl.ProcedureJarLoader.loadProcedures(ProcedureJarLoader.java:120) ~[neo4j-procedure-4.3.21.jar:4.3.21]
    at org.neo4j.procedure.impl.ProcedureJarLoader.loadProceduresFromDir(ProcedureJarLoader.java:97) ~[neo4j-procedure-4.3.21.jar:4.3.21]
    at org.neo4j.procedure.impl.GlobalProceduresRegistry.start(GlobalProceduresRegistry.java:383) ~[neo4j-procedure-4.3.21.jar:4.3.21]
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:442) ~[neo4j-common-4.3.21.jar:4.3.21]
    ... 8 more

Neo4j support can also reproduce this using 4.4.14 placing the apoc-hadoop-dependencies-4.4.0.11.jar and apoc-4.4.0.11-all.jar in the plugins folder to start to see debug.log error like above in customer report.

Specifications (Mandatory)

Currently used versions

Versions

Neo4j: 4.3.21 / 4.4.14 Neo4j-Apoc: 4.3.0.10 / 4.4.0.11

vga91 commented 1 year ago

The 4.3 version is no longer supported. For 4.4 it should be fixed here by excluding the org.slf4j package: https://github.com/neo4j-contrib/neo4j-apoc-procedures/pull/3450/files.

I close the issue, but feel free to reopen it in case the problem persists.