Quando se trabalha com sistemas com múltiplos usuários é interessante criptografar as senhas do usuários para uma maior confiabilidade e descrição dessas senhas, para isso uma boa opção é o MD5.
Uma senha criptografada com MD5 não pode ser novamente transformada no texto de origem, portanto a comparação deve ser feita por duas strings criptografadas.
Abaixo segue uma classe que vai ajudar na criação de MD5.
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class ConvertPasswordToMD5 {
public static String convertPasswordToMD5(String password) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger hash = new BigInteger(1, md.digest(password.getBytes()));
return String.format("%32x";, hash);
}
}
Bom, abaixo segue o código de teste desta classe que criptografa as senhas em MD5.
Password1: be6b9084a5dcdb09af8f433557a2119c Password2: 14621de3463eb7e1b3606d5514bbf800 passwordCompareMD5: be6b9084a5dcdb09af8f433557a2119c Compare OK Compare NOK
Em outro post será abordada a criptografia feita com RSA, onde é possível criptografar e descriptografar.
Para quem trabalha com JBoss AS 5.1.GA já deve ter se deparado com a seguinte exception “com.arjuna.ats.jbossatx.jta.TransactionManagerService”, ela acontece pois o tempo padrão de uma transação no JBoss é de 5 minutos.
Bom, mas sempre teremos métodos que levaram mais do que 5 minutos para responder, então vamos aumentar este tempo fazendo as configurações necessárias.
Para realizar esta configuração vá ate o arquivo jboss/server/default/deploy/transaction-jboss-beans.xmle edite a seguinte linha:
O valor 300 é o padrão, pois é configurado em segundos, onde 300 segundos são iguais a 5 minutos, mude este valor para um que atenda as suas necessidades e reinicie o servidor.
Mas lembrando que se seus métodos estão demorando muito tempo e o sistema estiver apresentado algum problema de performance, está não é a solução, e sim, usar uma ferramenta de profile como por exemplo a Visual VM para encontrar o gargalo da aplicação.
Se quiser saber mais saber a Visual VM, deixe um comentário ou aguarde o próximo post.
Para quem já trabalhou com JBoss 5.1GA que é a versão mais estável e está migrando para a versão 7.1 deve ter se deparado com o problema em disponibilizar o acesso do sistema pela rede, bem, na versão 5.1 se usava o comando -b 0.0.0.0 tanto no eclipse como nos arquivos.conf do JBoss.
Para a versão 7.1 isso muda um pouco, se você esta desenvolvendo e realizando os testes realizando o start do servidor pelo eclipse é possível continuar configurando o host como 0.0.0.0, mas para fazer um deploy manual, vá ate o arquivo /jboss//standalone/configuration/standalone.xml e econtre as seguinte linhas:
Para iniciar está parte, primeiro é preciso ter feitos todos os passos descritos neste post.
Está é a 3ª parte do tutorial, onde vamos criar os arquivos de configuração do Hibernate e gerar as entidades usando a engenharia reversa com as tabelas já existentes no banco, essa é uma das melhores práticas, pois suas entidades vão representar fielmente seu banco de dados, tanto em colunas como nos relacionamentos.
3 – Criando projeto
O primeiro arquivo que precisamos é o persistence.xml,esse arquivo é responsável por realizar a conexão com o banco de dados, para mais informação sobre este arquivo deixe um comentário. Abaixe segue o arquivo que será usado para se conectar com o banco de dados que criamos neste post.
O segundo arquivo de que precisamos é o arquivo.reveng.xml, este arquivo é responsável por gerenciar as SEQUENCESgeradas pelo banco de dados PostgreSQL, para mais informações sobre este arquivo deixei um comentário. Abaixe segue o arquivo que será usado para gerenciar as SEQUENCES do banco de dados que criamos neste post.
Com estes dois arquivos já em mãos podemos iniciar a criação do projeto, os passos para a criação do projeto podem ser visto no vídeo abaixo.
No próximo post será disponibilizada a classe GenericDAO.java que vai ajudar você a criar seus DAO’s para consultas ao banco, como executar suas primeiras consultas e explicar como funciona a estrutura que foi gerada neste post.
Para iniciar está parte, primeiro é preciso ter feitos todos os passos descritos neste post.
Está é a 2ª parte do tutorial, onde vamos criar o banco de dados, como exemplo iremos utilizar o banco de dados utilizado para criar a aplicação Deliveries Manager que se encontra neste post.
2 – Criando banco de dados
Abaixo segue uma imagem do banco de dados que foi retirada do frameworkPowerArchitect que é uma excelente opção para visualizar seus banco de dados de modo gráfico e realizar a geração de script, seu maior diferencial é o suporte a vários bancos de dados inclusive o PostgreSQL que é abordado neste tutorial, mais informações sobre este framework serão divulgadas em breve em outro post.
database
Abaixo segue o script do banco de dados que foi gerado pelo framework descrito acima.
CREATE SEQUENCE public.seq_provider;
CREATE TABLE public.provider (
id BIGINT NOT NULL DEFAULT nextval('public.seq_provider'),
name VARCHAR(30),
celluar VARCHAR(30) NOT NULL,
phone VARCHAR(30) NOT NULL,
cnpj VARCHAR(30) NOT NULL,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_provider PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_provider OWNED BY public.provider.id;
CREATE SEQUENCE public.seq_product;
CREATE TABLE public.product (
id BIGINT NOT NULL DEFAULT nextval('public.seq_product'),
name VARCHAR(30),
value REAL,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_product PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_product OWNED BY public.product.id;
CREATE UNIQUE INDEX uk_product_name
ON public.product
( name );
CREATE SEQUENCE public.seq_stock;
CREATE TABLE public.stock (
id BIGINT NOT NULL DEFAULT nextval('public.seq_stock'),
date TIMESTAMP,
product_id BIGINT,
quantity INTEGER,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_stock PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_stock OWNED BY public.stock.id;
CREATE SEQUENCE public.seq_client;
CREATE TABLE public.client (
id BIGINT NOT NULL DEFAULT nextval('public.seq_client'),
name VARCHAR(30) NOT NULL,
celluar VARCHAR(30) NOT NULL,
phone VARCHAR(30) NOT NULL,
city VARCHAR(30) NOT NULL,
district VARCHAR(30) NOT NULL,
street VARCHAR(30) NOT NULL,
house_number INTEGER NOT NULL,
distance REAL NOT NULL,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_client PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_client OWNED BY public.client.id;
CREATE SEQUENCE public.seq_delivery;
CREATE TABLE public.delivery (
id BIGINT NOT NULL DEFAULT nextval('public.seq_delivery'),
product_id BIGINT,
client_id BIGINT,
date TIMESTAMP,
quantity INTEGER,
value REAL,
status VARCHAR(30) NOT NULL,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_delivery PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_delivery OWNED BY public.delivery.id;
CREATE SEQUENCE public.seq_buy;
CREATE TABLE public.buy (
id BIGINT NOT NULL DEFAULT nextval('public.seq_buy'),
date TIMESTAMP,
provider_id BIGINT,
product_id BIGINT,
quantity INTEGER,
value REAL,
enabled BOOLEAN DEFAULT true,
CONSTRAINT pk_buy PRIMARY KEY (id)
);
ALTER SEQUENCE public.seq_buy OWNED BY public.buy.id;
ALTER TABLE public.buy ADD CONSTRAINT fk_buy_provider_id
FOREIGN KEY (provider_id)
REFERENCES public.provider (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE public.buy ADD CONSTRAINT fk_buy_product_id
FOREIGN KEY (product_id)
REFERENCES public.product (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE public.delivery ADD CONSTRAINT fk_delivery_product_id
FOREIGN KEY (product_id)
REFERENCES public.product (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE public.stock ADD CONSTRAINT fk_stock_product_id
FOREIGN KEY (product_id)
REFERENCES public.product (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
ALTER TABLE public.delivery ADD CONSTRAINT fk_delivery_client_id
FOREIGN KEY (client_id)
REFERENCES public.client (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;
Abaixo um vídeo de como executar este script no banco de dados.
Pronto já temos a ambiente configurado e o banco de dados da aplicação, no próximo post será explicado como criar o projeto e configurar o Hibernate.
Para quem está querendo se atualizar utilizando a versão mais atual das ferramentas free utilizadas para o desenvolvimento Java web, abaixo segue a configuração do Eclipse Juno com JBoss 7.
Clique neste link para realizar o download do Eclipse Juno, versão mais atual e voltada para o desenvolvimento web.
Clique neste link para realizar o download do JBoss AS 7, versão mais atual.
Após realizar o download da IDE de desenvolvimento Eclipse, descompacte o arquivo em um diretório de sua preferência, com o Eclipse Juno já inicializado como na imagem abaixo, vamos instalar o JBoss Tools, que são um conjunto de ferramentas que auxiliam no desenvolvimento web.
Para entender melhor siga os passos descritos nas imagens abaixo:
Inserindo URL
Selecionando versão
Aceitando termos da licença
Instalando software
Após estes passos aguarde até o término da instalação.
O próximo passo é instalar o Servidor de aplicação JBoss AS 7 no Eclipse Juno, para isso descompacte o arquivo em um diretório de sua preferencia.
No Eclipse Juno encontre a aba servidores, caso não encontre acesse Menu >> Window >> Show Viewe pesquise por server, após isso clique em new server wizard,e siga os passos das imagens abaixo.
Instalar JBoss AS 7
Selecionando versão do servidor
Inserindo caminho do servidor
Realizando start do servidor
Após realizar o start do servidor, acesse a seguinte URL no browser http://localhost:8080/ e veja o resultado com a imagem abaixo.