camel- sql проблема (разные sql версии сервера) - PullRequest
0 голосов
/ 03 марта 2020

У меня есть базовый c верблюжий маршрут (работает в карафе), этот маршрут возвращает список идентификаторов из таблицы SQL, при подключении к SQL серверу 2012 маршрут работает должным образом,

Маршрут:

       private static final String GET_PRODUCTS_QUERY = "select PRODUCT_ID,PRODUCT_DESC from CO_PROD";

       from("direct-vm:sqlRoute").routeId("testSQL")
        .streamCaching()
        .to(String.format("sql:%s?dataSource=sqlDataSource", GET_PRODUCTS_QUERY))
        .log(LoggingLevel.INFO, "SQL response = ${body}");

blueprint. xml

<reference id="sqlDataSource"  filter="(osgi.jndi.service.name=sqlDataSource)" interface="javax.sql.DataSource"/>

<bean id="sqlComponent" class="org.apache.camel.component.sql.SqlComponent">
    <property name="dataSource" ref="sqlDataSource"/>
</bean>

При подключении к SQL 2008 (это имеет та же таблица / данные) я получаю приведенную ниже ошибку по тому же маршруту:

org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-2BJK8S2-0119-1583263311016-6-2]
    at org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1846)
    at org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:385)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:64)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.directvm.DirectVmProcessor.process(DirectVmProcessor.java:57)
    at org.apache.camel.component.directvm.DirectVmBlockingProducer.process(DirectVmBlockingProducer.java:53)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:215)
    at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:78)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:547)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:54)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:512)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:54)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:512)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:500)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: org/antlr/v4/runtime/ANTLRErrorListener
    at com.microsoft.sqlserver.jdbc.SQLServerParameterMetaData.<init>(SQLServerParameterMetaData.java:347)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getParameterMetaData(SQLServerPreparedStatement.java:3103)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getParameterMetaData(SQLServerPreparedStatement.java:3114)
    at org.apache.camel.component.sql.SqlProducer$2.doInPreparedStatement(SqlProducer.java:120)
    at org.apache.camel.component.sql.SqlProducer$2.doInPreparedStatement(SqlProducer.java:116)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
    at org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:116)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    ... 44 more
Caused by: java.lang.ClassNotFoundException: org.antlr.v4.runtime.ANTLRErrorListener not found by com.microsoft.sqlserver.mssql-jdbc [47]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1639)
    at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 52 more

Если я переключаюсь на стиль подключения jdb c, указанный ниже, он работает с SQL server 2008:

    from("direct-vm:sqlRoute").routeId("testSQL")
    .streamCaching()
    .setBody(simple("select PRODUCT_ID,PRODUCT_DESC from CO_PROD",String.class))
    .to("jdbc:sqldataSource")
    .log(LoggingLevel.INFO, "SQL response = ${body}");

Верблюд- sql работает только с некоторыми версиями SQL сервера?

Можно ли зарегистрировать информацию о конечной точке / соединении, отправленную в .to?

Может кто-нибудь помочь мне понять, почему начальный маршрут не работает с SQL 2008, но тот же маршрут, связанный с SQL 2012, работает нормально?

1 Ответ

0 голосов
/ 03 марта 2020

Причина: java .lang.ClassNotFoundException: org.antlr.v4.runtime.ANTLRErrorListener не найден com.microsoft.sqlserver.ms sql -jdb c

Может быть, вам нужно попробовать другой драйвер jdb c, например Список драйверов JDB C для SQL Server 2008 (сравнение)

...