Extensões da JVM

As extensões da JVM permitem que o desenvolvedor cadastre bibliotecas(JARs) para utilizar em seu desenvolvimento.

Existe a possibilidade de carregar um(ou vários) JAR(s) em seu ambiente com a plataforma - chamamos essa funcionalidade de JVM Extensions. Os seus JARs ficam agrupados em algo que chamamos de Bundle. Através do seu bundle id, você cadastra todos os JARs que são necessários para carregar o sua extensão e também usa esse identificador você obtém as classes e cria instâncias dos seus objetos.

Em caso de projetos que são publicados(releases), basta cadastrar o bundle em seu módulo e todo o bundle pode ser publicado junto com o seu projeto.

Java + JavaScript

Com relação a sua implementação, você pode efetuar toda a implementação em Java, subir o JAR e apenas chamar o método criado, ou você pode subir apenas o JAR com o básico e implementar as regras de negócio usando JavaScript.

Nos 2 modelos existem vantagens e desvantagens, por exemplo, mudanças no JAR não são carregadas tão facilmente quanto uma mudança no JavaScript, além de precisar publicar novamente o JAR, será necessário efetuar um reload dos ClassLoaders.

Bundles

Como ainda não temos uma interface gráfica para gerenciar os Bundles no Studio, então os bundles ainda são gerenciados pela nossa equipe de infra-estrutura em seu ambiente de desenvolvimento.

Extensões de JVM (Apache POI)Extensões de JVM (Apache POI)

Extensões de JVM (Apache POI)

Reparem que além do JAR principal, outras dependências podem ser necessárias, caso a biblioteca utilize outras dependências que não sejam padrão do Java(veja no exemplo acima o xmlbeans-2.6.0 e o commons-collections4-4.1 que não fazem parte do POI, mas são dependências direta).

Você precisará obter a árvore de dependência através da documentação da biblioteca ou através de um software de gestão de dependências(Maven por exemplo, ao criar um novo projeto em seu Eclipse, adicionar no pom.xml a biblioteca você poderá ver a árvore inteira em Maven Dependencies).

📘

Com relação a tabela CORE_APPEXTENSIONJAR

  • o campo DS_BUNDLEID é o que define seu bundle, todos os seus JARs devem estar no mesmo bundle, por exemplo: "java.jsch";
  • o campo DS_KEY é uma chave para identificação(pode ser legível ou um valor aleatório, mas ele não deverá mudar);
  • o campo ID_MODULE é o que define em qual módulo essa extensão será empacotada.
  • o campo DS_URL deve ser uma URL pública para o seu JAR, exemplo: "https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.55/jsch-0.1.55.jar".

Depois de carregar os dados na tabela, basta um refresh do ambiente para que o seu bundle seja criado.

Como Utilizar?

Veja abaixo um exemplo de código JavaScript invocando uma extensão carregada dentro de um bundle.

var JarExtensions = require("inpaas.extensions.jar");
var MyClass = JarExtensions.getClass("my.bundleid", "br.com.x.pkg.class");

// You can only get instances of objects with no arguments...
var obj = new MyClass();

// But you can invoke static methods up to 6 arguments 
var val = MyClass.myStaticMethod("a", 2);

Atualmente, essa funcionalidade é utilizada para gerar arquivos XLS de relatórios através do Apache-POI, uma série de JARs que não estão embarcados na plataforma e são carregados quando o Report Builder é instalado. Além disso, já utilizamos o JSch(conexão via SFTP) da mesma forma.

Updated 11 months ago

Extensões da JVM


As extensões da JVM permitem que o desenvolvedor cadastre bibliotecas(JARs) para utilizar em seu desenvolvimento.

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.