Otimizando Aplicações Java 9 no PLCnext Control com Jlink
Com o Java 9, uma nova ferramenta chamada jlink foi introduzida. Ela combina módulos e constrói uma imagem de runtime all-in-one. Por um lado, todo o JDK ARM de 32 bits pode ser executado em um PLCnext Control. Mas com jlink e módulos, é possível reduzir os recursos necessários para sua aplicação Java. Ela cria um bundle com apenas as partes necessárias do JDK para sua aplicação.
Pré-requisitos
- JDK para seu sistema host
- JDK para o controlador
Os binários do OpenJDK para muitas plataformas podem ser encontrados, por exemplo, no AdoptOpenJDK. Para este tutorial, escolhemos o Linux arm32 jdk-12.0.2+10 para o controlador e seu equivalente para um sistema host Windows x64. Estamos usando a seguinte localização dos JDKs:
C: ---Java
| +---jdk-12.0.2
| ...
| ---jdk-12-ARM-32bit ...
Crie um Módulo de Aplicação
Neste exemplo, apenas imprimimos um Hello World no console. Para usar jlink, temos que colocar esta pequena aplicação em um módulo. Meu ponto de partida no terminal é uma pasta chamada "HelloWorld" e uma pasta src com a seguinte estrutura.
HelloWorld
---src
---de.plcnext.hello
| module-info.java
| ---de
---plcnext
---hello HelloWorld.java
Este é nosso pequeno exemplo de código no arquivo HelloWorld.java:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
E o module-info.java é necessário para criar o módulo:
module de.pxc.hello { }
Após criar a pasta src, compilamos nosso projeto. Para isso, usamos o seguinte comando no terminal.
C:Javajdk-12.0.2binjavac.exe -d .modulesde.plcnext.hello .srcde.plcnext.hellodeplcnexthelloHelloWorld.java .srcde.plcnext.hellomodule-info.java
Uma pasta modules e classes java são criadas:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
| ---de
---plcnext
---hello HelloWorld.class
Para testar nosso módulo no sistema host, podemos rodá-lo com o seguinte comando:
C:Javajdk-12.0.2binjava.exe --module-path .modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Isso deve exibir Hello PLCnext world!.
Como Usar o jlink
Agora queremos colocar isso no nosso dispositivo sem o JDK inteiro de 300MB. Para isso, usamos jlink sem parâmetros adicionais no primeiro passo. Mas primeiro precisamos de uma informação a mais: quais módulos adicionais são necessários. Descobriremos isso analisando nosso módulo com jdeps.
C:Javajdk-12.0.2binjdeps.exe --module-path ".modules" --add-modules "de.plcnext.hello"
Isso nos diz que precisamos do java.base adicionalmente ao nosso módulo. Como module-path, escolhemos o caminho para nossa aplicação e o caminho para os jmods do JDK da nossa plataforma alvo. Neste caso C:Javajdk-12-ARM-32bitjmods.
Agora nossa chamada jlink parece assim:
C:Javajdk-12.0.2binjlink.exe --module-path ".modules;C:Javajdk-12-ARM-32bitjmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
O resultado é uma pasta HelloWorldjre com apenas cerca de 45MB. Copiamos isso para nosso controlador. No caso deste exemplo para /opt/plcnext/projects/java/. Precisamos tornar o arquivo "java" na pasta bin do HelloWorldjre executável via chmod +x java e iniciar nosso módulo
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Deveria rodar a aplicação e exibir como antes Hello PLCnext world!. Usando alguns parâmetros adicionais do jlink, você pode reduzir o pacote ainda mais (neste exemplo para 28MB) usando --strip-debug, --no-header-files, --no-man-pages e --compress=2. Onde a compressão economiza mais, mas pode prejudicar o desempenho no final.
Tecnologia industrial
- Circuitos de Controle: Fundamentos, Aplicações e Melhores Práticas
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Java 10: Aprimorando Performance com Compartilhamento de Dados de Classe (App CDS)
- 5 Principais Benefícios do Controle Remoto de Produção para a Indústria Moderna
- Otimizando Dispositivos PLCnext Control com SNMP: Guia Prático
- Desenvolver Aplicação Console PLCnext em C#: Guia para Iniciantes
- Gerenciamento de Cluster no PLCnext: Aproveitando Kubernetes para Automação Industrial