jdiameter-ha- * ClassNotFoundException - PullRequest
       48

jdiameter-ha- * ClassNotFoundException

0 голосов
/ 11 октября 2018

Я пытаюсь ввести режим высокой доступности (через JBoss Cache) в моей реализации сервера (по сути, расширенная версия примера сервера), настроив мой проект Maven для использования зависимостей jdiameter-ha-api и jdiameter-ha-impl вместо jdiameter-apiи jdiameter-impl, в дополнение к добавлению следующих расширений к jdiameter-config.xml:

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

Теперь, когда я запускаю сервер из Eclipse, он работает нормально, то есть запускается в кластерном режиме (сJBoss Cache), однако, когда я пытаюсь запустить jar, созданный mvn install, он выдает следующую ошибку:

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

Учитывая, что он запускается в Eclipse очень хорошо, я предполагаюмой файл POM не управляет зависимостями должным образом, поэтому в окончательном jar отсутствуют эти классы.Вот соответствующая часть моего 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>
...