I agree with Christian that it’s just a problem with sqlline’s class path. The 
simplest solution is to remove elasticsearch2 from the line that builds the 
class path:

for module in core cassandra druid elasticsearch2 elasticsearch5 file mongodb 
spark splunk example/csv example/function; do
  CP=${CP}${module}/target/classes:
  CP=${CP}${module}/target/test-classes:
done

Then sqlline will work out of the box for ES5. People who want to run ES2 will 
have to edit the script. 

Kunwar, Can you please log a JIRA case?

Christian, Can you you fix it?

It’s conceivable that someone would want to combine data from an ES2 and ES5 
instance, but we don’t have an answer for them, whether they invoke Calcite via 
sqlline or any other way. The incompatible libraries will clash, unless there 
is some class-loader magic keeping them in different namespaces. The right 
answer is probably something like Jboss modules, but it’s low priority.

Julian


> On Sep 27, 2017, at 9:29 AM, Christian Beikov <christian.bei...@gmail.com> 
> wrote:
> 
> Depends if you want to be able to connect to an ES2 and ES5 server at the
> same time through sqlline.
> 
> Am 27.09.2017 17:53 schrieb "Josh Elser" <josh.el...@gmail.com>:
> 
>> A quick solution is to add some documentation around how to give a
>> specific version of ElasticSearch at build-time. This would help folks
>> build Calcite with the exact version that they want (assuming that the API
>> hasn't changed and the adapter actually works with that version of ES)
>> 
>> We don't need to have multiple versions of ElasticSearch on the classpath
>> at once, right?
>> 
>> On 9/27/17 2:13 AM, Christian Beikov wrote:
>> 
>>> Sqlline is problematic as it will have both elastic search versions on
>>> the classpath. I haven't thought about that before. In the meantime you
>>> could remove old versions of libraries from the "target/fullclasspath.txt"
>>> file to workaround the classpath problem.
>>> 
>>> @Julian Hyde: How should we deal with something like this? We'd need
>>> isolated "modules" instead of a flat class path for sqlline. Maybe we could
>>> build sqlline on JBoss Modules(https://github.com/jbo
>>> ss-modules/jboss-modules) to achieve that?
>>> 
>>> 
>>> Mit freundlichen Grüßen,
>>> ------------------------------------------------------------------------
>>> *Christian Beikov*
>>> Am 27.09.2017 um 01:30 schrieb Kunwar Deep Singh Toor:
>>> 
>>>> ---------- Forwarded message ----------
>>>> From: Kunwar Deep Singh Toor <kt...@g.clemson.edu>
>>>> Date: Mon, Sep 25, 2017 at 8:16 PM
>>>> Subject: ElasticSearch5 not working
>>>> To: dev-i...@calcite.apache.org
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>>  I have been trying to connect to the ElasticSearch  suing ES adapter
>>>> through sqlline. I was able to connect to ES 2.1.4 using the ES2 adapter
>>>> but when I try connecting to ES 5.1.1 using the ES5 adapter the following
>>>> error pops up, I checked the logs for ElasticSearch and it does not
>>>> show  a
>>>> connection attempt being made.
>>>> 
>>>> The following is the error:
>>>> java.lang.NoSuchMethodError: org.elasticsearch.transport.cl
>>>> ient.PreBuiltTransportClient.addPlugins(Ljava/util/Collectio
>>>> n;Ljava/util/Collection;)Ljava/util/Collection;
>>>>     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
>>>> init>(PreBuiltTransportClient.java:130)
>>>>     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
>>>> init>(PreBuiltTransportClient.java:116)
>>>>     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
>>>> init>(PreBuiltTransportClient.java:106)
>>>>     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
>>>> ma.open(Elasticsearch5Schema.java:119)
>>>>     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
>>>> ma.<init>(Elasticsearch5Schema.java:74)
>>>>     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
>>>> maFactory.create(Elasticsearch5SchemaFactory.java:56)
>>>>     at org.apache.calcite.model.ModelHandler.visit(ModelHandler.
>>>> java:269)
>>>>     at org.apache.calcite.model.JsonCustomSchema.accept(JsonCustomS
>>>> chema.java:45)
>>>>     at org.apache.calcite.model.ModelHandler.visit(ModelHandler.
>>>> java:195)
>>>>     at org.apache.calcite.model.ModelHandler.<init>(ModelHandler.
>>>> java:87)
>>>>     at org.apache.calcite.jdbc.Driver$1.onConnectionInit(Driver.
>>>> java:104)
>>>>     at org.apache.calcite.avatica.UnregisteredDriver.connect(Unregi
>>>> steredDriver.java:139)
>>>>     at sqlline.DatabaseConnection.connect(DatabaseConnection.java:156)
>>>>     at sqlline.DatabaseConnection.getConnection(DatabaseConnection.
>>>> java:204)
>>>>     at sqlline.Commands.connect(Commands.java:1095)
>>>>     at sqlline.Commands.connect(Commands.java:1001)
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
>>>> ssorImpl.java:62)
>>>>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>>> thodAccessorImpl.java:43)
>>>>     at java.lang.reflect.Method.invoke(Method.java:498)
>>>>     at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHa
>>>> ndler.java:38)
>>>>     at sqlline.SqlLine.dispatch(SqlLine.java:791)
>>>>     at sqlline.SqlLine.begin(SqlLine.java:668)
>>>>     at sqlline.SqlLine.start(SqlLine.java:373)
>>>>     at sqlline.SqlLine.main(SqlLine.java:265)
>>>> 
>>>> I have recently started working on calcite and any help would be much
>>>> appreciated.
>>>> 
>>>> Thanks,
>>>> 
>>>> Kunwar Singh
>>>> 
>>>> 
>>> 
>>> 

Reply via email to