As you’re using Websphere, it’s possible you’re using IBM’s Java runtime. Is that so?
Julian > On Nov 5, 2020, at 2:23 PM, Stamatis Zampetakis <[email protected]> wrote: > > Hi Ruben, > > Since you mentioned WebSphere I am wondering if it is related to some weird > problem in the ClassLoader. > If it was only a JVM problem I guess it could be reproduced outside of > WebSphere just by referencing a few Calcite classes in some specific order. > > Other than that, it is better to use JIRA when you have code and > stacktraces; the formatting is helpful. > > Best, > Stamatis > > On Thu, Nov 5, 2020 at 10:00 AM Ruben Q L <[email protected]> wrote: > >> Hello everyone, >> >> I'm getting a strange error on WebSphere 9 (on Ubuntu) when trying to start >> an application that uses Calcite (shaded) library. The exception message >> says: >> >> ** error [-]: Unexpected error. >> ** ... >> ** Caused by: java.lang.BootstrapMethodError: >> java.lang.ExceptionInInitializerError >> ** >> >> com.onwbp.org.apache.calcite.sql.type.InferTypes.<clinit>(InferTypes.java:41) >> ** >> >> com.onwbp.org.apache.calcite.sql.fun.SqlMultisetSetOperator.<init>(SqlMultisetSetOperator.java:43) >> ** >> >> com.onwbp.org.apache.calcite.sql.fun.SqlStdOperatorTable.<clinit>(SqlStdOperatorTable.java:118) >> ** >> >> com.onwbp.org.apache.calcite.adapter.enumerable.RexToLixTranslator.<clinit>(RexToLixTranslator.java:93) >> ** java.lang.Class.forNameImpl(Native Method) >> ** java.lang.Class.forName(Class.java:348) >> ** >> >> java.lang.invoke.MethodType.nonPrimitiveClassFromString(MethodType.java:311) >> ** >> java.lang.invoke.MethodType.parseIntoClasses(MethodType.java:373) >> ** >> java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:286) >> ** java.lang.invoke.MethodHandle.getCPMethodTypeAt(Native >> Method) >> ** >> java.lang.invoke.MethodHandle.resolveInvokeDynamic(MethodHandle.java:849) >> ** ... 74 more >> ** Caused by: java.lang.ExceptionInInitializerError >> ** >> java.lang.J9VMInternals.ensureError(J9VMInternals.java:141) >> ** >> java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:130) >> ** java.lang.Class.forNameImpl(Native Method) >> ** java.lang.Class.forName(Class.java:348) >> ** >> >> java.lang.invoke.MethodType.nonPrimitiveClassFromString(MethodType.java:311) >> ** >> java.lang.invoke.MethodType.parseIntoClasses(MethodType.java:373) >> ** >> java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:286) >> ** java.lang.invoke.MethodHandle.getCPMethodTypeAt(Native >> Method) >> ** >> java.lang.invoke.MethodHandle.resolveInvokeDynamic(MethodHandle.java:849) >> ** ... 85 more >> ** Caused by: java.lang.NullPointerException >> ** >> >> com.onwbp.org.apache.calcite.sql.SqlCallBinding.<clinit>(SqlCallBinding.java:60) >> ** ... 92 more >> ****** 1 errors, 5 infos. >> >> >> As we can see there is a NPE in SqlCallBinding:60, when it tries to call a >> method on SqlStdOperatorTable.DEFAULT, which seems to be null [0]. >> According to the logs, what I think is happening is a circular dependency >> issue when classes get loaded [1]. >> However, so far I have only seen this error in WebSphere, in other >> environments the same application is correctly initialized and launched, >> and this exception does not happen. >> >> Has anyone ever seen an issue like this? >> Thanks, >> Ruben >> >> WebSphere version is: >> Integrated Solutions Console, 9.0.0.1 >> Build Number: cf011636.02 >> Build Date: 9/6/16 >> >> It uses java 8: >> java version "1.8.0" >> Java(TM) SE Runtime Environment (build pxa6480sr3fp11-20160817_02(SR3 >> FP11)) >> IBM J9 VM (build 2.8, JRE 1.8.0 Linux amd64-64 Compressed References >> 20160816_315341 (JIT enabled, AOT enabled) >> J9VM - R28_20160816_1459_B315341 >> JIT - tr.r14.java.green_20160726_121883 >> GC - R28_20160816_1459_B315341_CMPRSS >> J9CL - 20160816_315341) >> JCL - 20160816_01 based on Oracle jdk8u101-b13 >> >> [0] >> >> https://github.com/apache/calcite/blob/2e9edae7fc57ab9c9c7c097008724ac99a1791a3/core/src/main/java/org/apache/calcite/sql/SqlCallBinding.java#L60 >> >> [1] >> *1) RexToLixTranslator.java* >> >> /*90*/ public class RexToLixTranslator implements >> RexVisitor<RexToLixTranslator.Result> {/*91*/ public static final >> Map<Method, SqlOperator> JAVA_TO_SQL_METHOD_MAP =/*92*/ >> Util.mapOf(/*93*/ findMethod(String.class, "toUpperCase"), >> SqlStdOperatorTable.UPPER,// --> LOAD SqlStdOperatorTable >> >> *2) SqlStdOperatorTable.java* >> >> /*118*/ public static final SqlMultisetSetOperator >> MULTISET_UNION_DISTINCT =/*119*/ new >> SqlMultisetSetOperator("MULTISET UNION DISTINCT", 14, false);// --> >> LOAD SqlMultisetSetOperator >> >> *3) SqlMultisetSetOperator.java* >> >> /*42*/ public SqlMultisetSetOperator(String name, int prec, boolean >> all) {/*43*/ super(/*44*/ name,/*45*/ >> SqlKind.OTHER,/*46*/ prec,/*47*/ true,/*48*/ >> ReturnTypes.MULTISET_NULLABLE,/*49*/ InferTypes.FIRST_KNOWN, // >> --> LOAD InferTypes/*50*/ >> OperandTypes.MULTISET_MULTISET);/*51*/ this.all = all;/*52*/ } >> >> *4) InferTypes.java* >> >> /*41*/ public static final SqlOperandTypeInference FIRST_KNOWN >> =/*42*/ (callBinding, returnType, operandTypes) -> {/*43*/ >> final RelDataType unknownType =/*44*/ >> callBinding.getValidator().getUnknownType();/*45*/ RelDataType >> knownType = unknownType;/*46*/ for (SqlNode operand : >> callBinding.operands()) {/*47*/ knownType = >> SqlTypeUtil.deriveType(callBinding, operand);/*48*/ if >> (!knownType.equals(unknownType)) {/*49*/ break;/*50*/ >> }/*51*/ } >> // --> LOAD SqlCallBinding >> >> *5) SqlCallBinding.java* >> >> /*59*/ private static final SqlCall DEFAULT_CALL =/*60*/ >> SqlStdOperatorTable.DEFAULT.createCall(SqlParserPos.ZERO);// >> SqlStdOperatorTable is still loading in 2)! >> SqlStdOperatorTable.DEFAULT in SqlStdOperatorTable:185 is null => NPE! >>
