Opal Crashes after Restart (Error creating bean with name 'jotm')

Opal crashed after a systemctl restart. I think the issue is related to java/spring.

System Info:

Ubuntu 20.04
R version: 3.6.3
Java version: 8.0.402+6
Opal Installation: Obiba package(https://www.obiba.org/pages/pkg/)

Output of /var/log/stderr.log:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jotm' defined in class path resource [spring/opal-core/tx.xml]: Instantiation of bean fail>
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:936)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:95)
        at org.obiba.opal.server.UpgradeCommand.standardUpgrade(UpgradeCommand.java:53)
        at org.obiba.opal.server.UpgradeCommand.execute(UpgradeCommand.java:49)
        at org.obiba.opal.server.OpalServer.upgrade(OpalServer.java:104)
        at org.obiba.opal.server.OpalServer.<init>(OpalServer.java:39)
        at org.obiba.opal.server.OpalServer.main(OpalServer.java:154)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.obiba.opal.core.tx.JotmFactoryBean]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundEr>
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:226)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)
        ... 17 more
Caused by: java.lang.NoClassDefFoundError: javax/rmi/PortableRemoteObject
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
        at org.objectweb.jotm.Jotm.<init>(Jotm.java:143)
        at org.obiba.opal.core.tx.JotmFactoryBean.<init>(JotmFactoryBean.java:85)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:213)
        ... 19 more
Caused by: java.lang.ClassNotFoundException: javax.rmi.PortableRemoteObject
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
        ... 34 more

Hi,

Your system’s java is not Java 8; see which is /usr/bin/java. You can specify the path to java explicitly in /etc/default/opal.

Regards Yannick

It seems to be jdk8u402.

which java
> /opt/java/jdk8u402-b06/bin/java
~# java -version
> openjdk version "1.8.0_402"
> OpenJDK Runtime Environment (Temurin)(build 1.8.0_402-b06)
> OpenJDK 64-Bit Server VM (Temurin)(build 25.402-b06, mixed mode)

Does that tell us anything interesting?

The Java that is used to run Opal is specified in /etc/default/opal. By default it is JAVA=/usr/bin/java. Then verify what version is /usr/bin/java and change it for /opt/java/jdk8u402-b06/bin/java if necessary.

Regards
Yannick

1 Like

Okay, I bumped Java to Java 11 and updated /etc/default/opal.

But I still get the same error.

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jotm' defined in class path resource [spring/o>
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:936)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:95)
        at org.obiba.opal.server.UpgradeCommand.standardUpgrade(UpgradeCommand.java:53)
        at org.obiba.opal.server.UpgradeCommand.execute(UpgradeCommand.java:49)
        at org.obiba.opal.server.OpalServer.upgrade(OpalServer.java:104)
        at org.obiba.opal.server.OpalServer.<init>(OpalServer.java:39)
        at org.obiba.opal.server.OpalServer.main(OpalServer.java:154)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.obiba.opal.core.tx.JotmFactoryBean]: Constructor threw exception; nes>
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:226)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)
        ... 17 more
Caused by: java.lang.NoClassDefFoundError: javax/rmi/PortableRemoteObject
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
        at org.objectweb.jotm.Jotm.<init>(Jotm.java:143)
        at org.obiba.opal.core.tx.JotmFactoryBean.<init>(JotmFactoryBean.java:85)
        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:490)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:213)

Java 8 is required, it will not work with java 11

1 Like

Java 8 fixed the problem.

For future reference, using the Java distribution through apt-get openjdk-8-jdk works just fine.

Cheers!