Syntax highlighter header

Thursday 29 July 2021

Moving from Nashorn to GraalVM

Recently we migrated from JDK 8 to JDK 16 and found that JavaScript engine is removed from Java. We tried including GraalVM jars into classpath but it did not work. The following code was returning null.


ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName( "JavaScript" );

After struggling for a long time I figured out that following list of jars works.


graal-sdk-21.2.0.jar
icu4j-69.1.jar
js-21.2.0.jar
js-launcher-21.2.0.jar
js-scriptengine-21.2.0.jar
regex-21.2.0.jar
truffle-api-21.2.0.jar
truffle-nfi-21.2.0.jar

Please comment if you have any question.

Wednesday 21 July 2021

Is struts 1.3 compatible with java 16?

Recently we were upgrading our application from Java 8 to Java 16. Our application was using struts 1.3 which is deprecated now and we did not know if it will work with Java 16.

For finding out if struts 1.3 is compatible with Java 16 I compiled struts 1.3 code with JDK 16. Surprisingly it compiled without a single error or warning. It gave me confidence that struts 1.3 is compatible with Java 16.

We migrated our struts 1.3 application to JDK 16 with Tomcat 9 and it is working fine.

java.lang.reflect.InaccessibleObjectException jboss-client.jar with Wildfly

Recently we we upgrading our application from JDK 8 to JDK16. We encountered following exception in our application running under Tomcat 9.  We were using wildfly-23 running with JDK-16 and Tomcat-9 running wih JDK-16


Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.lang.reflect.Method jdk.proxy29.$Proxy136.m0 accessible: module jdk.proxy29 does not "opens jdk.proxy29" to unnamed module @182f9a0
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) ~[?:?]
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177) ~[?:?]
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171) ~[?:?]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBProxyInformation$1.doCompute(EJBProxyInformation.java:101) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBProxyInformation$1.computeValue(EJBProxyInformation.java:72) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBProxyInformation$1.computeValue(EJBProxyInformation.java:66) ~[jboss-client.jar:24.0.0.Final]
at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:228) ~[?:?]
at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:210) ~[?:?]
at java.base/java.lang.ClassValue.get(ClassValue.java:116) ~[?:?]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBProxyInformation.forViewType(EJBProxyInformation.java:242) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBLocator.getProxyInformation(EJBLocator.java:375) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBLocator.getProxyConstructor(EJBLocator.java:370) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBLocator.createProxyInstance(EJBLocator.java:387) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBClient.createProxy(EJBClient.java:161) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.ejb-client@4.0.39.Final//org.jboss.ejb.client.EJBClient.createProxy(EJBClient.java:156) ~[jboss-client.jar:24.0.0.Final]
at org.jboss.as.ejb3@23.0.0.Final//org.jboss.as.ejb3.remote.RemoteViewManagedReferenceFactory.getReference(RemoteViewManagedReferenceFactory.java:105) ~[?:?]
at org.jboss.as.ejb3@23.0.0.Final//org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor$2$1.getReference(EjbJndiBindingsDeploymentUnitProcessor.java:268) ~[?:?]
at org.jboss.as.naming@23.0.0.Final//org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:143) ~[?:?]
... 14 more

We tried upgrading jboss-client.jar on Tomcat to version 24 but this did not help and we were still getting above error.

Then we tried upgrading Wildfly server also to version 24.0.0.Final, and after upgrading server to Wildfly-24 it started working.




Tuesday 20 July 2021

java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS

 Recently we upgraded our application to spring 5.3.9 and after that it started failing with following error.


Caused by: java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
	at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.newConfiguration(FreeMarkerConfigurationFactory.java:327)
	at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.createConfiguration(FreeMarkerConfigurationFactory.java:257)
	at org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean.afterPropertiesSet(FreeMarkerConfigurationFactoryBean.java:63)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
	... 95 more

Reason of this error was traced to Freemarker library which we were using. After upgrading Freemarker library to 2.3.31 this problem was fixed.