You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "dalongliu (Jira)" <ji...@apache.org> on 2022/11/28 06:27:00 UTC

[jira] [Updated] (FLINK-15635) Allow passing a ClassLoader to EnvironmentSettings

     [ https://issues.apache.org/jira/browse/FLINK-15635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

dalongliu updated FLINK-15635:
------------------------------
    Release Note: 
TableEnvironment introduces a user class loader to have a consistent class loading behavior in table programs, SQL Client and SQL Gateway. The user classloader manages all user jars such as jar added by `ADD JAR` or `CREATE FUNCTION .. USING JAR ..` statements. User-defined functions/connectors/catalogs should replace `Thread.currentThread().getContextClassLoader()` with the user class loader to load classes. Otherwise, ClassNotFoundException maybe thrown. The user class loader can be accessed via `FunctionContext#getUserCodeClassLoader`, `DynamicTableFactory.Context#getClassLoader` and `CatalogFactory.Context#getClassLoader`.  
If you have used thread context classloader to load your user class before 1.15, after upgrade 1.16, this is an incompatible behavior because of the table planner classloader, so you should change your code by using `ADD JAR` syntax to add customer jar to planner classloader firstly, then the framework helps you to load the class when needed, this simplify your work related with classloader.

  was:TableEnvironment introduces a user class loader to have a consistent class loading behavior in table programs, SQL Client and SQL Gateway. The user classloader manages all user jars such as jar added by `ADD JAR` or `CREATE FUNCTION .. USING JAR ..` statements. User-defined functions/connectors/catalogs should replace `Thread.currentThread().getContextClassLoader()` with the user class loader to load classes. Otherwise, ClassNotFoundException maybe thrown. The user class loader can be accessed via `FunctionContext#getUserCodeClassLoader`, `DynamicTableFactory.Context#getClassLoader` and `CatalogFactory.Context#getClassLoader`.


> Allow passing a ClassLoader to EnvironmentSettings
> --------------------------------------------------
>
>                 Key: FLINK-15635
>                 URL: https://issues.apache.org/jira/browse/FLINK-15635
>             Project: Flink
>          Issue Type: Sub-task
>          Components: Table SQL / API
>            Reporter: Timo Walther
>            Assignee: Francesco Guardiani
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.16.0
>
>
> We had a couple of class loading issues in the past because people forgot to use the right classloader in {{flink-table}}. The SQL Client executor code hacks a classloader into the planner process by using {{wrapClassLoader}} that sets the threads context classloader.
> Instead we should allow passing a class loader to environment settings. This class loader can be passed to the planner and can be stored in table environment, table config, etc. to have a consistent class loading behavior.
> Having this in place should replace the need for {{Thread.currentThread().getContextClassLoader()}} in the entire {{flink-table}} module.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)