jdiameter-ha-* ClassNotFoundException

276 Views Asked by At

I'm attempting introduce high availability mode (via JBoss Cache) in my server implementation (essentially an expanded version of the example server) by configuring my Maven project to use jdiameter-ha-api and jdiameter-ha-impl dependencies instead of jdiameter-api and jdiameter-impl, in addition to adding the following extensions to jdiameter-config.xml:

<Extensions>
    <SessionDatasource value="org.mobicents.diameter.impl.ha.data.ReplicatedSessionDatasource"/>
    <TimerFacility value="org.mobicents.diameter.impl.ha.timer.ReplicatedTimerFacilityImpl"/>
</Extensions>

Now, when I run the server from Eclipse, it works fine, i.e. it start up in clustered mode (w/ JBoss Cache), however, when I attempt to run the jar produced by mvn install, it throws the following error:

2018-10-11 18:24:13,899 - (-)(-)(-)(-)(-) Starting Mobicents DIAMETER Stack v1.7.0-SNAPSHOT (-)(-)(-)(-)(-)
2018-10-11 18:24:13,959 - Failure creating stack 'Server'
org.jdiameter.api.InternalException: java.lang.reflect.InvocationTargetException
  at org.jdiameter.client.impl.StackImpl.init(StackImpl.java:135)
  at com.company.charging.diameter.ocf.utilities.StackCreator.<init>(StackCreator.java:37)
  at com.company.charging.diameter.ocf.utilities.StackCreator.<init>(StackCreator.java:71)
  at com.company.charging.diameter.ocf.server.Ocf.<init>(Ocf.java:187)
  at com.company.charging.diameter.ocf.server.Ocf.main(Ocf.java:157)
Caused by: java.lang.reflect.InvocationTargetException
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
  at org.jdiameter.client.impl.StackImpl.init(StackImpl.java:129)
  ... 4 more
Caused by: java.lang.ClassNotFoundException: org.mobicents.diameter.impl.ha.timer.ReplicatedTimerFacilityImpl
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
  at java.base/java.lang.Class.forName0(Native Method)
  at java.base/java.lang.Class.forName(Class.java:291)
  at org.jdiameter.client.impl.helpers.AssemblerImpl.fill(AssemblerImpl.java:139)
  at org.jdiameter.client.impl.helpers.AssemblerImpl.<init>(AssemblerImpl.java:91)
  ... 9 more

Given that it starts up in Eclipse just fine, I'm assuming my POM file isn't managing dependencies properly, so that the final jar is missing these classes. Here's the relevant portion of my pom.xml:

<dependencies>
  <dependency>
    <groupId>org.mobicents.diameter</groupId>
    <artifactId>jdiameter-ha-api</artifactId>
    <version>${restcomm.diameter.jdiameter.version}</version>
  </dependency>
  <dependency>
    <groupId>org.mobicents.diameter</groupId>
    <artifactId>jdiameter-ha-impl</artifactId>
    <version>${restcomm.diameter.jdiameter.version}</version>
  </dependency>
  <dependency>
    <groupId>org.mobicents.diameter</groupId>
    <artifactId>restcomm-diameter-mux-jar</artifactId>
    <version>${restcomm.diameter.mux.version}</version>
  </dependency>
</dependencies>
0

There are 0 best solutions below