I understand that. But if we remove calcite-elasticsearch2 from sqlline’s 
classpath, sqlline will still get calcite-elasticsearch5 and the elastic search 
5.x client driver libraries that it depends upon.

And the elastic search 2.x client driver libraries will not be on sqlline's 
class path, because calcite-elasticsearch2 is the only module that depends on 
them. So there will be no clash.

Julian


> On Sep 28, 2017, at 9:53 AM, Christian Beikov <christian.bei...@gmail.com> 
> wrote:
> 
> The elasticsearch2 module depens on the elasticsearch client driver libraries 
> with version 2.x and the elasticsearch5 module depends on the elasticsearch 
> client driver libraries with version 5.x. That's the version conflict Kunwar 
> was running into.
> 
> 
> Mit freundlichen Grüßen,
> ------------------------------------------------------------------------
> *Christian Beikov*
> Am 28.09.2017 um 18:35 schrieb Julian Hyde:
>> Christian,
>> 
>> I don’t understand. The elasticsearch5 module does not depend on the 
>> elasticsearch2 module, only on core and linq4j. Therefore if it (and its 
>> dependencies) are added to sqlline’s class path, it should have everything 
>> it needs. What am I missing?
>> 
>> Julian
>> 
>> 
>>> On Sep 27, 2017, at 11:02 PM, Christian Beikov <christian.bei...@gmail.com> 
>>> wrote:
>>> 
>>> Well it's not so simple I suppose. You also need to exclude the 
>>> elasticsearch2 maven module from the pom.xml since that one is actually 
>>> contributing the elasticsearch client to the classpath. For the sake of 
>>> simplicity, we could introduce profiles that only have a specific ES 
>>> version, but that doesn't scale obviously regarding possible other version 
>>> combinations.
>>> 
>>> I can introduce a profile if you want, but a real fix as I said needs 
>>> classloader magic like what e.g. JBoss Modules does.
>>> 
>>> 
>>> Mit freundlichen Grüßen,
>>> ------------------------------------------------------------------------
>>> *Christian Beikov*
>>> Am 27.09.2017 um 20:28 schrieb Julian Hyde:
>>>> 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