[ 
https://issues.apache.org/jira/browse/BEAM-10516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17163922#comment-17163922
 ] 

Brian Hulette commented on BEAM-10516:
--------------------------------------

I think we can also get around the getTableType issue by moving to a 
TableProviderRegistrar model (as Kenn suggested). That way we can have an 
implementation of TableProviderRegistrar that loads all the SchemaIOProvider 
instances, and it just won't load any that we don't have the IO dependencies 
for.

We'd need to include the necessary IOs at test runtime, since there are ITs in 
SQL that rely on them, but they would no longer be needed as {{provided}} 
dependencies.

> Refactor TableProvider to core beam
> -----------------------------------
>
>                 Key: BEAM-10516
>                 URL: https://issues.apache.org/jira/browse/BEAM-10516
>             Project: Beam
>          Issue Type: Bug
>          Components: dsl-sql, sdk-java-core
>            Reporter: Scott Lukas
>            Assignee: Scott Lukas
>            Priority: P2
>
> The SQL extension uses ServiceLoader to load table providers: 
> https://github.com/apache/beam/blob/v2.22.0/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/BeamCalciteSchemaFactory.java#L85
> And the IOs used in the built-in table providers (e.g. pubsub json, avro, 
> parquet, ...) are included as {{provided}} dependencies, not {{compile}}. 
> This means that we are able to build the sql extension jar, and AutoService 
> picks them up and records them in META-INF/services. However because they are 
> {{provided}} dependencies, the necessary IO modules are not marked as 
> dependencies for the SQL extension.
> This means consumers of :sdks:java:extensions:sql (like 
> :sdks:java:extensions:sql:jdbc) can end up with ServiceLoader registering a 
> TableProvider that will fail with ClassDefNotFoundError, unless they add the 
> necessary dependency.
> Possible solution: Refactor TableProvider to beam core (or another shared 
> module) in order to solve Service Loader errors with 
> SchemaCapableIOTableProviderWrapper. Remove getTableType overrides of 
> SchemaCapableIOProviderWrapper when fixed.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to