Configurando ambiente de desenvolvimento
Conhecimentos necessários e desejáveis
Necessários
- Linguagem de programação Java;
- Persistência com JPA e Hibernate;
- Linguagem SQL do banco de dados PostgreSQL;
- JSF; (PJE1)
- Angular4+; (PJE2)
- SpringBoot, SpringCloud; (PJE2)
- JavaScript;
- Wildfly 9.0.2;
- Uso da ferramenta Eclipse.
Desejáveis
- Uso da ferramenta Maven;
- Uso das ferramentas Git e GitLab;
- Padrões de projeto (design patterns);
- JBPM;
- Uso da ferramenta de controle de demandas JIRA;
- Ter tido algum contato de uso com o sistema PJe.
Principais ferramentas
Jira – gerenciador de desenvolvimento de demandas https://www.cnj.jus.br/jira/projects/PJEII/issues;
Git – sistema de controle de versões do código http://git.cnj.jus.br/pje/pje/merge_requests;
Jenkins – gerenciador de integração;
Rocketchat – ferramenta de comunicaçãoda comunidade https://rocketchat.cloud.pje.jus.br;
Wildfly - servidor de aplicação http://wildfly.org/news/2015/10/26/WildFly902-Released].
Configurando o ambiente de desenvolvimento PJeLegacy com Eclipse
Pré-requisitos mínimos do sistema
- Java JDK 8 (Oracle ou OpenJDK)
- Eclipse IDE
- PostgreSQL 9.4 ou superior
- Apache Maven 3
- Wildfly 9.0.2 com mojarra 1.2
- Docker 18.09 ou superior
- Node 8 ou superior
- NPM 6 ou superior
- Git client
Configurações do Maven
No diretório raiz do usuário será necessário alterar/criar o arquivo settings.xml que se encontrar na pasta .m2.
$ cd ~/.m2
$ touch settings.xml
Incluir o seguinte conteúdo no arquivo settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<server>
<id>nexus</id>
<username>developer</username>
<password>123456</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<name>nexus.cnj.jus.br</name>
<url>https://nexus.cnj.jus.br/repository/maven-public</url>
<mirrorOf>external:*</mirrorOf>
</mirror>
</mirrors>
</settings>
Configurações do SGBD Postgresql
Configurando o arquivo postgresql.conf
É necessário aumentar o parâmetro max_prepared_transactions do arquivo de configuração do postgres postgresql.conf:
$ locate postgresql.conf
$ cd /etc/postgresql/9.1/main
$ sudo gedit postgresql.conf
Colocar um valor maior que 20.
Criando um banco de dados novo
Criar um novo banco com os parâmetros conforme abaixo:
Restaurar um dump no novo banco de dados criado
$ psql -U postgres -h localhost -d pje < "~/Dumps/dump.sql"
ou
$ pg_restore -U postgres -h localhost -v -Fc -d nome_base arquivo.dump
Configurações do servidor de aplicação Wildfly
O servidor Wildfly a ser utilizado deve conter o módulo Mojarra 1.2.
Com o intuito de facilitar a configuração do servidor wildfly ou Jboss EAP a partir do zero para o PJe 2.x, copie o arquivo https://cnj-pje-programs.s3-sa-east-1.amazonaws.com/pje/config_pje_wildfly_jboss.zip para um diretório, descompacte-o e execute o interface da linha de comando do jboss/wildfly (jboss-cli.sh) a partir do diretório descompactado criado. O motivo para executar dentro do diretório criado se deve ao fato que dentro do arquivo compactado existem 2(duas) adições ao subsystem module do wildfly/jboss a saber: 1) o driver jdbc do postgres e 2) mojarra 1.2. Desta forma, esses dois arquivos devem estar no mesmo diretório do arquivo pje-wildfly.cli!
Os servidores de aplicação não devem ter nenhuma alteração. Sempre usar a configuração full do wildfly/jboss.
Execute o comando:
<JBOSS_HOME>/bin/jboss-cli.bat -c --file=pje-wildfly.cli
Se o comando executou com sucesso, deverá aparecer a seguinte mensagem:
The batch executed successfully
process-state: reload-required
Reinicialize o wildfly/jboss.
Mais alguns pontos a observar:
Configurar a memória da VM do java para o servidor wildfly/jboss pois a configuração padrão é insuficiente para o PJe
Adicionar o parâmetro -noverify na configuração da VM do Wildfly, em Open Launch Configuration
Alterar manualmente o datasource para o banco de dados desejado.
O arquivo de standalone-full.xml deve ser utilizado para subir o servidor de aplicação.
<datasource jndi-name="java:/pjeQuartzNMDS" pool-name="pjeQuartzNMDS" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/pje</connection-url>
<driver>postgres</driver>
<security>
<user-name>postgres</user-name>
<password>P123456</password>
</security>
</datasource>
<xa-datasource jndi-name="java:/pjeDS" pool-name="pjeDS" enabled="true" use-java-context="true" use-ccm="true">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
pje
</xa-datasource-property>
<xa-datasource-property name="prepareThreshold">
0
</xa-datasource-property>
<driver>postgresql</driver>
<new-connection-sql>set search_path=client,core,jt,criminal,public,acl</new-connection-sql>
<xa-pool>
<min-pool-size>5</min-pool-size>
<initial-pool-size>5</initial-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</xa-pool>
<security>
<user-name>postgres</user-name>
<password>P123456</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
<xa-datasource jndi-name="java:/pjeLogDS" pool-name="pjeLogDS" enabled="true" use-java-context="true">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
pje_log
</xa-datasource-property>
<driver>postgresql</driver>
<xa-pool>
<min-pool-size>5</min-pool-size>
<initial-pool-size>5</initial-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</xa-pool>
<security>
<user-name>postgres</user-name>
<password>P123456</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</xa-datasource>
<xa-datasource jndi-name="java:/PJE_DESCANSO_BIN_DS" pool-name="pjeBinDs" enabled="true" use-java-context="true">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
pje_bin
</xa-datasource-property>
<driver>postgresql</driver>
<new-connection-sql>set search_path=client,core,public</new-connection-sql>
<xa-pool>
<min-pool-size>5</min-pool-size>
<initial-pool-size>5</initial-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</xa-pool>
<security>
<user-name>postgres</user-name>
<password>P123456</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</xa-datasource>
<xa-datasource jndi-name="java:/pjeQuartzDS" pool-name="pjeQuartzDS" enabled="true" use-java-context="true" use-ccm="true">
<xa-datasource-property name="DatabaseName">
pje
</xa-datasource-property>
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<driver>postgresql</driver>
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</xa-pool>
<security>
<user-name>postgres</user-name>
<password>P123456</password>
</security>
</xa-datasource>
Alterações no arquivo standalone-full.xml
Habilitar o wildfly para aceitar conexões externas (equivalente ao -b 0.0.0.0 do jboss 5.1). Incluir entre o final da seção </extensions>
e o início da seção <management>
- linhas 33 a 36 aproximadamente.
<system-properties>
<property name="jboss.bind.address" value="0.0.0.0" />
<property name="jboss.bind.address.management" value="0.0.0.0" />
</system-properties>
Alterar o subsystem weld para incluir a cláusula require-bean-descriptor.
Antes:
<subsystem xmlns="urn:jboss:domain:weld:2.0" />
Depois:
<subsystem xmlns="urn:jboss:domain:weld:2.0" require-bean-descriptor="true" />
Criação das entradas dos drivers jdbc para o jboss Dentro do arquivo standalone.xml, existe uma seção chamada <drivers>
, que fica dentro da seção <datasources>
, que pertence ao subsystem <subsystem xmlns="urn:jboss:domain:datasources:3.0">
e deve ser configurada em dois passos. O primeiro é a configuração do driver e o segundo, o datasource:
<driver name="postgres_XA" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="postgres" module="org.postgresql">
<datasource-class>org.postgresql.Driver</datasource-class>
</driver>
Note que o nome do módulo module="org.postgresql" deve ser rigorosamente o nome criado no arquivo module.xml quando implantado o driver jdbc do postgres.
Segue um exemplo como ficaria a seção drivers completa:
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="postgres_XA" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="postgres" module="org.postgresql">
<datasource-class>org.postgresql.Driver</datasource-class>
</driver>
</drivers>
Para testar se tudo está correto, ao iniciar o wildfly, no arquivo de log, deverão aparecer as entradas para os dois drivers criados no arquivo standalone.xml:
INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 36) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.4)
INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 36) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.4)
INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-8) WFLYJCA0018: Started Driver service with driver-name = postgres
INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) WFLYJCA0018: Started Driver service with driver-name = postgres_XA
Clonando o repositório do git
O pje-legacy encontra-se no repositório do PJe.
Para clonar o repositório, execute o comando abaixo:
$ git clone git@git.cnj.jus.br:pje/pje.git
JCR Storage
JCR Storage é responsável pelo armazenamento dos binários utilizados pelo PJe.
Clonando o repositório do git
O jcr-storage encontra-se no repositório do JCR Storage.
Para clonar o repositório, execute o comando abaixo:
$ git clone git@git.cnj.jus.br:utilitarios/jcr-storage.git
Gerando jar e executando JCR
Após baixar o projeto e com maven devidamente configurado, execute:
$ mvn clean package -DskipTests=true
Feito isso será gerado o arquivo jcr-storage-server-exec.jar na pasta target do server. Conceda permissão de execução e rode esse jar passando os parâmetros:
$ java -jar jcr-storage-server-exec.jar -httpPort 9000 -Dbr.jus.cnj.jcr.serverProperties=D:<HOME_DIR>/src/main/resources/server.properties
Configurações do JCR Storage
Próximo passo é criar um arquivo jcr-storage.properties num diretório do seu ambiente, por exemplo, D:\\jcr-storage.properties
, com seguinte conteúdo:
jcr.username=admin
jcr.password=admin
jcr.url=http://localhost:9000/storage/documents
jcr.chunkSize=800000
jcr.hostMaxConn=10000
Configuração do frontend
O cliente web do Pje (PJE2-WEB) encontra-se no repositório do PJe2-WEB.
Para clonar o repositório, execute:
$ git clone git@git.cnj.jus.br:pje2/pje2-clientes/pje2-web.git
Feito isso, rode o comando do npm para inicializar a aplicação na porta 4200:
ng serve
Configuração do Eureka e Gateway
O Eureka (PJe-Discovery) e Gateway (PJe-Gateway) são 2 componentes que podem ser instânciados através do Docker localmente.
Para isso é preciso fazer o login no registry do CNJ:
$ docker login registry.cnj.jus.br
Login: <LOGIN>
Password: <PASSWORD>
Login Succeeded
Crie um arquivo docker-compose.yml:
version: "3"
services:
discovery:
image: registry.cnj.jus.br/pje2/pje-discovery:latest
ports:
- '8761:8761'
gateway:
image: registry.cnj.jus.br/pje2/pje-gateway:latest
ports:
- '8180:8180'
- '8181:8181'
environment:
- EUREKA_SERVER_DEFAULT_ZONE=http://discovery:8761/eureka/
- HOSTNAME=localhost
Próximo passo, é executar o docker compose no diretório do arquivo yml criado:
$ docker-compose up -d
Configuração do Eclipse
Plugins
Filesync
Instalar o plugin FileSync para o eclipse:
Após a instalação, clicar com o botão direito no projeto pje-web, selecionar "Properties" e localizar o item “File synchronization”. Clicar em “Add Folder” e adicionar a pasta /src/main/webapp
:
Abrir a pasta incluída, selecionar “Excluded” e clicar em “Edit”:
Clicar no botão “Add Multiple” do “Exclusion patterns”, selecionar todos os arquivos do WEB-INF exceto a pasta XHTML e clicar em “OK”:
Informar em "Default target folder" o caminho do .war:
JbossTools
Instalar o plugins JBoss Toos para o eclipse. Clique em Help > Eclipse Marketplace:
Digite Jboss Tools no campo Find e clique em Install.
Prossiga com a instalação clicando em confirmar:
Após o restart do Eclipse, o ícone do JBoss Tools aparecerá em Help > About Eclipse IDE:
SonarLint
SonarLint auxilia o desenvolvedor a detectar e corrigir problemas no código enquanto codifica.
Como instalar: No Eclipse, clique em Help → Eclipse Marketplace. Na aba Search digite SonarLint e pressione Enter. Clique em Install para prosseguir com o processo de instalação.
-
Durante a codificação o usuário poderá solicitar uma análise do código produzido. Clique com o botão direito do mouse sobre o projeto e selecione SonarLint → Analyse changed files
-
Existe também a possíbilidade de se realizar um bind (vínculo) com o SonarQube do CNJ. Clique com o botão direito do mouse sobre o projeto e selecione SonarLint → Bind to SonarQube or SonarCloud. Essa associação permite que as mesmas regras aplicadas ao projeto durante a análise pelo SonarQube estejam presentes no Eclipse.
Flyway
No projeto pje-comum, existe um diretório chamado migrations onde estão os scripts de migração do banco do Pje para versão corrente do Pje.
Para que configurar o flyway no Eclipse, abra o pom.xml desse projeto e clique no menu Run > Run Configurations, selecione Maven Build e clique em New launch configuration:
Ativar o profile do flyway no arquivo settings.xml:
<activeProfiles>
<activeProfile>artifactory</activeProfile>
<activeProfile>pje-descanso</activeProfile>
</activeProfiles>
Após esses dois passos, ao clicar em run, deverão aparecer as seguintes informações no console:
---
[INFO] ------------------------------------------------------------------------
[INFO] Building pje-comum 2.1.1.6-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] --- flyway-maven-plugin:2.2.1:migrate (default-cli) @ pje-comum ---
[INFO] Current version of schema "public": 2.1.1.4.001
[INFO] Successfully applied 56 migrations to schema "public" (execution time 00:12.485s).
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
---
Wildfly
Após a instalação do JBoss Tools, na aba Servers, clique com botão direito e adicione um novo server:
Selecione o Wildfly 9.X:
Selecione o Home Directory do Wildfly localmente:
Clicar com botão direito e adicionar o pje-web para Wildfly:
Ao clicar 2 vezes em cima do Server Wildfly, será exibido uma tela de Overview:
Clique em Open Launch Configuration:
Altere/inclua os seguintes argumentos na opção VM arguments:
- Xms: 1024 ou mais;
- Xmx: 1500 ou mais;
- –noverify: flag responsável por evitar verificaçãod o bytecode gerado;
- –Dpje.producao=false: flag responsável de indicação do ambiente;
- -Dbr.jus.cnj.pje.jcr-storage.configuration=
<HOME_DIR>/jcr-storage.properties
: arquivo de configuração do JCR Storage.
Ainda na janela de Open Launch Configuration, clique na aba Environment e adicione a variável ENV_PJE2_CLIENTE_URL=http://localhost:4200
Altere a opção activeByDefault para true no arquivo pom.xml no projeto pje-web, habilitando o profile do jcr-storage:
<profile>
<id>jcr-storage</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>br.jus.cnj.pje</groupId>
<artifactId>jcr-storage-client</artifactId>
</dependency>
</dependencies>
</profile>
Próximo passo, é iniciar o Wildfly:
Dando tudo certo, ao acessar no browser o endereço a página inicial do PJe, deve ser exibida a página de login: