Class PluginClassLoader
- All Implemented Interfaces:
Closeable
,AutoCloseable
A maneira mais simples de obter um provedor para um plugin é instanciar um ClassLoader
conveniente desta classe, e chamar getProvider(Class)
, por exemplo:
Provedor provedor = new PluginClassLoader().getProvider(Provedor.class);
Quando já se sabe o nome do arquivo que contém o plugin, é mais eficiente fazer como:
Provedor provedor = new PluginClassLoader("systextil-meuplugin").getProvider(Provedor.class);
Se, no entanto, o plugin já estiver disponível no classloader padrão do sistema, não sendo necessário obtê-lo mediante um classloader personalizado, então é muito mais eficiente obter o provedor diretamente através do método estático, assim:
Provedor provedor = PluginClassLoader.findProvider(Provedor.class);
Formas de carregamento dos provedores em plugins
Existem plugins que podem ser carregados sob demanda, isto é, somente quando forem usados (e se forem usados). Esses plugins geralmente contêm customizações de clientes ou processos opcionais. Esses plugins podem se beneficiar deste classloader, podendo ser atualizados sem reiniciar a VM. Para isso, eles não podem estar declarados no classpath dos arquivos MANIFEST.MF desta API de plugins. Sendo assim, podem usar este classloader em dois modos:
- informando o nome do arquivo de plugin onde o provedor deve ser encontrado, ou
- não informando o nome de arquivo, fazendo o classloader procurá-lo em todos os arquivos na pasta de plugins.
Outros plugins devem ser carregados no início da VM, principalmente se contiverem formulários em NXJ. Estes plugins devem estar declarados no classpath dos arquivos MANIFEST.MF desta API de plugins. Para atualizá-los é preciso reiniciar a VM. O carregamento dos provedores desses plugins é feito de preferência usando um método estático desta classe.
- Author:
- sergio
-
Constructor Summary
ConstructorsConstructorDescriptionCria um ClassLoader que carrega todos os plugins, quando não se sabe o nome do plugin que se quer usar.PluginClassLoader
(String pluginName) Cria um ClassLoader que carrega um plugin pelo nome dele. -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> T
findProvider
(Class<T> claz) Retorna o primeiro provedor encontrado para a classe informada no classloader do contexto atual, ou nulo se não houver.<T> T
getProvider
(Class<T> claz) Retorna o primeiro provedor encontrado para a classe informada neste classloader, ou nulo se não houver.static boolean
Verifica se o plugin existeMethods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findClass, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstance
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
PluginClassLoader
Cria um ClassLoader que carrega um plugin pelo nome dele.- Parameters:
pluginName
- o nome do arquivo de plugin, sem a extensão.jar
-
PluginClassLoader
public PluginClassLoader()Cria um ClassLoader que carrega todos os plugins, quando não se sabe o nome do plugin que se quer usar.
-
-
Method Details
-
hasPlugin
Verifica se o plugin existe- Parameters:
pluginName
- o nome do arquivo de plugin, sem a extensão.jar
- Returns:
- se o plugin existe
-
getProvider
Retorna o primeiro provedor encontrado para a classe informada neste classloader, ou nulo se não houver.Se o ClassLoader não encontrar um provedor, é fechado imediatamente. Se encontrar, fica aberto para ser usado pelo plugin.
(Quando ele é fechado? Isso não dá problema?)
- Type Parameters:
T
- o tipo de provedor que se quer obter- Parameters:
claz
- a classe cujo provedor vai ser procurado- Returns:
- o provedor encontrado
-
findProvider
Retorna o primeiro provedor encontrado para a classe informada no classloader do contexto atual, ou nulo se não houver.- Type Parameters:
T
- o tipo de provedor que se quer obter- Parameters:
claz
- a classe cujo provedor vai ser procurado- Returns:
- o provedor encontrado
-