Skip to content

IntelliJ – Application context configuration

After spending some time trying to discover why my JSF application worked on eclipse and didn’t on IntelliJ, I found a TomCat setup configuration at Run/Debug Configurations.

And it was like in that picture bellow:

screen-shot-2016-11-23-at-11-30-47

 

 

 

 

 

 

 

Without notice I was getting http status 500 error message as the pic bellow after the deployment:

screen-shot-2016-11-23-at-11-35-24

 

 

 

 

 

 

Solution

After search a little I found what was missing on that configuration.

The context root of a web application determines which URLs Tomcat will delegate to your web application.

In Application context field, you need to put the context path for your project. Generally is recommended that you specify the same context path that you chose to the Maven project. The context path can be found in the root POM file of your project as a <context-root> tag.

screen-shot-2016-11-23-at-11-40-32

 

So the main point here is: Be aware of the application context, which defaults to “/” This means your application when deployed to the server would be available at “http://localhost:8080//” if you want it to be deployed to another path, you need to update the value in the Application Context field. As in my case I put the same WAR application name.

 

After that all the things are working and Mojarra found the root context as the image bellow:

screen-shot-2016-11-23-at-11-59-15

 

 

That’s All.

How to add a Server Runtime Library to a Java EE project using IntelliJ IDEA

After I have some difficult to add server libraries to the project, because in IntelliJ is a lit bit different from Eclipse, I’ve decided to post the solution:

After the project has been opened you will need go in File -> Project Structure.

Featured image

After that you’ll see the structure of project. In this way, where you need to add a dependency. In the left side column you’ll choose modules in Project Settings, choose Dependencies tab(1), to click on + in the bottom of window and select Library… (2), like below.

Featured image

When you click on Library… it will open a window asking you to select the server libraries.

IntelliJ will show only the servers that you have added before.

Featured image

After all of this steps your project will rebuild the project and problems related with compile time should be solved.

Finally your project will be this way.

Featured image

Any problems that you have, ask me.

Configuração oracle client 11 (64 bits) no ubuntu(64 bits) 12

Ultimamente enfretei algumas dificuldades para instalar o client do oracle no ubuntu e fazer o JBoss ‘enxergar’ a instalação do client, pois o mesmo é homologado para distribuições RedHat, então gostaria de compartilhar com vocês as configurações que eu, com a ajuda de alguns amigos do trabalho, consegui fazer a conexão com a base da UNICAMP (onde está alocado nosso projeto).

Alguns trechos estão em inglês e outros em português pois eu fui fazendo várias adaptações, espero que ajude quem tiver com o mesmo problema, qualquer duvida postem. O tutorial abrange desde a instalação do JDK até a instalação do client.

  •  Instalação do JDK

Fazer o passo a passo do seguinte link: http://askubuntu.com/questions/67909/how-do-i-install-oracles-jdk-6

por ultimo setar variáveis de ambiente no arquivo /etc/profile adicionando as seguintes linhas,

export JAVA_HOME=/usr/lib/jvm/java-6-oracle

export PATH=$PATH:$JAVA_HOME/bin

Reboot the PC now

  • Instalação do OracleClient 64 ubuntu

Seguir o procedimento de criação de usuários, groups do oracle baixar as libs e depois executar o passo a passo que está em anexo neste e-mail

Step 0: Download stuff

Go ahead and download Oracle Client 11g X64 (I’m using R1 cause I

had it before, but R2 might work aswell)

Step 1: Updates

# apt-get install alien build-essential gawk ksh lesstif2 libaio1 libaio-dev libtool expat unixodbc sysstat libxml2-dev libxml2-utils zlib1g zlib1g-dev libjpeg8-dev libpng12-dev libfreetype6-dev autoconf

Step 2: Dash to Bash (As Dash is the default sh and we need Bash):

# cd /bin

# ln -sf bash /bin/sh

Step 2: Creating user/group

# adduser oracle

Ubuntu will create an ‘oracle’ group aswell, just type ‘oracle’ as password and leave everything blank then ur done.

Step 3: (edited by felipe): Few Symlinks

# cd /bin

# ln -s /usr/bin/awk /bin/awk

# ln -s /usr/bin/rpm /bin/rpm

# ln -s /usr/bin/basename /bin/basename

# mkdir /usr/lib64

# ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/libpthread_nonshared.a

# ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/libc_nonshared.a

Step 4: Create Oracle Client’s dir

# mkdir -p /u01/app/

# chown -R oracle:oracle /u01

# xhost +

# apt-get install synaptic

Open synaptic, to search libstdc++ 5 and install it, in some versions of Ubuntu is shippinga higher version.

Step 5: Get ready to runInstaller

When you start the installation you’ll choose the “Administrator option”, because it’s more complete, even I need a client oracle oci connection. After that the oracle client installation will be displayed many errors, so you’ll need to run the sh scripts.

# su oracle

$ ./runInstaller

Step 6: After to run the installation and its corrections

#updatedb

  •  SETAR variáveis de ambiente  

Colocar no /etc/profile ou outro script de inicialização de aplicações, (em alguns casos colocar em todos os bash.rc

PS.: O Oracle_Home é a pasta onde foi realizada a instalação, verificar em seu ambiente…

Adicionar as variáveis de ambiente no arquivo /etc/profile adicionando as 2 linhas abaixo no final do arquivo.

# gedit /etc/profile

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/client_1

export PATH=$PATH:$ORACLE_HOME/bin


  • To publish the libs for linux

Registrar o caminho da lib do oracle 11g em /etc/ld.so.conf.d , criando o arquivo oracle.conf no diretório /etc/ld.so.conf.d (adicionando na primeira linha o caminho: /u01/app/oracle/product/11.2.0/client_1/lib)

# touch /etc/ld.so.conf.d/oracle.conf

-We’ll run the commands

# ldconfig -v para registrar e para consultar o sucesso

# ldconfig -p | grep oracle

(o terminal poderá retornar um alerta dizendo que não conseguiu encontrar o link de uma determinada lib, normal aparecer este ‘erro’)

É isso qualquer coisa postem as dúvidas.

Serialização e Desserialização de Objetos em Java

Serialização

Suponhamos que você tivesse um programa, um jogo com uma aventura fictícia que precisasse de mais de uma sessão para ser concluído. Conforme o jogo progride, os personagens ficammais fortes, fracos, inteligentes, etc. E coletam e usam (e perdem armas). Você não quer iniciar do zero sempre que iniciar o jogo ? Portanto precisa de uma maneira de salvar de salvar o estado dos personagens e uma maneira de restaurá-lo quando voltar ao jogo.

1. Opção um

  • Grave os objetos serializados dos personagens em um arquivo.

2.Opção dois

  • Grave um arquivo de texto simples.

Gravando um objeto serializado em um arquivo

Aqui estão as etapas para serializarmos (salvarmos) um objeto.


//1 - Crie um objeto FileOutputStream
 FileOutputStream fileStream = new FileOutputStream("MyGame.ser");
 //2 - Crie um ObjectOutputStream
 ObjectOutputStream os = new ObjectOutputStream(fileStream);
 //3 - Grave os objetos
 os.writeObject(personagemUm); //Serializa os objetos referenciados por
 os.writeObject(personagemDois);//personagemUm,personagemDois,personagemTres
 os.writeObject(personagemTres); //e grava no arquivo myGame.ser
 //4 - Feche ObjectOutputStream
 os.close;

Transferência de dados do fluxos de um local para outro

A API de E/S Java tem fluxos de conexão que representam conexões com destinos e origens como arquivos ou
soquetes de rede, fluxos de cadeia que só funcionam quando encadeados a outros fluxos.

Geralmente, são necessários dois fluxos para que algo útil possa ser feito – um para representar a conexão
e outro para chamar métodos. Pois os fluxos de conexão costuma estar em um nível muito baixo.
FileOutputStream (um fluxo de conexão), por exemplo, tem métodos para a gravação de bytes. Mas não queremos
gravar bytes! Queremos gravar objetos, portanto, precisamos de um fluxo de cadeia de nível mais alto. Veja descrição na figura 1.

Figura 1

 

Implemente Serializable

Serializable é considerada como uma interface marcadora ou de tag,porque não tem nenhum um método a implementar. Sua única finalidade é anunciar que a classe que está implementando pode ser serializada. Ou seja os objetos desse tipo poderão ser salvos através do mecanismo de serialização. (Se sua superclasse “FOR-UM” tipo serializable, você também  será). Segue exemplo abaixo.

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Box implements Serializable {

 private int largura;
 private int altura;

 public static void main(String[] args) {
  Box myBox = new Box();
  myBox.setLargura(50);
  myBox.setAltura(20);

   try { //operação de E/S pode lançar excessões.
     FileOutputStream fs = new FileOutputStream("foo.ser");//caso não encontre cria novo arquivo chamado foo.ser
     ObjectOutputStream os = new ObjectOutputStream(fs); //fs encadeado ao fluxo de conexão
     os.writeObject(myBox);
     os.close();
   }catch (Exception e) {
     e.printStackTrace();
   }

 }

 public void setLargura(int largura) {
   this.largura = largura;
 }

 public void setAltura(int altura) {
   this.altura = altura;
 }
}

Desserialização: restaurando um objeto

O objetivo da serialização de um objeto é podermos restaurá-lo a seu estado original em algum momento posterior, em uma execução diferente da JVM (que pode até ser a mesma que estava sendo executada no momento em que o objeto foi serializado). A desserialização é muito parecida com a serialização ao contrário.

Aqui estão as etapas para desserializarmos (abrir) um objeto.

//1 - Crie um objeto FileInputStream
 FileInputStream fileStream = new FileInputStream("MyGame.ser");
 //2 - Crie um ObjectInputStream
 ObjectInputStream os = new ObjectInputStream(fileStream);
 //3 - Leia os objetos
 Object um = os.readObject();
 Object dois = os.readObject();
 Object tres = os.readObject();
 //4 - Converta os objetos
 GamePersonagem duende   = (GamePersonagem) um;
 GamePersonagem duende_2 = (GamePersonagem) dois;
 GamePersonagem magico   = (GamePersonagem) tres;

 //5 - Feche ObjectInputStream
 os.close();

O que acontece durante a desserialização?

Quando um objeto é desserializado, a JVM tenta reconstituí-lo criando um novo objeto no acervo que tenha o mesmo
estado que objeto serializado tinha na hora em que foi serializado. Exceto pelas variáveis transientes,
que são reconstituídas com nulo(para referências de objeto) ou com valores primitivos padrão.

Lembrando sempre que se desserialização for em um local diferente (outro sistema por exemplo)  deverá existir a cópia da classe de origem (que foi utilizada para fazer a serialização anteriormente)  para que seja feita a desserialização desse objeto que está sendo manipulado, conforme ilustra abaixo a figura 2.

PONTOS CHAVES

– Uma variável de instância com a palavra-chave transient se quiser que a serialização a ignore.

-Durante a desserialização, a classe de todos os objetos da ramificação deve estar disponível na JVM.

Referências Bibliográficas
SIERRA, Kathy; BATES, Bert – Use a Cabeça Java – Editora Alta Books, Rio de Janeiro, 2010.