sábado, 30 de maio de 2020

Jaspersoft Studio + Lombok Instalação


Devo dizer que foi uma tarefa bem chata de se fazer ainda mais que o lombok no ubuntu não conseguiu reconhecer nem o Eclipse comum quem dirá a versão modificada que é o Jasper Studio nossa maravilhosa IDE para criação de relatórios das Jaspersoft.

Problema: Não instala de forma automática.


Necessidade: devido estar usando lombok no projeto se faz necessário que a IDE de relatórios também seja capaz de compilar os beans gerando assim setters e getters usando as annotations do lombok.

Soluçao: Instalar manualmente. Após encontrar o diretório de instalação do seu Jaspersoft Studio dentro do sistema operacional no seu computador, que no meu caso estava no caminho "/opt/tibco/TIB_js-studiocomm_6.12.2"(Ubuntu 16.04).

Vamos seguir a complicada explicação descrita dentro do proprio jar clicando em Show me what this installer will do to my IDE installation.


Considerações nao teremos dentro da pasta de instalação do Jaspersoft Studio um arquivo chamado Eclipse.ini nas sim Jaspersoft Studio.ini, como pode ser visto a seguir:


Copie o arquivo jar do lombok para dentro deste diretório e caso não tenha permissão de escrever, como eu basta conceder essa permissão pelo terminal  :x.

Após o arquivo estar no diretório abra o arquivo .ini e adicione no final do arquivo o caminho para o jar  do lombok lembrando se seu jar tem de estar com o mesmo nome que você informar no arquivo de configuração caso contrário vai acontecer um erro e a IDE não deve abrir.


basta colar a seguinte instrução " -javaagent:lombok.jar  " - Sem as aspas por favor rs. O arquivo deve ficar como acima, e para ter certeza conseguiu instalar corretamente basta abrir a IDE  > Help > About TIBCO Jaspersoft Studio e como pode notar na imagem temos descrito a versão do lombok instalada descrita nesta janela.



Agora e so compilar seu projeto e Correr para o abraço

terça-feira, 1 de outubro de 2019

JPA MAPEAMENTO MAP COM CHAVE ENUM E VALOR OBJECT


A baixo a descrição em código de como Mapear um objeto do tipo Map tendo como chave um Enum e valor uma Entidade que poderia ser qualquer outro Objeto

@Data @AllArgsConstructor @NoArgsConstructor @Builder
@Entity
@Table(schema = "gdf",name = "tb_VeiculoPneus")
 public
 class VeiculoPneus implements Serializable{

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CodVeiculo")
 private Veiculos codigoVeiculo;


    @OneToMany
    @JoinTable(name = "tb_VeiculoPosicaoPneu",schema = "gdf"
       ,uniqueConstraints = 
         @UniqueConstraint(name="UK_PNEU_VEICULOPOSICAOPNEU"
          ,columnNames={"CodPneu"})
       ,joinColumns= 
         @JoinColumn(name="CodVeiculoPneus"
          ,foreignKey= 
            @ForeignKey(name="FK_VEICULOPNEUS_VEICULOPOSICAOPNEU")
         )
       ,inverseJoinColumns=  
         @JoinColumn(name="CodPneu"
          ,foreignKey= 
            @ForeignKey(name="FK_PNEU_VEICULOSPOSICAOPNEU")
         ) 
    )
    @MapKeyEnumerated(EnumType.STRING)
    @MapKeyClass(PosicaoPneu.class)
    @MapKeyColumn(name ="CodPosicao")
 private Map<PosicaoPneu,Pneu> pneus;   

 }

Este mapeamento gera a seguinte saída SQL:

 create table gdf.tb_VeiculoPosicaoPneu
 (
    CodVeiculoPneus int not null
  , CodPneu         bigint not null
  , CodPosicao      varchar(255) not null
  , primary key (CodVeiculoPneus, CodPosicao)
        )
  
 alter table gdf.tb_VeiculoPosicaoPneu 
       add constraint UK_PNEU_VEICULOPOSICAOPNEU 
 unique (CodPneu)
 
 alter table gdf.tb_VeiculoPosicaoPneu 
       add constraint FK_PNEU_VEICULOSPOSICAOPNEU 
       foreign key (CodPneu )
       references gdf.tb_Pneu
    
 alter table gdf.tb_VeiculoPosicaoPneu 
       add constraint FK_VEICULOPNEUS_VEICULOPOSICAOPNEU 
       foreign key (CodVeiculoPneus) 
       references gdf.tb_VeiculoPneus

segunda-feira, 26 de agosto de 2019

Script Batch (cmd) Windows SQLServer Backup

Bom dia!

Durante o final de semana trabalhei em um script para relização do backup via prompt de comando, mas não é apenas um backup que ele realiza dentre as tarefaz atribuidas o script segue os seguintes passos:


  1. Faz backup de múltiplas bases
  2. Compacta utilizando 7-zip
  3. Move o arquivo Compactado para um diretorio na rede.
  4. Caso ocorra algum erro envia e-mail para notificar
  5. Caso ocorra tudo bem tambem envia um e-mail notificando
Requisitos para que esse script funcione corretamente:
  • SQLCMD 
  • 7z
  • Blat

quarta-feira, 27 de junho de 2018

PFsense DNS Resolver Host Overrides e Domain Overrides como configurar

Boa Noite!

Depois de muitas duvidas em como configurar  principalmente o Host Overrides finalmente consegui chegar a uma conclusão de como configurar corretamente. Comecemos com o mais simples Domain Overrides.

Cenário tenho um servidor Samba como controlador de Dominio e gostaria que ao realizar uma consulta dns em minha rede o pfsense responde-se de forma satisfatória as pesquisas então vamos assumir que meu dominio é SANTOS.TRANSPARENCY e a maquina na qual ele responde esta no meu ip de rede 192.168.1.5 então navego pelo menu Services > DNS Resolver rolo a pagina até embaixo e clico em +add e faço a seguinte configuração conforme a baixo.

Clique na Imagem para Ampliar

Salvo e em seguida aplico as mudanças. Verifico se vou conseguir realizar um ping no dominio e se vai apontar para o ip desejado.

Clique na Imagem para Ampliar
Observamos que no primeiro comando estou conseguindo "pingar" o dominio perfeitamente. No segundo é o nome registrado  da maquina dentro do meu DHCP, tambem respodendo perfeitamente.

Agora vamos para o Host Overridades

Cenario tenho um ubuntu server com GLPI e OCSINVENTORY, e eu desejo acessar o GLPI diretamente ao digitar no navegador http://glpi/ até ai bastaria eu dar o nome de glpi a esta maquina no serviço de dhcp e ativar a função no DNS Resolver de mapear os dns registrados no dhcp Server, mas sempre temos um mas, durante a instalação dos clientes do ocsinventory por padrão vem a url http://ocsinventory-ng/ocsinventory eu poderia mudar a url para http://192.168.1.4/ocsinventory, mas seria pouco pratico para mim então eu quero acessar ambos pelas url, vamos a configuração.

Mas antes lembra quando voce configurou o seu pfsense e colocou um dominio ? Não lembra ? tudo bem só ir no menu System > General setup e veja o que digitou em Domain essa informação é importante pois sera usada para realizar a substituição do host, no meu caso é santos.transparency.

A configuração a baixo mostra o seguinte:

Host: NOME DA MAQUINA NO MEU DHCP SERVER O QUAL FOI MAPEADO NO DNS

Domain: que no meu caso é santos.transparency, por isso é importante saber qual o dominio(FQND)

IP ADDRESS: IP da maquina que ira responder as pesquisas pelos Host names no meu caso 192.168.1.4

Em Additional Names for this host vou adicinar os dominios adicionais que quero que passem para essa maquina, como pode ser visto na imagem poderia haver muitos mais.

Clique na imagem para Ampliar
Em caso de duvidas deixe nos comentarios.

quinta-feira, 20 de julho de 2017

Refatoração de Codigo Java

Olá!
Me solicitaram uns novos argumentos a esta janela:


No caso são os tipos de motoristas(Funcionario,Agregado e Terceiro). Até bacana mas senti que precisava ser dinâmico independente da escolha caso nao fosse assim nao estaria interessante. Pensei em como iria implementar este codigo tentei varias coisas ontem, mas sem sucesso, isso por que programar de cabeça cheia nao dá. Ai fiz o de sempre no caminho para casa por 25 km fiquei pensando em como solucionar meu problema, e então saiu o primeiro codigo que deu certo:

Ai olhei para esse codigo e pensei.. que feio.. deve ter alguma forma de melhorar esse codigo fazendo de outra maneira, ai me ocorreu usar  de mudar e pensei no seguinte. Tenho 3 JCheckBoxp posso usar um Case e colocar  o codigo dentro de 2 casos, Ai criei um metodo que armazenava os JCheckBox ao um List caso eles estivessem selecionados.
Pronto com isso eu consegueria pegar a quantidade e quais  JCheckBox estariam selecionados. Dai foi so juntar A+B, o switch  case recebia  o total da lista e dentro de cada caso havia um codigo diferente, conforme podemos ver a baixo utilizei o proprio texto do componente como clasula da pesquisa ja que eram identicos as categorias.

Olha que belezinha comparando a quantidade de linhas com o primeiro codigo esse ai tem apenas 10 e com uma cara muito mais limpa e clara sem falar legivel.

Recebe os JCheckBox caso tenha 1 seja ele qual for concatena com a String que ja havia com o codigo mais generico e observem como pego o argumento se so tem 1 com certeza  esta na posição 0 do list, depois pego o texto descrito no componente e o transformo todas as letras para Maiusculas, Ai esta o primeiro. No Segundo precisei adicionar um pouco mais  por causa da propria pesquisa mas a ideia foi praticamente a mesma do 1.

E é isso refatorem sempre que der os codigos reduza o tamanho melhore os metodos e vamos continuar com as boas praticas.

quinta-feira, 10 de março de 2016

Expressões Regulares Java - Regex

Olá

Durante meus quase 10 anos de programação com a linguagem Java, não consigo recordar se precisei ou não utilizar expressões regulares... mas durante alguns dos desafios no site HackerRank, fui forçado a estudar para conseguir resolver o desafio que exigia que em uma String X, caso ouve-se pontos(Padrão inglês não tem acentos).

No Site da Oracle existe uma ótima documentação que qualquer um pode ler facilmente a aprender, mas para variar esta em inglês(Sim Jovens Inglês é indispensável).

Segundo a Oracle o que podemos fazer com expressões regulares são pesquisas, edições ou manipulação do texto e dados em Strings;

Vou usar como referencia para dar uma explicada básica o desafio que estava tentando realizar no HackerRank.

Possuía esta entrada:
He is a very very good boy, isn't he?
Que deveria sair com esta saída:
He
is
a
very
very
good
boy
isn
t
he
Em suma precisava retirar a pontuação da frase.
E o próprio enunciado dava a dica sobre usar expressões regulares. Então fui estudar para tentar resolver meu problema.


ConstrutorDescrição
[abc]a, b, or c (Classe Simples)
[^abc]Qualquer carácter exceto a, b, ou c (negação)
[a-zA-Z]a até z, ou A até Z, inclusive (alcance)
[a-d[m-p]]a ate d, ou m até p: [a-dm-p] (Uniao)
[a-z&&[def]]d, e, ou f (interseção)
[a-z&&[^bc]]a até z, exceto para b e c: [ad-z] (subtração)
[a-z&&[^m-p]]a até z, e não m até p: [a-lq-z] (subtração)

 Dai fui testando um a um para ver como se comportam afinal , ver algo funcionando e muito diferente de ler como funciona.

Ai pensei só quero as letras sem  acentos, de cara iria usar a expressão [a-zA-Z] , mas como nada é tao simples, usei o método replaceAll da API String. Ela aceita dois Argumentos, o primeiro um Regex e o segundo a String que ira substituir de acordo com o Regex.

Porem ser usar ele desta forma String.replaceAll("[a-zA-Z]", " "); . Se eu fizer exatamente assim estou dizendo para ele substituir qualquer letra Minuscula ou Maiúscula por Espaço " ";
Meu objetivo e justamente o contrario, então como é o contraio eu vou negar essa regra invertendo a saida dela usando  o simbolo da negação ^ , mudando minha expressao para String.replaceAll("[^a-zA-Z]", " ");

Agora sim tenho a saida que quero sem os Acento. Mas para complementar e explicar como fiz para conseguir as palavras cada uma em uma linha.



String.replaceAll("[^a-zA-Z]", " ").split(" ") adicionando o split(" ") eu tenho como retorno um Array de String[] e com isso posso usar um forEach para percorrer o Array e Imprimir em cada linha cada uma das palavras.

Duvidas ? Comenta ai.

quinta-feira, 5 de novembro de 2015

CRIAR PROJETO MAVEN EM JSP 2.2 - ECLIPSE

Olá a Todos.

Se voce como eu esta a horas tentando entender o por que vc tenta criar um projeto Maven com jsp e acontece varias falhas, dentre elas nao consegue mudar o modulo dinamico para 2.5 ou superior, bem o problema é bem mais simples do que parece.
Durante a criação de um novo projeto maven nesta tela, caso a caixa circulada não  esteja selecionada a selecione.

Depois so completar os dados de acordo e clicar em finish