segunda-feira, 23 de novembro de 2015

Docker na prática - Mysql

Não vou perder tempo explicando o que é o docker ou pra que server o docker vamos para parte prática.

Docker - https://www.docker.com/

Instalação no Linux: http://docs.docker.com/linux/step_one/

Depois do docker instalado vamos a um exemplo prático.

Resolvi substituir alguns serviços da minha minha máquina e usar o docker e o primeiro serviço foi o MySql:

Instalando a imagem do MySql:

sudo docker pull mysql     - baixa o docker (imagem) com mysql


O parâmetro  "pull" irá baixar a imagem "mysql" dos repositório do docker, https://hub.docker.com/_/mysql/

sudo docker images       - Listas as imagens baixadas/criadas na máquina

O resultado fica assim:

ubuntu@ubuntu:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mysql                     latest              c29b1276a98a        12 days ago         359.8 MB
ubuntu@ubuntu:~$




Agora vamos cria o container para usar o mysql, em resumo o container nada mais é do que uma instancia real da imagem, o container usa a imagem instalada e aplica as configurações para que o serviço ou servidor funcione. Podemos ter vários container de uma unica imagem e cada container tem sua funcionalidade.

Como exemplo irei criar 2 servidores mysql, serão 2 container:

1 - Servidor mysql com ip próprio:

sudo docker run --name mymysql -e MYSQL_ROOT_PASSWORD=root1 -d mysql


Parâmetros:

run       - executa a imagem criando um container
--name  - da uma nome para o container
mymysql - nome do container fica a critério da pessoal
-e          - setando variaveis de ambiente no exemplo acima estamos setando a variavel MYSQL_ROOT_PASSWORD
 -d         - deixa o container rodando em background
 mysql   - neste exemplo é nome da imagem no repositório que baixar anteriormente

Para ver se o container esta rodando:

sudo docker ps  


O resultado fica assim:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
aed91beee6fe        mysql               "/entrypoint.sh mysql"   3 days ago          Up 5 seconds        3306/tcp                 mymysql




Agora temos um servidor de MySql rodando no docker vamos pegar o ip para podemos usar na nossa aplicação:

sudo docker inspect aed91beee6fe


Parâmetros:

inspect            -  returna informações do container e da imagem
aed91beee6fe - Id do container, cada container tem um id próprio

ubuntu@ubuntu-Aspire-E1-571:~$ sudo docker inspect aed
[
{
    "Id": "aed91beee6fe517d6358a39a0ba0b02c2daec2a4f2c393405ccba451b446130b",
    "Created": "2015-11-20T02:26:58.154562367Z",
    "Path": "/entrypoint.sh",
    "Args": [
        "mysqld"
    ],
    "State": {
        "Status": "running",
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 13163,
        "ExitCode": 0,
        "Error": "",
        "StartedAt": "2015-11-23T13:07:50.033191231Z",
        "FinishedAt": "2015-11-20T16:28:28.493679426Z"
    },
   

 ...........,
    "Mounts": [
        {
            "Name": "4dcf2234e155ef26d1f22e0279634b7594b6cfa18af4b04f7c6afe3f699e131a",
            "Source": "/var/lib/docker/volumes/4dcf2234e155ef26d1f22e0279634b7594b6cfa18af4b04f7c6afe3f699e131a/_data",
            "Destination": "/var/lib/mysql",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],
    "Config": {
        "Hostname": "aed91beee6fe",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "ExposedPorts": {
            "3306/tcp": {}
        },
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "MYSQL_ROOT_PASSWORD=root6Beer",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "MYSQL_MAJOR=5.7",
            "MYSQL_VERSION=5.7.9-1debian8"
        ],
        "Cmd": [
            "mysqld"
        ],
        "Image": "mysql",
        "Volumes": {
            "/var/lib/mysql": {}
        },
        "WorkingDir": "",
        "Entrypoint": [
            "/entrypoint.sh"
        ],
        "OnBuild": null,
        "Labels": {},
        "StopSignal": "SIGTERM"
    },
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "5e68cbcf0e18acad52ca101565fcc9df5b137a89ca018ac351cf9a14975d9344",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "3306/tcp": null
        },
        "SandboxKey": "/var/run/docker/netns/5e68cbcf0e18",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "71d73085e4009639f332caf43689e3ba6b3331c8148a1105922b4d797adb0eff",
        "Gateway": "172.17.0.1",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "172.17.0.3",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "MacAddress": "02:42:ac:11:00:03",
        "Networks": {
            "bridge": {
                "EndpointID": "71d73085e4009639f332caf43689e3ba6b3331c8148a1105922b4d797adb0eff",
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.3",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:11:00:03"
            }
        }
    }
}
]
ubuntu@ubuntu:~$



Ficando assim os dados para conexão com o banco e pode ser usando em qualquer aplicação:

hostname: 172.17.0.3  Port: 3306 User: root  Password: root1


Agora vamos a outro exemplo, no exemplo acima criei uma servidor com um ip próprio, mas existe uma opção para usarmos como se fosse localhost vamos ao exemplo:

sudo docker run -p 3306:3306 --name mymysql2 -e MYSQL_ROOT_PASSWORD=root1 -d mysql

Como podemos ver o que difere é o parâmetro 3306:3306 aqui estamos expondo a porta 3306 do container que será acessada também pela porta 3306 do localhost.

Ficando assim para conexão com o banco:

hostname: localhost  Port: 3306 User: root  Password: root1


E temos dois servidores de banco rodando na nossa maquina, um em cada container criado:

 ubuntu@ubuntu:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
52d08d09e575        mysql               "/entrypoint.sh mysql"   3 days ago          Up 21 hours         0.0.0.0:3306->3306/tcp   mymysql2
aed91beee6fe        mysql               "/entrypoint.sh mysql"   3 days ago          Up 46 minutes       3306/tcp                 mymysql
ubuntu@ubuntu:~$






quinta-feira, 3 de setembro de 2015

Criando um lib em c para ser usada no Python

Shared Objects no Python

Como gosto muito de escrever em python resolvi fazer algo parecido com o post anterior só que desta vez o python acessando uma lib em c.
Eu utilizei o modulo ctypes. O módulo ctypes provê a compatibilidade dos tipos de dados em C permitindo chamar bibliotecas, como por exemplo DDLs e shared objects.


Git:   https://github.com/crleal/python_com_c  

1 - Programa exemplo em c:

HelloWorld.c
1:  #include   
2:     
3:    double HelloWorld_dobro (int x)
4:    {
5:         printf("Metodo dobro!\n");
6:         return x * 2;
7:    }
8:    
9:    int somar(int n, int m)
10:    {
11:         return n + m;
12:    }  


2 - Compilando o HelloWorld.c:

1:  gcc -Wall HelloWorld.c -shared -fPIC -o HelloWorld_lib.so


3 - Programa em Python:


HelloWorld.py
1:  #!/usr/bin/env python
2:  
3:  import os
4:  import ctypes
5:  
6:  # Carrega a lib para uma variavel 
7:  libLocal = ctypes.CDLL("./HelloWorld_lib.so")
8:  
9:  print("A soma dos numeros:")
10:  
11:  # chama os metodos dentro da lib
12:  print(libLocal.somar(5, 6))
13:  print(libLocal.HelloWorld_dobro (5))  


4 - Executando o python:

1:  Python HelloWorld.py

Resultado:
 A soma dos numeros: 11 
 Metodo dobro! 10 

sexta-feira, 7 de agosto de 2015

Criando um lib em c para ser usada no Java

Eu precisei fazer uma rotina que integrasse uma lib em c com java. Abaixo mostrarei um passo-a-passo sem entrar muito em detalhes como consegui realizar isso.


Git:   https://github.com/crleal/java_com_c  

1 - Programa exemplo em java:

HelloWorld.java
1:  class HelloWorld {  
2:     //Le a lib em C  
3:     static {  
4:       System.loadLibrary("HelloWorld");  
5:     }  
6:       
7:     // declara os metodos que serão chamados na lib em "c"   
8:     private native void print();  
9:     private native double dobro(double x);  
10:    
11:     public static void main(String[] args) {  
12:       // Executa um metodo "c"  
13:       new HelloWorld().print();  
14:       // Chama um metodo passando parametro e retornando um valor  
15:       double valor = new HelloWorld().dobro(3);  
16:       System.out.printf("O dobro de 3 é: "+String.valueOf(valor));  
17:     }  
18:  }  


2 - Compile o código para ver se não tem erro:

1:  javac HelloWorld.java  


3 - Gerar HelloWorld.h :

1:    javah -jni HelloWorld  

Irá criar o arquivo:

HelloWorld.h
1:  /* DO NOT EDIT THIS FILE - it is machine generated */  
2:  #include <jni.h>  
3:  /* Header for class HelloWorld */  
4:    
5:  #ifndef _Included_HelloWorld  
6:  #define _Included_HelloWorld  
7:  #ifdef __cplusplus  
8:  extern "C" {  
9:  #endif  
10:  /*  
11:   * Class:   HelloWorld  
12:   * Method:  print  
13:   * Signature: ()V  
14:   */  
15:  JNIEXPORT void JNICALL Java_HelloWorld_print  
16:   (JNIEnv *, jobject);  
17:    
18:  /*  
19:   * Class:   HelloWorld  
20:   * Method:  dobro  
21:   * Signature: (D)D  
22:   */  
23:  JNIEXPORT jdouble JNICALL Java_HelloWorld_dobro  
24:   (JNIEnv *, jobject, jdouble);  
25:    
26:  #ifdef __cplusplus  
27:  }  
28:  #endif  
29:  #endif  


4 - Programa exemplo em c:

 HelloWorld.c
1:  #include <jni.h>  
2:  #include <stdio.h>  
3:  #include "HelloWorld.h"  
4:     
5:  JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *env, jobject obj)  
6:  {  
7:     printf("Hello World!\n");  
8:     return;  
9:  }  
10:    
11:  JNIEXPORT double JNICALL Java_HelloWorld_dobro (JNIEnv *env, jobject obj, jdouble x)  
12:  {  
13:     printf("Metodo dobro!\n");  
14:     return x * 2;  
15:  }  


5 - Compilando o HelloWorld.c:

1:  gcc  -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -c -Wall -Werror -fpic HelloWorld.c  

Irá criar o arquivo: HelloWorld.o


6 - Gerando a lib:

1:  gcc -shared -o libHelloWorld.so HelloWorld.o  

Irá criar o arquivo: libHelloWorld.so


7 - Executando o java:

1:  java -Djava.library.path=. HelloWorld  

Resultado:
 Hello World!  
 Metodo dobro!  
 O dobro de 3 é: 6.0  

quinta-feira, 6 de maio de 2010

Jboss - Mudando aplicação padrão

Saindo um pouco do assunto Seam-Gen, esat semana um amigo me ligou perguntado como poderia colocar a aplicação dele como padrão.
Ele precisava colocar /Aplicacao depois do dominio e não queria fazer isso.

http://www.xxxx.com.br/Pedido e queria que ficasse apenas http://www.xxxx.com.br

A solução que passei foi a seguinte:
1 - Remova a aplicação padrão do Jboss:
  ~/jboss/server/default/deploy/jboss-web.deployer/ROOT.war
2 - Na aplicação que deseja colocar como padrão faça o seguinte:
   - Edite  /WEB-INF/jboss-web.xml  da aplicação
   - Substitua:
     <context-root>/Pedido<context-root>   por  
     <context-root>/<context-root> 
      (Se não existir acrescente a linha)
    Como no exemplo abaixo: 
        <jboss-web>
        .
        .
              
<context-root>/context-root>    
       

        .
 
       </jboss-web>
3 - Reinicie o jboss

Pronto chamando http://www.xxxx.com.br  Executará Pedido como padrão !!!

sexta-feira, 16 de abril de 2010

Jboss SEAM - seam-gen - Gerando Páginas CRUD (Parte 5)

Com a aplicação criada chegou a hora de gerar as páginas em cima do banco de dados.
Não vou entrar em detalhes de diagrama de classes vou direto ao assunto, como exemplo criei uma estrutura simples com 3 tabelas:


Estas tabelas foram criadas no banco em que mencionei na configuração do seam-gen.


Dica: Para saber os comandos do seam digite com o parâmetro help:
$ ./seam help

Voltando ao nosso teste, agora iremos gerar as páginas automaticamente usaremos o parâmetro generate este parâmetro combina o generate-model (gera JPA entidade de classes)  e generate-ui (gera o CRUD das entidades existente).

Veja:

~/Java/jboss-seam$ ./seam generate
SEAM_HOME: /home/crleal/Java/jboss-seam
Using seam-gen sources from: /home/crleal/Java/jboss-seam/seam-gen
Buildfile: /home/crleal/Java/jboss-seam/seam-gen/build.xml

init:

init-properties:
     [echo] /home/crleal/Java/jboss-5.1.0.GA

validate-workspace:

validate-project:

init-generate:

generate-model:
     [echo] Reverse engineering database using JDBC driver /home/crleal/Java/libs/mysql-connector-java-5.1.11-bin.jar
     [echo] project=/home/crleal/workspace/AplicacaoTeste
     [echo] model=br.com.aplicacaoteste.model
[hibernate] Executing Hibernate Tool with a JDBC Configuration (for reverse engineering)
[hibernate] 1. task: hbm2java (Generates a set of .java files)
[hibernate] log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
[hibernate] log4j:WARN Please initialize the log4j system properly.
[javaformatter] Java formatting of 4 files completed. Skipped 0 file(s).

generate-ui:
     [echo] Building project 'AplicacaoTeste' to generate views and controllers

init:

groovy.compilemodel:

compilemodel:
    [javac] Compiling 4 source files to /home/crleal/workspace/AplicacaoTeste/exploded-archives/AplicacaoTeste.war/WEB-INF/classes

groovy.compileactions:

groovy.copyactions:

compileactions:

copyclasses:

compile:

war:
[hibernate] Executing Hibernate Tool with a JPA Configuration
[hibernate] 1. task: generic exportertemplate: view/list.xhtml.ftl
[hibernate] 2. task: generic exportertemplate: view/view.xhtml.ftl
[hibernate] 3. task: generic exportertemplate: view/view.page.xml.ftl
[hibernate] 4. task: generic exportertemplate: view/edit.xhtml.ftl
[hibernate] 5. task: generic exportertemplate: view/edit.page.xml.ftl
[hibernate] 6. task: generic exportertemplate: src/EntityList.java.ftl
[hibernate] 7. task: generic exportertemplate: view/list.page.xml.ftl
[hibernate] 8. task: generic exportertemplate: src/EntityHome.java.ftl
[hibernate] 9. task: generic exportertemplate: view/layout/menu.xhtml.ftl
[javaformatter] Java formatting of 7 files completed. Skipped 0 file(s).
     [echo] Type './seam restart' and go to http://localhost:8080/AplicacaoTeste

generate:

BUILD SUCCESSFUL
Total time: 6 seconds
~/Java/jboss-seam$

Pronto!!!!




Execute o comando abaixo para fazer o deploy e reinicia o Jboss automaticamente:


~/Java/jboss-seam$ ./seam restart



E agora entre no browse e teste digitando:
http://localhost:8080/AplicacaoTeste

Irá Aparecer mais um item de menu e a tela ficará assim:



Tela de Produtos



Página Produto View


Ainda terminarei de postar o restante.

quinta-feira, 15 de abril de 2010

Jboss SEAM - seam-gen - Personalizando (Parte 4)

Antes de entrarmos na geração de telas automáticas vai aqui algumas dicas de  onde estão algumas das pasta onde poderemos alterar mensagens (pode até traduzi-las), icones e botões. Apenas mostrarei onde, ficando a cargo e necessidade de quem for usar.


- A pasta ~/jboss-seam/seam-gen/view
home.xhtml
conversation.xhtml
list.xhtml
login.xhtml
edit.xhtml
error.xhtml
query.xhtml
edit.xhtml.ftl
view.xhtml.ftl
list.xhtml.ftl

- A pasta ~/jboss-seam/seam-gen/view/layout
menu.xhtml
menu.xhtml.ftl

- A pasta ~/jboss-seam/seam-gen/view/img - Imagens usadas pelo seam-gen e serão copiadas para aplicação.
- A pasta ~/jboss-seam/seam-gen/view/stylesheet - css usadas pelo seam-gen e serão copiadas para aplicação.
- A pasta ~/jboss-seam/seam-gen/view/useradmin - telas de administração e controle de usuários.


Todas as pastas indicadas acima são usadas pelo seam-gen para gerar a aplicação e telas da aplicação.

Dica: se for gerar aplicações distintas (cor, banco de dados, etc..) tenha uma pasta do joss SEAM para cada aplicação por nela conterá informações de configuração para a sua aplicação.

Agora sim a próxima parte irá tratar da criação de telas CRUD conforme tabelas.

Jboss SEAM - seam-gen - Gerando Aplicação (Parte 3)

Depois de ter configurado iremos gerar uma aplicação conforme foi configurado.


~/Java/jboss-seam$ ./seam new-project  
SEAM_HOME: /home/crleal/Java/jboss-seam
Using seam-gen sources from: /home/crleal/Java/jboss-seam/seam-gen
Buildfile:
/home/crleal/Java/jboss-seam/seam-gen/build.xml

init:

init-properties:
     [echo] /home/crleal/Java/jboss-5.1.0.GA

validate-workspace:

validate-project:

icefaces-staging-copy:

initcopy:

initpoms:
     [echo] Setting up dependencies
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
[artifact:install] [INFO] Installing
/home/crleal/Java/jboss-seam/classes/poms/root.pom to /home/crleal/.m2/repository/org/jboss/seam/root/2.2.1/root.pom
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
[artifact:install] [INFO] Installing
/home/crleal/Java/jboss-seam/classes/poms/parent.pom to /home/crleal/.m2/repository/org/jboss/seam/parent/2.2.1/parent-2.2.1.pom
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms
     [copy] Copying 1 file to
/home/crleal/Java/jboss-seam/classes/poms     [copy] Copying 1 file to /home/crleal/Java/jboss-seam/classes/poms

copyseam:

copyseamdependencies:

copyjbossembedded:

copy-icefaces-home:

copy-icefaces-maven:

copy-lib:
     [echo] Copying Seam and dependencies to the /home/crleal/workspace/AplicacaoTeste/lib directory...
     [copy] Copying 150 files to /home/clementinoleal/workspace/
AplicacaoTeste/lib
     [copy] Copied 5 empty directories to 2 empty directories under /home/crleal/workspace/
AplicacaoTeste/lib
     [echo] Copying JBoss Embedded configuration to the /home/crleal/workspace/
AplicacaoTeste/bootstrap directory...
     [copy] Copying 30 files to /home/crleal/workspace/
AplicacaoTeste/bootstrap

file-copy-war:
     [echo] Copying build scripts for WAR deployment to the /home/crleal/workspace/
AplicacaoTeste directory...
     [copy] Copying 2 files to
/home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [echo] Copying resources needed for WAR deployment to the /home/crleal/workspace/AplicacaoTeste/resources directory...
     [copy] Copying 5 files to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources/WEB-INF

file-copy-ear:

setup-filters:

file-copy:
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste
     [copy] Copying 3 files to /home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 11 files to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 4 files to
/home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste/.settings
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
    [mkdir] Created dir: /home/crleal/workspace/AplicacaoTeste/nbproject
     [copy] Copying 3 files to
/home/crleal/workspace/AplicacaoTeste/nbproject
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/resources
     [copy] Copying 13 files to
/home/crleal/workspace/AplicacaoTeste/view
     [copy] Copying 16 files to
/home/crleal/workspace/AplicacaoTeste/view
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/src/hot/br/com/aplicacaoteste/action
     [copy] Copying 3 files to
/home/crleal/workspace/AplicacaoTeste
     [copy] Copying 1 file to /home/crleal/workspace/AplicacaoTeste
    [mkdir] Created dir: /home/crleal/workspace/AplicacaoTeste/src/main/br/com/aplicacaoteste/model
    [mkdir] Created dir:
/home/crleal/workspace/AplicacaoTeste/src/test/br/com/aplicacaoteste/test
     [copy] Copying 1 file to
/home/crleal/workspace/AplicacaoTeste/src/test

create-project:
     [echo] A new Seam project named 'BonusTeste' was created in the /home/crleal/workspace directory
     [echo] Type './seam explode' and go to http://localhost:8080/AplicacaoTeste
     [echo] Eclipse Users: Import the project using File > Import... > Existing Projects into Workspace, set the root directory to /home/crleal/workspace, then select the project named BonusTeste
     [echo] NetBeans Users: Open the project using File > Open project... and select the project folder /home/crleal/workspace/AplicacaoTeste
     [echo] IDEA Users: Open the project using File > Open project... and select the file
/home/crleal/workspace/AplicacaoTeste/AplicacaoTeste.ipr

new-project:

BUILD SUCCESSFUL
Total time: 2 seconds
~/Java/jboss-seam$


Pronto a aplicação foi gerada!!!

Para executar  a aplicação o jboss tem que estar rodando.


Execute o comando abaixo para fazer o deploy e reinicia o Jboss automaticamente:


~/Java/jboss-seam$ ./seam restart



E agora entre no browse e teste digitando:
http://localhost:8080/AplicacaoTeste


A tela ficará assim:





 Apertando o login teremos:





 Na próxima parte mostrarei como criar as telas CRUD conforme as tabelas do banco.

quarta-feira, 14 de abril de 2010

Jboss SEAM - seam-gen - Configurando (Parte 2)

Configurando seam-gen:
  • Descompactar numa pasta o jboss-seam;
  • Jboss Instalado;
  • Verifique a instalação Java jdk e a variável de ambiente JAVA_HOME.
  • Entre na pasta e siga os passos abaixo:
~/Java/jboss-seam$ ./seam setup
SEAM_HOME: ~/Java/jboss-seam
Using seam-gen sources from: ~/Java/jboss-seam/seam-gen
Buildfile: ~/Java/jboss-seam/seam-gen/build.xml

init:

setup:
[echo] Welcome to seam-gen :-)
[echo] Answer each question or hit ENTER to accept the default (in brackets)
[echo]
[input] Enter the directory where you want the project to be created (should not contain spaces) [/home/crleal/workspace] [/home/crleal/workspace]

[input] Enter your JBoss AS home directory [] []
/home/crleal/Java/jboss-5.1.0.GA

[input] Enter your JBoss AS domain [default] [default]

[input] Enter your GlassFish V2 or V3 home directory (Ignore if you aren't deploying to GlassFish) [C:/Program Files/glassfish-v2.1] [C:/Program Files/glassfish-v2.1]

[input] Enter your GlassFish domain (Ignore if you aren't deploying to GlassFish) [domain1] [domain1]

[input] Enter the project name [] []
AplicacaoTeste
[echo] Accepted project name as: AplicacaoTeste
[input] Do you want to use ICEfaces instead of RichFaces? [n] (y, [n])

[input] skipping input as property icefaces.home.new has already been set.
[input] Select a RichFaces skin [emeraldTown] (blueSky, classic, darkX, deepMarine, DEFAULT, [emeraldTown], glassX, japanCherry, laguna, ruby, wine)

[input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support)? [war] (ear, [war])

[input] Enter the base package name for your Java classes [com.mydomain.AplicacaoTeste] []
br.com.aplicacaoteste
[input] Enter the Java package name for your session beans [br.com.aplicacaoteste.action] [br.com.aplicacaoteste.action]

[input] Enter the Java package name for your entity beans [br.com.aplicacaoteste.model] [br.com.aplicacaoteste.model]

[input] Enter the Java package name for your test cases [br.com.aplicacaoteste.test] [br.com.aplicacaoteste.test]

[input] What kind of database are you using? [hsql] ([hsql], mysql, derby, oracle, postgres, mssql, db2, sybase, enterprisedb, h2)
mysql
[input] Enter the filesystem path to the JDBC driver jar [] []
/home/crleal/Java/libs/mysql-connector-java-5.1.11-bin.jar
[input] skipping input as property driver.license.jar.new has already been set.
[input] Enter the Hibernate dialect for your database [org.hibernate.dialect.MySQLDialect] [org.hibernate.dialect.MySQLDialect]

[input] Enter the JDBC driver class for your database [com.mysql.jdbc.Driver] [com.mysql.jdbc.Driver]

[input] Enter the JDBC DataSource class for your database [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] [com.mysql.jdbc.jdbc2.optional.MysqlDataSource]

[input] Enter the JDBC URL for your database [] []
jdbc\:mysql\://192.168.0.86\:3306/banco

[input] Enter the database username [] []
admin
[input] Enter the database password [] []
senha
[input] skipping input as property hibernate.default_schema.entered has already been set.
[input] Enter the database catalog name (Enter '-' to clear previous value) [] []

[input] Are you working with tables that already exist in the database? [y] ([y], n)

[input] Do you want to recreate the database tables and execute import.sql each time you deploy? [n] (y, [n])

[propertyfile] Creating new property file: /home/crlea/Java/jboss-seam/seam-gen/build.properties
[echo] Installing JDBC driver jar to JBoss AS
[copy] Copying 1 file to /home/crleal/Java/jboss-5.1.0.GA/server/default/lib

init:

init-properties:
[echo] /home/crleal/Java/jboss-5.1.0.GA

validate-workspace:

validate-project:

settings:
[echo] JBoss AS home: /home/crleal/Java/jboss-5.1.0.GA
[echo] GlassFish home: C:/Program Files/glassfish-v2.1
[echo] Project name: BonusTeste
[echo] Project location: /home/crleal/workspace/AplicacaoTeste
[echo] Project type: war
[echo] IceFaces: n
[echo] Action package: br.com.aplicacaoteste.action
[echo] Model package: br.com.aplicacaoteste.model
[echo] Test package: br.com.aplicacaoteste.test
[echo] JDBC driver class: com.mysql.jdbc.Driver
[echo] JDBC DataSource class: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
[echo] Hibernate dialect: org.hibernate.dialect.MySQLDialect
[echo] JDBC URL: jdbc\:mysql\://192.168.0.86\:3306/banco
[echo] Database username: admin
[echo] Database password:
[echo]
[echo] Type './seam create-project' to create the new project

BUILD SUCCESSFUL
Total time: 1 minute 4 seconds


O arquivo onde são guardadas as configurações: seam-gen/build.properties

Jboss SEAM - seam-gen (Parte 1)

Este post servirá para futuras consultas de como se usa o Jboss SEAM.

Seam-gem: Configura e gera uma aplicação automática.

Para se usar o Seam-gen é necessário ter instalado na maquina o java JDK e ter baixado do site http://seamframework.org/Download a última versão do Jboss seam.

Resumo dos comando seam-gen:

  • seam setup: Configura o seam-gen para o seu ambiente. Aqui são informados: caminho de instalação do JBoss AS, workspace do Eclipse, a conexão com o banco de dados, dentre outras informações de configuração. (Depois de feito o SETUP todos os projetos novos usarao a configuracao do setup)
  • seam new-project: Cria um novo projeto Seam baseado na configuração informada no seam setup.
  • seam -D[profile] deploy: Realiza o deploy do novo projeto com a configuração do perfil especificado, isto é, desenvolvimento, teste ou produção.
  • seam new-action: Cria uma página web simples, composta por uma página usando facelets e um componente no seu projeto.
  • seam new-form: Cria um formulário com uma ação.
  • seam generate-entities: Gera uma aplicação a partir de uma base de dados existente, usando engenharia reversa.
  • seam generate-ui: Gera uma aplicação com interface web a partir de entidades JPA/EJB3 existentes.
  • seam restart: Reinicia a aplicação no JBoss AS.
  • seam explode: faz o Deploy da aplicação