I found this jira bug which seems suspiciously similar to the issue i'm
having with the mariadb jdbc driver.    @joelbernstein, what other location
should I place the jdbc client jar file to aid its ability to load when
using the stream endpoint:
https://solr.apache.org/guide/8_11/stream-source-reference.html


Mariadb jdbc driver i'm using:
https://dlm.mariadb.com/2346414/Connectors/java/connector-java-3.0.7/mariadb-java-client-3.0.7.jar
https://mariadb.com/downloads/connectors/connectors-data-access/java8-connector/

The driver loads/works fine for the DIH endpoint when its placed in the
/opt/server/dist folder.  However when I use the stream endpoint I get a
the jdbc driver failed to load error.

On Mon, Sep 12, 2022 at 10:17 AM James Greene <ja...@jamesaustingreene.com>
wrote:

> The jdbc class/driver loads fine when I use the DIH endpoint. When I use
> the same connection string for the stream endpoint I get the class not
> found driver error. I also see a msg in solr logs during startup that the
> class has been added to the classloader from path 'opt/solr/dist' (where I
> have the mariadb jdbc driver jar file).
>
> On Sun, Sep 11, 2022, 4:05 PM Joel Bernstein <joels...@gmail.com> wrote:
>
>> I suspect this is a classloader issue. You may have to move the driver
>> into
>> the lib directory with the Solr core  and Solrj libs so that its visible
>> to
>> both DIH and streaming expressions.
>>
>>
>> Joel Bernstein
>> http://joelsolr.blogspot.com/
>>
>>
>> On Sat, Sep 10, 2022 at 10:18 PM James Greene <
>> ja...@jamesaustingreene.com>
>> wrote:
>>
>> > Looking at the solr start logs, I can see that the classes i'm including
>> > the in solrconfig.xml are being loaded:
>> >
>> > 2022-09-11 02:07:05.108 INFO
>> >  (coreLoadExecutor-21-thread-1-processing-n:172.18.0.5:8983_solr)
>> [c:col1
>> > s:shard2 r:core_node4 x:col1_shard2_replica_n2]
>> o.a.s.c.SolrResourceLoader
>> > Added 1 libs to classloader, from paths: [/opt/solr/dist]
>> >
>> > Also, the jdbc library loads fine and is usable when I use the DIH
>> > endpoint.
>> >
>> >
>> > Query:
>> > jdbc(connection="jdbc:mariadb://<host>:3306/<db>",sql="select id from
>> tbl",
>> > sort="id ASC", driver="org.mariadb.jdbc.Driver", user="<user>",
>> > password="<pass>")
>> >
>> > Error:
>> > ""Failed to load JDBC driver for 'org.mariadb.jdbc.Driver'""
>> >
>> > solrconfig.xml
>> > <lib dir="${solr.install.dir}/dist/"
>> regex="mariadb-java-client-.*\.jar" />
>> > <expressible name="jdbc"
>> > class="org.apache.solr.client.solrj.io.stream.JDBCStream"/>
>> >
>> > Cheers,
>> >
>> > /************************************
>> > *       James Austin Greene
>> > *  www.jamesaustingreene.com
>> > *              336-lol-nerd
>> > ************************************/
>> >
>> >
>> > On Fri, Sep 9, 2022 at 5:01 PM Joel Bernstein <joels...@gmail.com>
>> wrote:
>> >
>> > > You may be having classloader issues. I'm not sure where you have the
>> > > driver jar, but it may need to be copied into the lib directory with
>> core
>> > > Solr jars.
>> > >
>> > >
>> > > Joel Bernstein
>> > > http://joelsolr.blogspot.com/
>> > >
>> > >
>> > > On Fri, Sep 9, 2022 at 4:58 PM Joel Bernstein <joels...@gmail.com>
>> > wrote:
>> > >
>> > > > Can you post the stack trace from the log?
>> > > >
>> > > > It looks like the JDBCStream is registered, but the stack trace
>> > > > may provide some more info on why the driver didn't load.
>> > > >
>> > > > Joel Bernstein
>> > > > http://joelsolr.blogspot.com/
>> > > >
>> > > >
>> > > > On Fri, Sep 9, 2022 at 12:51 PM James Greene <
>> > > ja...@jamesaustingreene.com>
>> > > > wrote:
>> > > >
>> > > >> I'm still unable to get the JDBC stream to work.  I've verified
>> that
>> > > >> 'jdbc'
>> > > >> shows up in the plugin list:
>> > > >>
>> > > >> http://localhost:8983/solr/col1/stream?action=PLUGINS
>> > > >>
>> > > >> When using the DIH I use the jdbc driver:
>> > > >> org.mariadb.jdbc.Driver
>> > > >>
>> > > >> With connection string:
>> > > >> jdbc:mysql://{{host}}:{{port}}/{{database}}
>> > > >>
>> > > >> I am able to get DIH pulling data from mariadb with that connection
>> > > >> string.
>> > > >>
>> > > >> However using the same connection string in the streaming
>> expression:
>> > > >>     jdbc(connection="jdbc:mysql://mariadb:3306/db",sql="select id
>> from
>> > > tbl
>> > > >> order by id asc limit 1", sort="id asc",
>> > > driver="org.mariadb.jdbc.Driver")
>> > > >>
>> > > >> I get the error:
>> > > >>     "EXCEPTION": "Failed to load JDBC driver for
>> > > >> 'org.mariadb.jdbc.Driver'"
>> > > >>
>> > > >> I tried upgrading jdbc connector to 3x version and using the
>> > connection
>> > > >> string "jdbc:mariadb://<host>:<port>/<db>" and get the same error
>> > > message.
>> > > >>
>> > > >>
>> > > >>
>> > > >>
>> > > >>
>> > > >> On Thu, Sep 8, 2022 at 10:16 PM Joel Bernstein <joels...@gmail.com
>> >
>> > > >> wrote:
>> > > >>
>> > > >> > The jdbc stream was removed from the standard expression library
>> for
>> > > >> > security reasons. It is still in the jars though and can be
>> included
>> > > >> > through a change in the solrconfig.xml.
>> > > >> >
>> > > >> > This jira describes how to plugin an expression:
>> > > >> >
>> > > >> > https://issues.apache.org/jira/browse/SOLR-9103
>> > > >> >
>> > > >> > The class is: org.apache.solr.client.solrj.io.stream.JDBCStream
>> > > >> >
>> > > >> >
>> > > >> >
>> > > >> > Joel Bernstein
>> > > >> > http://joelsolr.blogspot.com/
>> > > >> >
>> > > >> >
>> > > >> > On Thu, Sep 8, 2022 at 6:54 PM James Greene <
>> > > >> ja...@jamesaustingreene.com>
>> > > >> > wrote:
>> > > >> >
>> > > >> > > I'm on solr 8.11.1 and trying to use the 'jdbc' streaming
>> > expression
>> > > >> as
>> > > >> > > documented here:
>> > > >> > >
>> > > https://solr.apache.org/guide/8_11/stream-source-reference.html#jdbc
>> > > >> > >
>> > > >> > > When I try to run a jdbc stream expression I get the error:
>> > > >> > > 'function 'jdbc' is unknown (not mapped to a valid TupleStream'
>> > > >> > >
>> > > >> > > Here is an example of the expression i'm trying to run:
>> > > >> > >
>> > > >>
>> > jdbc(connection="jdbc:mysql://mariadb:3306/threatquotient2",sql="select
>> > > >> > id
>> > > >> > > from data order by id asc limit 1", sort="id asc"
>> > > >> > > driver="org.mariadb.jdbc.Driver")
>> > > >> > >
>> > > >> > > I use the mariadb jdbc driver to get data from our mariadb
>> > instance
>> > > >> using
>> > > >> > > the data import handler so the jdbc driver should be property
>> > > loaded.
>> > > >> > >
>> > > >> >
>> > > >>
>> > > >
>> > >
>> >
>>
>

Reply via email to