Desenvolvedor
O documento de arquitetura orienta o desenvolvimento no padrão do PJe: Acessar
O documento de gerenciamento de configuração traz orientações para a produção e guarda de artefatos e liberação de versões: Acessar
Alguns procedimentos necessários para o desenvolvimento no PJe:
Conteúdo |
Configurando o ambiente de desenvolvimento
Download das ferramentas
Para iniciar o desenvolvimento do sistema PJE, faça o download das ferramentas necessárias através do endereço: https://wwwh.cnj.jus.br/svn/projeto_pje/trunk/ambiente (atualizar)
Veja como fazer o download: Vídeo
Instalando o Postgres
Para instalar o Postgres, execute o instalador que foi baixado anteriormente deixando as opções sugeridas. Na etapa de definição de senha de administrador, informe "P123456."
Criando base de dados
Crie duas bases de dados: PJE_1_4 e PJE_1_4_BIN, sendo a primeira necessária para armazemanento dos dados do PJE e a segunda para armazenamento dos documentos dos processos gerados pelo PJE.
Veja como fazer a criação da base de dados: Vídeo
Restaurando base de dados
Após criar as bases, vamos copiar os dados e a estrutura do banco de desenvolvimento e restaurá-lo em nosso banco local.
Veja como: Vídeo
Configurando o Eclipse
Tutorial que ensina as principais configurações para desenvolvimento no eclipse, tais como: configuração do MAVEN, download de códigos-fonte no SVN, configuração do JBoss, configuração de HotDeploy (atualizar)
Gerando Certificados CACERTS
O PJE faz uso de alguns webServices para consulta de dados, como receita federal e OAB. Para que ele consiga executar as pesquisas, é necessário gerar alguns certificados. Veja no vídeo como fazê-lo:
Desenvolvimento
Criando entidades
Neste vídeo, demonstraremos como criar entidades para armazenamento de dados no padrão exigido pelo PJE.
Script de criação das tabelas usadas no exemplo: Arquivo:Script criacao tabelas.txt
Criando DAO
Neste vídeo, demonstraremos como criar classes do tipo DAO para acesso aos dados de uma entidade. Uma DAO acessa dados de somente uma entidade.
Criando Manager
Neste vídeo, demonstraremos como criar classes do tipo "manager" para adicionarmos regras de negócio e validações antes de persistir os dados de uma entidade. Managers controlam regras de negócio de apenas uma entidade.
Criando Action
Neste vídeo, demonstraremos como criar classes do tipo "action" que farão o controle de uma determinada tela.
Criando Páginas
Neste vídeo, demonstraremos como criar páginas "xhtml" de pesquisa e edição de registros.
Gerando Deploy
Vídeos que orientam o desenvolvedor sobre como gerar corretamente o deploy do PJE:
- Deploy através do MAVEN:
- Deploy manualmente:
Interfaces para extensão do sistema
O sistema PJe evidentemente não é capaz de contemplar toda a variedade de implementações existentes dadas pelos tribunais para os diversos serviços auxiliares ou acessórios que orbitam a atividade jurisdicional. Alguns desses serviços são intensamente próximos da atividade judicial, outros são um pouco mais distantes. O traço mais comum é, no entanto, a grande possibilidade de variação de implementação dada por cada um dos tribunais.
Em razão dessa apreensão, é imprescindível permitir que algumas atividades sejam implementadas pelo tribunal interessado e conectadas ao PJe. Essa conexão pode ser feita de várias maneiras, desde serviços web até implementações mais internas. Uma alternativa de implementação mais rápida é a construção de componentes Seam que possam ser instalados no PJe para sua posterior utilização em nós de fluxos.
A presente página apresenta as interfaces inicialmente disponibilizadas para algumas das atividades mais críticas do sistema e disponibiliza um projeto de exemplo contendo uma implementação vazia para uma dessas interfaces.
Interfaces disponibilizadas
Na versão 1.0 do projeto de interfaces do PJe, serão disponibilizadas interfaces para as seguintes atividades:
- verificação de prevenção em relação a outros sistemas - br.jus.cnj.pje.extensao.VerificadorPrevencaoExterna
- envio e recebimento de informações para sistema de diário eletrônico - br.jus.cnj.pje.extensao.PublicadorDJE
- envio e recebimento de comunicações postais - br.jus.cnj.pje.extensao.ConectorECT
- verificação de recolhimento de custas processuais - br.jus.cnj.pje.extensao.VerificadorCustasProcessuais
Essas interfaces estão definidas no projeto pje-interfaces-1.0.0, empacotadas em um arquivo JAR que deve ser utilizado na implementação da interface. A documentação relativa a cada uma das interfaces pode ser consultada diretamente na WIKI e nos arquivos de documentação do desenvolvedor.
Desenvolvimento de ponto de extensão
O desenvolvimento do ponto de extensão do PJe passa pelas seguintes etapas:
- implementação da interface como componente Seam
- definição de arquivo components.xml em que o componente da interface seja inicializado pela classe que a implementa
- empacotamento do ponto de extensão, devendo ser identificadas as bibliotecas de dependência para instalação junto ao PJe
- instalação do ponto de extensão e concretização de seus testes
Implementação da interface
O JBoss Seam 2.2.X permite que sejam criados componentes em pacotes autônomos, que podem ser posteriormente instalados em sistemas Seam. Uma vez instalados, esses componentes são inicializados juntamente com os demais componentes da aplicação e ficarão disponíveis para injeção e utilização pela aplicação. Para tanto, basta implementar a interface e, no arquivo components.xml, definir o componente e a classe que o implementa. O exemplo que será apresentado versará sobre a implementação da interface de verificação de prevenção. Essa interface tem uma só função definida:
String[] verificaPrevencao(String processoOrigem, int codClasse, int codAssuntoPrincipal, int[] codAssuntos, String[] nomesAutores, String[]
documentosAutores, String[] nomesReus, String[] documentosReus)
A implementação pode adotar o mecanismo que o tribunal implementador entender mais adequado, desde arquivo de sistemas até serviços Web. Neste exemplo, vamos adotar um mecanismo de verificação em banco de dados.
<code class="java"> @Name("verificadorPrevencaoExterna") @Scope(ScopeType.APPLICATION) @Install(precedence=Install.APPLICATION) @Startup public class VerificadorPrevencaoExemplo implements VerificadorPrevencaoExterna { @In(create=true) private DataSource prevencaoDS; @Override public String[] verificaPrevencao(String processoOrigem, int codClasse, int codAssuntoPrincipal, int[] codAssuntos, String[] nomesAutores, String[] documentosAutores, String[] nomesReus, String[] documentosReus){ List<String> nomesPartes = new ArrayList<String>(); nomesPartes.addAll(Arrays.asList(nomesAutores)); nomesPartes.addAll(Arrays.asList(nomesReus)); List<String> documentosPartes = new ArrayList<String>(); documentosPartes.addAll(Arrays.asList(documentosAutores)); documentosPartes.addAll(Arrays.asList(documentosReus)); int numeroNomes = nomesPartes.size(); int numeroDocumentos = documentosPartes.size(); String qStr = buildQuery(numeroDocumentos, numeroNomes); Connection con = ds.getConnection(); PreparedStatement pstmt = con.prepareStatement(qStr); pstmt.setInt(1, codClasse); pstmt.setInt(2, codAssuntoPrincipal); for(int i = 3; i < 3 + numeroNomes; i++){ pstmt.setString(i, nomesPartes.get(i - 3)); } for(int i = 3 + numeroNomes; i < 3 + numeroNomes + numeroDocumentos; i++){ pstmt.setString(i, documentosPartes.get(i - numeroNomes - 3)); } ResultSet rs = pstmt.executeQuery(); List<String> ret = new ArrayList<String>(); while(rs.next()){ ret.add(new String(rs.getString(1))); } return ret.toArray(new String[]{}); } private String buildQuery(int numeroNomes, int numeroDocumentos){ StringBuilder sb = new StringBuilder("SELECT DISTINCT p.numero FROM tb_processo AS p " + "JOIN tb_partes AS par ON par.processo = p.numero " + "JOIN tb_pessoa AS pes ON par.cod_pessoa = pes.cod_pessoa WHERE p.classe = ?1 AND p.assunto = ?2 AND "); sb.append("(pes.nome IN ("); for(int i = 3; i < 3 + numeroNomes; i++){ sb.append("?" + i); if(i != (2 + numeroNomes)){ sb.append(", "); } } sb.append(") OR pes.documento IN ("); for(int i = 3 + numeroNomes; i < (3 + numeroNomes+ numeroDocumentos); i++){ sb.append("?" + i); if(i != (2 + numeroNomes + numeroDocumentos)){ sb.append(", "); } } sb.append("))"); return sb.toString(); } } </code>
Atentem que essa implementação é *apenas um exemplo*, não se tendo buscado assegurar características mais profundas de segurança ou de performance. No exemplo, não são considerados os assuntos que não o principal e é adotada estratégia única de verificação de prevenção em que é imprescindível a coincidência de classe e assunto, ainda que a posição das partes não seja relevante.
Definição do arquivo components.xml
No exemplo acima, vimos que a implementação reclama a existência de uma fonte de dados. Essa fonte deve ser definida no arquivo components.xml
.
<code class="xml"> <?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd"> <factory name="prevencaoDS" value="DATASOURCE_CONFIGURADO_NO_SERVIDOR_DE_APLICACAO" scope="application"/> </components> </code>
Empacotamento do ponto de extensão
O ponto de extensão deve ser empacotado em um arquivo JAR contendo a(s) classe(s) necessárias à implementação e, aindaa seguinte estrutura mínima:
- arquivo
seam.properties
vazio na raiz do arquivo JAR - pasta META-INF contendo o arquivo
components.xml
A par desse arquivo JAR, é imprescindível que o desenvolvedor do ponto de extensão identifique as bibliotecas de que depende, devendo, especialmente, verificar:
- se a biblioteca já faz parte do servidor de aplicação JBoss em que o PJe será instalado
- se a biblioteca já faz parte das bibliotecas de que o próprio PJe depende (WEB-INF/lib)
- se há alguma incompatibilidade entre as bibliotecas dependentes e aquelas já utilizadas no PJe
Cumpridos os passos acima, o desenvolvedor deverá elaborar um pacote ZIP contendo o JAR do ponto de extensão e os JARs das bibliotecas extras necessárias.
Instalação do ponto de extensão
A instalação do ponto de extensão é feita inserindo nos JARs contidos no pacote ZIP acima referido na pasta WEB-INF/lib do PJe. Sua utilização será feita por meio de injeção em componentes Seam do PJe ou indiretamente, em chamadas EL contidas em arquivos xhtml. Tanto a injeção quanto o uso em XHTMLs será feita por meio do nome padronizado de cada interface, que é o nome CamelCase da interface, sendo a primeira letra minúscula.
- pje-interfaces-1.0.0.jar
- pje-interfaces-1.0.0-javadoc.jar
- pje-interfaces-1.0.1.jar
- pje-interfaces-1.0.1-javadoc.jar
- pje-interfaces-1.0.2.jar
- pje-interfaces-1.0.2-javadoc.jar
- pje-interfaces-1.0.3.jar
- pje-interfaces-1.0.3-javadoc.jar
- pje-interfaces-1.0.4.jar
- pje-interfaces-1.0.4-javadoc.jar
Interoperabilidade
Sistemas externos podem ser integrados ao PJe através de serviços disponíveis no padrão MNI.