[
https://issues.apache.org/jira/browse/PHOENIX-3299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15726498#comment-15726498
]
Josh Elser commented on PHOENIX-3299:
-------------------------------------
bq. But it you instantiate an object, then ask it its class name or package
name, it will return the shaded path
This is definitely the right idea in spirit but we're dealing with code we
don't "own" which makes it harder.
Pulled up the code from commons-compiler:
{noformat}
public static ICompilerFactory
getDefaultCompilerFactory() throws Exception {
if (CompilerFactoryFactory.defaultCompilerFactory == null) {
Properties properties = new Properties();
InputStream is =
Thread.currentThread().getContextClassLoader().getResourceAsStream(
"org.codehaus.commons.compiler.properties"
);
if (is == null) {
throw new ClassNotFoundException(
"No implementation of org.codehaus.commons.compiler is on
the class path. Typically, you'd have "
+ "'janino.jar', or 'commons-compiler-jdk.jar', or both on
the classpath."
);
}
try {
properties.load(is);
} finally {
is.close();
}
String compilerFactoryClassName =
properties.getProperty("compilerFactory");
CompilerFactoryFactory.defaultCompilerFactory = (
CompilerFactoryFactory.getCompilerFactory(compilerFactoryClassName)
);
}
return CompilerFactoryFactory.defaultCompilerFactory;
}
{noformat}
So, I'm guessing that if we mangle together a correct
{{org.codehaus.commons.compiler.properties}} with the correct contents in our
shaded jar, we could make this work.
[~maryannxue], I'd say let it boil down to the amount of time/effort (or maybe
blood/sweat/tears) that you want to invest in trying to unwrap this. I think
just adding an exclusion for commons-compiler/janino classes would be OK for a
workaround (as I'd guess the likelihood of having multiples of those on the
classpath is low).
> Janino could not work in shaded package
> ---------------------------------------
>
> Key: PHOENIX-3299
> URL: https://issues.apache.org/jira/browse/PHOENIX-3299
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.8.0
> Reporter: Maryann Xue
> Assignee: Maryann Xue
>
> Calcite-Phoenix would encounter this ClassNotFoundException when trying to
> initiate its compiler. It was caused by putting janino into shaded packages.
> {code}
> imit 100": Unable to instantiate java compiler
> at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
> at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
> at
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:147)
> at
> org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:199)
> at sqlline.Commands.execute(Commands.java:822)
> at sqlline.Commands.sql(Commands.java:732)
> at sqlline.SqlLine.dispatch(SqlLine.java:807)
> at sqlline.SqlLine.runCommands(SqlLine.java:1710)
> at sqlline.Commands.run(Commands.java:1285)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at
> sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:36)
> at sqlline.SqlLine.dispatch(SqlLine.java:803)
> at sqlline.SqlLine.initArgs(SqlLine.java:613)
> at sqlline.SqlLine.begin(SqlLine.java:656)
> at sqlline.SqlLine.start(SqlLine.java:398)
> at sqlline.SqlLine.main(SqlLine.java:292)
> Caused by: java.lang.IllegalStateException: Unable to instantiate java
> compiler
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:417)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.load3(JaninoRelMetadataProvider.java:358)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.access$000(JaninoRelMetadataProvider.java:94)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$1.load(JaninoRelMetadataProvider.java:113)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider$1.load(JaninoRelMetadataProvider.java:110)
> at
> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3589)
> at
> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2374)
> at
> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2337)
> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2252)
> at com.google.common.cache.LocalCache.get(LocalCache.java:3990)
> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3994)
> at
> com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4878)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.create(JaninoRelMetadataProvider.java:448)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.revise(JaninoRelMetadataProvider.java:460)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.revise(RelMetadataQuery.java:186)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.collations(RelMetadataQuery.java:484)
> at
> org.apache.calcite.rel.metadata.RelMdCollation.filter(RelMdCollation.java:187)
> at
> org.apache.calcite.rel.logical.LogicalFilter$2.get(LogicalFilter.java:115)
> at
> org.apache.calcite.rel.logical.LogicalFilter$2.get(LogicalFilter.java:113)
> at org.apache.calcite.plan.RelTraitSet.replaceIfs(RelTraitSet.java:238)
> at
> org.apache.calcite.rel.logical.LogicalFilter.create(LogicalFilter.java:111)
> at
> org.apache.calcite.rel.logical.LogicalFilter.create(LogicalFilter.java:103)
> at
> org.apache.calcite.rel.core.RelFactories$FilterFactoryImpl.createFilter(RelFactories.java:225)
> at org.apache.calcite.plan.RelOptUtil.createFilter(RelOptUtil.java:595)
> at org.apache.calcite.plan.RelOptUtil.createFilter(RelOptUtil.java:581)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertWhere(SqlToRelConverter.java:966)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:644)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:622)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:2852)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2036)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1914)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1952)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1910)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1994)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:1994)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:641)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:622)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:2852)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:556)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertWith(SqlToRelConverter.java:3550)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:2866)
> at
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:556)
> at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:228)
> at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:193)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:733)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:597)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:567)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:215)
> at
> org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:594)
> at
> org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:613)
> at
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:139)
> ... 16 more
> Caused by: java.lang.ClassNotFoundException: No implementation of
> org.codehaus.commons.compiler is on the class path. Typically, you'd have
> 'janino.jar', or 'commons-compiler-jdk.jar', or both on the classpath.
> at
> org.apache.phoenix.shaded.org.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:59)
> at
> org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:415)
> ... 66 more
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)