Thanks for the answers.
Indeed, WebSphere uses IBM's own JVM, and my hypothesis is that its class
loader follows a different (and unlucky) order to load Calcite classes.
I will continue digging into it, see if I can isolate the problem, and open
a Jira if there is in fact something to be addressed on Calcite's side.
Ruben


On Fri, Nov 6, 2020 at 12:10 AM Julian Hyde <jhyde.apa...@gmail.com> wrote:

> 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 <zabe...@gmail.com>
> 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 <rube...@gmail.com> 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!
> >>
>
>

Reply via email to