Você está na página 1de 101

Instalao e configurao de ambiente para uso do

AndroMDA
1.
2.

MDA e AndroMDA........................................................................................... 3
Preparao do Ambiente para Utilizao do AndroMDA ................................... 3
2.1. JDK ........................................................................................................... 3
2.2. JBOSS ....................................................................................................... 4
2.3. Instalao e Configurao Maven............................................................... 4
2.4. Instalao do AndroMDA .......................................................................... 5
2.5. Instalao do Magic Draw.......................................................................... 6
2.6. Instalao do Eclipse.................................................................................. 6
2.7. Instalao do Plug-in JBossIDE ................................................................. 6
3. Desenvolvimento de Projetos com AndroMDA ................................................. 9
3.1. Criao de Novo Projeto/Configurao do Ambiente ................................. 9
3.2. Configurao do Banco.............................................................................11
4. Iniciando o projeto no MagicDraw....................................................................12
4.1. Modelo Bsico..........................................................................................12
4.1.1.
O Problema ...........................................................................................12
4.1.2.
Metodologia Utilizada...........................................................................12
4.1.3.
Casos de Uso.........................................................................................12
4.2. Modelagem de Sistemas............................................................................13
4.3. Exemplo de caso de uso de consulta..........................................................13
4.3.1.
Camada de Domnio..............................................................................13
4.3.1.1.
Cdigo de Banco de Dados gerados...................................................20
4.3.1.2.
Criao de Value Object....................................................................21
4.3.2.
Camada de Servios ..............................................................................23
4.3.3.
Camada de Interface..............................................................................26
4.3.4.
Gerao de Cdigo e Deploy da Aplicao............................................46
4.4. Exemplo de caso de uso de Detalhamento .................................................54
4.4.1.
Camada de Domnio..............................................................................55
4.4.2.
Camada de Servio................................................................................55
4.4.3.
Camada de Interface..............................................................................55
4.4.4.
Gerao de Cdigo e Deploy da Aplicao............................................63
4.5. Exemplo de caso de uso de alterao.........................................................64
4.5.1.
Camada de Domnio..............................................................................64
4.5.2.
Camada de Servio................................................................................64
4.5.3.
Camada de Interface..............................................................................64
4.5.4.
Gerao de Cdigo e Deploy da Aplicao............................................74
4.6. Exemplo de caso de uso de incluso..........................................................76
4.6.1.
Camada de Domnio..............................................................................76
4.6.2.
Camada de Servio................................................................................76
4.6.3.
Camada de Interface..............................................................................76
4.6.4.
Gerao de Cdigo e Deploy da Aplicao............................................82
4.7. Exemplo de caso de uso de excluso .........................................................83
4.7.1.
Camada de Domnio..............................................................................83
4.7.2.
Camada de Servio................................................................................83
4.7.3.
Camada de Interface..............................................................................83
4.7.4.
Gerao de Cdigo e Deploy da Aplicao............................................89
4.7.5.
Modo de Operao ................................................................................89
4.7.6.
Excluso Mltipla .................................................................................92

4.8. Editando Paginas JSP................................................................................98


4.8.1.
Achando a localizao da pgina...........................................................98
4.8.2.
Alterando as Paginas .............................................................................98
4.8.3.
Retrabalho.............................................................................................99
4.8.4.
Abas......................................................................................................99

1. MDA e AndroMDA
MDA (Model Driven Architecture) uma abordagem de desenvolvimento que
utiliza UML e ferramentas de transformao. Tais ferramentas utilizam os modelos
UML como insumos para transform-los em artefatos, que podem ser outros modelos
ou cdigo fonte especfico de alguma linguagem ou plataforma.
A MDA divide o trabalho de desenvolvimento em duas reas principais. Os
modeladores representam uma aplicao em particular, por meio da criao de um
PIM (Platform Independent Model Modelo Independente de Plataforma). O PIM
o primeiro artefato especificado pela MDA, o a modelagem do sistema nos
padres da UML independente de qualquer tecnologia especfica que ser utilizada.
Ferramentas podem ento transformar o PIM em um PSM (Platform Specific Model
Modelo Especfico de Plataforma). O PSM o segundo artefato especificado pela
MDA, o modelo do sistema destinado a um ambiente de execuo especfico, para
uma tecnologia em particular. Assim, mais ferramentas podem usar o PSM e gerar
cdigo para essa plataforma. O PSM pode ser feito em UML, mas isso no
obrigatrio. O padro MDA (http://www.omg.org/mda/) controlado pelo OMG
(Object Management Group).
O AndroMDA (http://www.andromda.org/) um framework MDA, de cdigo
aberto, que recebe modelos UML, armazenados em formato XMI, como entrada e
utiliza cartuchos (bibliotecas de transformao) para produzir diversos artefatos. O
AndroMDA implementado na linguagem Java e j possui cartuchos (mecanismos
semelhantes a plug-ins) para gerao de artefatos para vrias tecnologias Java, como
Hibernate, EJB, Struts, JSF e Spring.
Outras ferramentas so utilizadas juntamente com o AndroMDA no processo
de desenvolvimento. Entre elas temos:

Magic Draw (http://www.magicdraw.com), que possui suporte aos diagramas


de atividade da UML (necessrios ao processo como ser visto a seguir), e o
Poseidon (http://www.gentleware.com/), ambos para modelagem UML.

Maven (http://maven.apache.org/) como ferramenta de automatizao do


processo.

2. Preparao do Ambiente para Utilizao do


AndroMDA
Nesta seo detalharemos o processo de preparao do ambiente de
desenvolvimento com o AndroMDA, onde sero enumeradas as ferramentas
utilizadas e seus respectivos procedimentos de instalao.
Para o correto funcionamento das diversas ferramentas necessrio que
algumas variveis de ambiente estejam devidamente configuradas. Entre elas esto as
variveis JAVA_HOME e JBOSS_HOME que so descritas a seguir.

2.1.

JDK

necessrio que o JDK esteja instalado no computador. O download pode ser


feito em http://java.sun.com/. Aps a instalao do JDK, necessrio configurar a

varivel JAVA_HOME, a qual deve especificar o caminho de instalao do JDK, por


exemplo, C:\Program Files\Java\jdk1.5.0_04.
Para configurar a varivel uma varivel de ambiente no Windows, siga os
seguintes passos:
No Windows XP:
1

Clicar em Start  Control Panel  System

2 Na aba Advanced clicar no boto Environment Variables


3 Em System Variables clicar em New
4 Em Variable Name preencher JAVA_HOME
5 Em Variable Value preencher com o caminho de instalao do JDK, por
exemplo, C:\Program Files\Java\jdk1.5.0_04.
No Linux:
6

Digite no terminal: export JAVA_HOME=<Diretrio do Java>, por exemplo,


export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

2.2.

JBOSS

O JBoss deve estar instalado no computador. O download pode ser feito em


http://www.jboss.com/. Em seguida, necessrio configurar a varivel
JBOSS_HOME para apontar para este diretrio, ou seja, JBOSS_HOME, deve
conter o caminho de instalao do Jboss, por exemplo, C:\AndroMDA\jboss-4.0.2. O
caminho para o JBoss necessrio para a instalao de aplicaes (deployment). Para
configurao do JBOSS_HOME siga os passos descritos na configurao da varivel
JAVA_HOME.

2.3.

Instalao e Configurao Maven

Como comentado anteriormente, o Maven uma ferramenta de automao e


gerenciamento de projetos. O download pode ser feito atravs do endereo
http://maven.apache.org/start/download.html e sua instalao consiste em
descompactar o arquivo obtido em um diretrio local. A verso compatvel a 1.02.
Em seguida, configura a varivel de ambiente MAVEN_HOME, apontando
para o diretrio de instalao seguindo os passos da configurao da varivel
JAVA_HOME. Alm disso, inclua no path o caminho %MAVEN_HOME%\bin.
Para isso, execute os seguintes passos:
No Windows XP:
1

Clicar em Start  Control Panel System

Na aba Advanced clicar no boto Environment Variables

Em System Variables clicar em path, e no boto Edit

4 Em Variable value v para o final e acrescente ;%MAVEN_HOME%\bin


(sem as aspas).
5

necessrio incluir no path o caminho %JAVA_HOME%\bin.

O Maven, durante sua execuo, faz acesso a repositrios remotos, de onde


podero ser obtidos diversos artefatos necessrios s tarefas de automao. Por

exemplo bibliotecas (arquivos .jar) necessrias para compilao e execuo de um


projeto podem ser automaticamente obtidas.
Para especificar o repositrio que o Maven deve acessar necessrio criar um
arquivo, chamado build.properties, no diretrio home do usurio, por exemplo
C:\Documents and Settings\<usuario>.
Abaixo temos exemplos do arquivo build.properties para uso com repositrios
externos, em repositrio externo que possui um proxy para acesso internet, e com
um repositrio proxy configurado na rede local.
1. Repositrios remoto quando no necessrio utilizar proxy para acesso
internet:
maven.repo.remote=http://www.ibiblio.org/maven,http://team.andromda.org/ma
ven
2. Repositrios remoto quando necessrio utilizar proxy para acesso internet.
No exemplo o IP do proxy 10.0.2.15:
maven.repo.remote=http://www.ibiblio.org/maven,http://team.andromda.org/ma
ven maven.proxy.host = 10.0.2.15
maven.proxy.port = 8080
3. Repositrio proxy na rede local. O repositrio proxy contm as bibliotecas .jar
que o Maven poderia requisitar no repositrio remoto na Internet. Esse
repositrio dever ser utilizado quando no possvel ou no desejvel o
acesso ao repositrio remoto :
maven.repo.remote=http://<host>:<port>
Onde <host> o nome da mquina utilizada como proxy e <port> o nmero
da porta do servio do proxy.
Desta forma, temos os seguintes passos:
1

Fazer download do Maven.

Configurar varivel de ambiente MAVEN_HOME.

Adicionar %MAVEN_HOME%\bin ao path.

Criar arquivo build.properties no diretrio home do usurio.

importante observar que o Maven, de acordo com as tarefas executadas, ir


fazer o download dos artefatos necessrios e guard-los em um cache local na estao
de trabalho em um diretrio chamado .maven localizado no diretrio home de cada
usurio da estao.
Para evitar o acesso a servidores na Internet possvel a instalao de um
proxy especfico do Maven na rede local. Neste tutorial de configurao, no
abordaremos a configurao de um proxy.

2.4.

Instalao do AndroMDA

O AndroMDA, na verdade, no um aplicativo, mas sim um conjunto de


bibliotecas de classes. Em nosso processo de desenvolvimento, utilizaremos o
AndroMDA como um plug-in do Maven. O Maven, por sua vez, possui um
mecanismo prprio para obteno de plugins. Atravs de parmetros na linha de
comando podemos especificar ao Maven qual plug-in queremos instalar e se ele se

encarrega de buscar este plug-in no(s) repositrio(s) para o(s) qual(is) estiver
configurado.
No caso do plug-in do AndroMDA o seguinte comando deve ser executado:
maven
plugin:download
-DgroupId=andromda
-DartifactId=mavenandromdapp-plugin-coppetec -Dversion=3.1
Aps a execuo desse comando o Maven ter instalado o plug-in do
AndroMDA no cach local do usurio e tarefas referentes ao AndroMDA podero ser
executadas atravs do Maven.
Eventualmente, dependendo das tarefas executadas, o Maven poder buscar
outros artefatos nos repositrios, contudo isso ser feito de forma transparente e
automtica.

2.5.

Instalao do Magic Draw

O download do Magic Draw pode ser feito em http://www.magicdraw.com.


O Magic Draw uma ferramenta para modelagem em UML e recomendada
para uso como AndroMDA devido seu suporte a diagramas de atividade, utilizados
pelo cartucho BPM4Struts. Ainda, para que os modelos sejam corretamente utilizados
pelo AndroMDA eles devero conter esteretipos especficos, disponveis atravs de
um profile fornecido com o AndroMDA. Ainda, possvel tambm criar novos
projetos atravs de templates, que j utilizem este profile automaticamente. Dizer o
site para baixar o magic draw.

2.6.

Instalao do Eclipse

O download do eclipse pode ser feito em http://www.eclipse.org/.


Durante a gerao de um projeto (ser descrito na seo de criao de projeto)
o AndroMDA ir gerar automaticamente os arquivos de configurao de um projeto
Eclipse arquivos .project e .classpath. Estes arquivos podem ser usados diretamente
para importao do projeto ao Eclipse.

2.7.

Instalao do Plug-in JBossIDE

O JBossIDE um plug-in para integrao do JBoss ao Eclipse. Atravs deste


plug-in possvel iniciar e terminar o JBoss, alm de possibilitar o debugging de
aplicaes e hot code replacement.
Os passos necessrios para instalar e configurar o JBossIDE so:
1. Sair do Eclipse (se o mesmo estiver sendo executado).
2. Obter
o
arquivo
de
instalao
http://www.jboss.com/products/jbosside/downloads

do

plug-in

em

3. Descompactar o arquivo no diretrio de instalao do Eclipse, por exemplo


c:\Eclipse.
4. Iniciar o Eclipse
5. Abrir uma viso Server Navigator: Window  Show View Other escolha a
opo Server Navigator dentro da aba JBoss-IDE (ver figura abaixo) e clicar
no boto OK. Uma aba chamada Server Navigator ser aberta.

6. Selecionar a aba Server Navigator, e com o boto direito do mouse clicar no


interior da janela e escolher a opo Configuration
7. Criar uma nova configurao para executar o JBoss pelo Eclipse. Isto deve ser
feito com base na verso do JBoss instalado (ver figura abaixo). Na opo
correspondente ao Jboss instalado clique com o boto direito e selecione a
opo New. A seguinte aba ser aberta:

8. Preencha a aba conforme o exemplo da figura abaixo e clique em Apply:

9. Para iniciar a execuo do JBoss, clique com o boto direito na aba Server
Navigator e escolha a opo Start do meu de contexto. Para terminar
aconselhvel que seja utilizada a opo Shutdown.

3. Desenvolvimento de Projetos com AndroMDA


Nesta seo veremos os passos necessrios ao desenvolvimento de projetos
com o AndroMDA, utilizando os cartuchos EJB, Hibernate e BPM4Struts j
personalizados

3.1.
Criao de Novo Projeto/Configurao do
Ambiente
O plug-in do AndroMDA para o Maven j possui um procedimento
parametrizado para criao de projetos, que funciona como um wizard, onde o usurio
deve responder a perguntas. Atravs das respostas fornecidas o AndroMDA ir
direcionar a criao da estrutura bsica e dos artefatos bsicos de configurao de
projetos. O procedimento para criao de um novo projeto :
1. Abra o console (command prompt) e v para o diretrio onde se deseja criar o
projeto. Na verdade o projeto ser gerado em um subdiretrio do diretrio
escolhido.
2. Digite o comando: maven andromdapp:generate
3. Responda as perguntas de acordo com o seu projeto. Abaixo um exemplo com
respostas tpicas (perguntas em negrito e respostas em itlico):
Please enter your first and last name (i.e. Chad Brandon):
9

Chad Brandon
Please enter the name of your J2EE project (i.e. Animal Quiz):
SuportePais
Please enter the id for your J2EE project (i.e. animalquiz):
SuportePais
Please enter a version for your project (i.e. 1.0-SNAPSHOT):
1.0
Please enter the base
org.andromda.samples):

package

name

for

your

J2EE

project

(i.e.

br.gov.tutorial
Would you like an EAR or standalone WAR (enter 'ear' or 'war')?
ear
Would you like to use modules (enter 'yes' or ' no')?
no
Please enter the type of transactional/persistence cartridge to use (enter
'hibernate', 'ejb', or 'spring'):
hibernate
Would you like to use the jBpm workflow engine, it uses Hibernate3
(enter 'yes' or 'no')?
no
Please enter the hibernate version number (enter '2' for 2.1.x or '3' for 3.0.x):
3
Would you like a web application? (enter 'yes' or 'no'):
yes
Would you like your web tier to use JSF or Struts? (enter 'jsf' or 'struts'):
struts
Would you like to be able to expose your services as web services? (enter 'yes' or
'no'):
no
4. Aps receber as respostas, o AndroMDA criar um subdiretrio onde ser
gerada a estrutura inicial do projeto. A partir desse momento chamaremos esse
diretrio de <DiretorioProjeto>.
5. Ainda no console,
<DiretorioProjeto>.

para

diretrio

onde

est

seu

projeto:

6. Digite maven. Isto obrigar o Maven a obter todos os artefatos (por exemplo,
bibliotecas) de que o projeto depender.

10

3.2.

Configurao do Banco

Um dos artefatos gerados o arquivo <DiretorioProjeto>\project.properties.


Este arquivo deve ser configurado e alguns parmetros ajustados. Abaixo as
propriedades com alguns valores de exemplo (O exemplo dado para Oracle):
# set this to true will deploy the ear exploded
deployExploded=false
# The datasource for the application
dataSource.name=TreinamentoDS
dataSource=java:/${dataSource.name}
# Properties for management of the database schema,
# ignore if you setup/drop your schema manually
dataSource.driver.jar=${env.JBOSS_HOME}/server/defau
lt/lib/ojdbc14.jar
dataSource.driver.class=oracle.jdbc.driver.OracleDri
ver
dataSource.url=jdbc:oracle:thin:@10.3.18.1:1521:sgdc
pdes
dataSource.user=treinamento
dataSource.password=treinamento
dataSource.sql.init=core/target/schema-create.sql
dataSource.sql.drop=core/target/schema-drop.sql
dataSource.sql.load=core/target/db/create-dummyload.sql
# What schema related goals should do when an error
occurs.
dataSource.sql.onError=continue
# Change this to generate to the correct MDA
database mappings
# For MySql use: MySQL
# For Hypersonic use: HypersonicSql
# For Oracle9i use: Oracle9i
sql.mappings=Oracle9i
# For MySql use: org.hibernate.dialect.MySQLDialect
# For Hypersonic use:
org.hibernate.dialect.HSQLDialect
# For Oracle9i use:
org.hibernate.dialect.Oracle9Dialect
hibernate.db.dialect=org.hibernate.dialect.Oracle9Di
alect
No arquivo <JBOSS_HOME>\server\default\deploy\oracle-ds.xml aps o
ltimo fechamento de tag do tipo </local-tx-datasource> acrescente as linhas:
<local-tx-datasource>
<jndi-name>TreinamentoDS</jndi-name>
<connectionurl>
jdbc:oracle:thin:@10.3.18.1:1521:sgdpdes
</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver
</driver-class>
<user-name>treinamento</user-name>
<password>treinamento</password>
<exception-sorter-classname>
org.jboss.resource.adapter.jdbc.vendor.OracleEx
ceptionSorter

11

</exception-sorterclass-name>
</local-tx-datasource>
Onde as tags abaixo devem estar relacionadas com os campos do arquivo
project.properties mostrado acima:

jndi-name: o mesmo valor utilizado em dataSource.name;

connection-url: o mesmo valor utilizado em dataSource.url;

driver-class: o mesmo valor utilizado em dataSource.driver.class;

user-name: o mesmo valor utilizado em dataSource.user;

password: o mesmo valor utilizado em dataSource.password.

4. Iniciando o projeto no MagicDraw


4.1.

Modelo Bsico

Esta seo visa descrever o modelo padro bsico utilizado no projeto,


explicar o problema e o diagrama de casos de uso padro.

4.1.1. O Problema
O problema relacionado a este tutorial servir de base para as aplicaes a
serem desenvolvidas no projeto. Embora este seja bem mais simples, fornecer a base
necessria para o prosseguimento do projeto.
O problema se trata de um sistema de informao, com manipulao em um
banco de dados centralizado em servidor. O banco de dados para a organizao do
cadastro de pases. Com isso, a aplicao dever ser capaz de incluir, consultar, editar
e excluir cadastro de paises.

4.1.2. Metodologia Utilizada


Todo o cdigo da aplicao ser gerado automaticamente atravs de modelos
UML que sero feitos no MagicDraw, depois disso apenas alguns mtodos devero
ser alterados no eclipse. O cdigo gerado se trata de paginas JSP e de cdigos em Java
J2EE.
Todas as consultas e manipulaes de informao do banco de dados sero via
Web atravs das paginas JSP, e toda a aplicao ser gerenciada pela aplicao de
servidor Java que ser feito em J2EE. O JBoss ser a aplicao necessria para essa
comunicao acontecer, esta dever estar sendo executada, neste caso em particular,
no eclipse.

4.1.3. Casos de Uso


Abaixo se encontra o caso de uso padro que representa a implementao.

12

Pode se notar que a ao inicial ser de consulta do pas. Depois desta ao o


usurio ir visualizar os pases encontrados.
A partir dessa listagem, o usurio poder optar por detalhar o(s) pas(es)
encontrados, incluir um novo pas, alterar ou excluir algum pas, assim como
selecionar vrios pases e remover todos ao mesmo tempo.
Na parte de detalhamento do pas estar a mostra todos os campos e ainda
mais dois botes, um boto de excluso e um boto de alterao.

4.2.

Modelagem de Sistemas

Esta seo visa descrever como desenvolver os modelos de diagramas UML


que sero posteriormente utilizados pelo AndroMDA para gerao automtica de
artefatos, como cdigo fonte e descritores. Como ferramenta de modelagem
utilizaremos o Magic Draw.
Observaes:
Os modelos utilizados pelo AndroMDA devem ser independentes de
plataforma. Por isso, no se deve colocar no modelo caractersticas que sejam
especficas a alguma linguagem ou plataforma. Inclusive, deve-se usar tipos
genricos. Por exemplo, ao definir que o tipo de um determinado atributo String,
no se pode colocar o tipo java.lang.String, mas sim o tipo datatype String do profile
do AndroMDA (String [datatype]).
Alguns tipos utilizados encontram-se com a primeira letra em maisculo e
minsculo. Deve se sempre utilizar o primeiro(ex: utiliza-se Long em vez de long).

4.3.

Exemplo de caso de uso de consulta

O caso de uso de consulta consiste em uma tela de consulta com as


informaes bsicas desejadas e uma tela de exibio do resultado da busca.

4.3.1. Camada de Domnio


Na camada de domnio, estaro as classes do domnio da aplicao. Elas sero
entidades e estaro associadas a algum modo de persistncia. Essas classes devero
conter o esteretipo<<Entity>> e os atributos que sero persistidos. Todas as classes
de entidade devem obrigatoriamente estar no pacote <PacoteProjeto>.cd, onde
<PacoteProjeto> o pacote definido para o projeto. Atualmente, estamos utilizando
framework Hibernate para esta camada.
13

1 Crie o pacote cd dentro do pacote do projeto.

2 Clique com o boto direito do mouse no pacote cd e selecione a opo New


Diagram e, em seguida, selecione Class Diagram.

3 Indique o nome desejado para o diagrama.


4 No diagrama de classe, crie uma nova classe. Selecione a opo Specification,
clicando com o boto direito, e defina o nome da classe como Pais (pas sem
acento).
5 Crie os atributos na classe Pais (codigo, codigoAuxiliar, valor, descrio)
selecionando a aba Attributes e clicando no boto Add. A figura abaixo
exemplifica a criao do atributo codigo. O campo Visibility deve ser public.

14

A multiplicidade com valor 1 significa que o atributo obrigatrio (NOT


NULL), com valor 0..1 indica que o atributo no obrigatrio. Por default, todos os
atributos so gerados como NOT NULL.
No necessrio modelar o atributo id, pois esse gerado automaticamente.

15

6 Colocar o esteretipo <<Unique>> no atributo codigo para indiciar que cada


cdigo deve ser nico, ou seja, no pode haver dois cdigos iguais.Abra a
especificao do atributo codigo e selecione a aba Stereotypes. Nessa aba
selecione o esteretipo <<Unique>>.

16

7 Colocar o esteretipo <<Entity>> na classe.

17

Para cada entidade, podem ser atribudos tagged values para agregar ao
modelo parmetros para a gerao de cdigo. Por exemplo, o tagged value
@andromda.persistence.table reflete o nome da tabela a ser criada no banco de dados.
Da mesma forma, podemos atribuir esteretipos e tagged values aos atributos.
Entre os esteretipos temos: <<Identifier>> que determina que o atributo ser o
identificador do objeto (possvel chave primria) e <<Unique>> que determina que o
valor do atributo dever ser nico.
Como exemplo de tagged values temos @andromda.persistence.column que
define o nome da coluna a ser criada no banco de dados e
@andromda.persistence.column.lenght que define o tamanho da coluna.
Agora vamos criar a outra classe desse pacote, que a UnidadeFederativa.
1. Assim como fez antes crie dentro do pacote cd a classe UnidadeFederativa
2. Crie os atributos cdigo, descrio, ambos pblicos assim como feito
anteriormente.
3. Crie uma associao entre as classes, v no diagrama de classes e puxe
association de uma classe para outra.
4. A associao ser de 1 para muitos, para fazer isso clique duas vezes na
associao e ir aparecer a tela de especificao, v no boto ao lado do nome
e coloque 1 na parte do pais e coloque 0..* na parte de UnidadeFederativa.

18

5. A associao deve ser dupla, tanto UnidadeFederativa quanto Pais devem se


enxergar, dessa forma mantenha a checkBox navegabilidade marcada na
associao para as duas classes.

19

A relao das classes ficar assim no final das contas:

8 No diretrio da aplicao, executar o comando maven para validar o modelo e


gerar o script de criao do banco de dados. O resultado apresentado deve ser
BUILD SUCCESFULL.

4.3.1.1. Cdigo de Banco de Dados gerados


Voc j deve ter percebido que o maven j cria todas as classes sozinhas, s
que ele no faz s isso, ele cria outras coisas tambm, como por exemplo o cdigo sql
de criao de tabela que ser utilizado no projeto. Para ver isso v em SeuProjeto\
core\target e procure pelo arquivo chema-create.sql. Abra esse arquivo e encontrar
20

o cdigo sql da criao da tabela de Pais e de UnidadeFederativa. O comando maven


que cria executa esse arquivo o maven create-schema
Outro arquivo que pode ser encontrado nessa pasta o schema-drop.sql que
contm os cdigos para que sejam apagadas as tabelas. O comando maven que
executa esse arquivo maven drop-schema.

4.3.1.2. Criao de Value Object


Em breve, codificaremos o mtodo responsvel por realizar a consulta de
pases na camada de domnio. Vamos partir do princpio que o usurio poder refinar
a consulta preenchendo um ou mais atributos da entidade pas. Por exemplo, ele
poder realizar a consulta digitando o cdigo do pas(uma restrio), ou poder digitar
tambm o cdigo auxiliar(outra restrio). Precisaremos, ento, de uma classe que nos
auxilie carregando esses valores para que a consulta seja feita com as restries
corretas. Essa classe pegar os dados fornecidos pelo usurio e ser utilizada na
criao de restries para a consulta sobre esses dados. Ou seja, esta classe ser
preenchida no controle com os dados digitados pelo usurio e seguir at o objeto de
acesso aos dados (DAO) onde ser executada a consulta. A execuo da consulta ser
implementada em um mtodo do manipula (cujo cdigo ser apresentado mais a
frente) e no ser necessrio criar mtodo na camada de servio para tratar o filtro.
A classe responsvel por armazenar os parmetros da consulta tem o
esteretipo <<ValueObject>>, sendo caracterizada por armazenar informaes que
so transferidas entre camadas (controle ==> servio ==> dado ou dado ==> controle
==> servio).
Todas as classes VO devem obrigatoriamente estar no pacote
<PacoteProjeto>.vo, onde <PacoteProjeto> o pacote definido para o projeto.
Detalhando mais, os Value Objects so estruturas de armazenamento de dados,
armazenando informaes num formato especifico geralmente so utilizadas neste
projeto para generalizar a busca de dados.
No caso de busca, deve ser armazenados no Value Objects os critrios de
pesquisa diretamente da submisso do usurio e de acordo com a necessidade, pode
ser feita uma busca por diversas critrios, deixando as consultas em apenas um
mtodo direto de manipulao que o handleFilter
Para criar o Value Object:
1. Crie uma pasta vo dentro do pacote do projeto.
2. Crie um diagrama de classes dentro da pasta vo.
3. No diagrama, crie uma classe chamada PaisVO.

21

4. Para cada atributo da classe Pais, crie um atributo com o mesmo nome e tipo
dentro da classe PaisVO. Ou seja: devem ser criados os atributos, todos
pblicos,
codigo(String[datatype]),
codigoAuxiliar(String[datatype]),
descricao(String[datatype]) e valor(String[datatype]), conforme a figura
abaixo:

5. Colocar o esteretipo <<ValueObject>> na classe.

22

4.3.2. Camada de Servios


Na camada de servio sero implementadas as classes responsveis pela lgica
de negcio da aplicao. As classes especificadas se tornaro os servios (API) da
aplicao. Os servios definidos no modelo se tornaro disponveis atravs de Session
Beans.
Os Session Beans so componentes de negcio. A lgica de negcio dos
componentes EJB se encontram nestes componentes. Existem dois tipos de
Componentes Session Bean, o Stateless Session Bean e o Stateful Session Beans. O
Stateless um componente de negcio que no mantm conversao com o usurio,
no h garantia que chamadas sucessivas de mtodos remotos vo ser feitas no mesmo
objeto. O Stateful um componente que mantm estado, com ele temos a garantia que
chamadas sucessivas de mtodos remotos feitas por um mesmo cliente sero
processadas por um mesmo objeto.
Os beans EJB precisam ser modelados em um diagrama de classes. As classes
destes beans precisam ter o esteretipo <<Service>>. Todas as classes de servio
devem estar no pacote <PacoteProjeto>.cs.
1. Crie um pacote <PacoteProjeto>.cs, onde <PacoteProjeto> o pacote definido
para o projeto

23

2. Crie um diagrama de classe dentro do pacote cs com o nome que desejar.

3. Crie uma classe chamada PaisHandler com esteretipo Service. A classe


PaisHandler deve ficar como na figura abaixo.

4. Crie uma classe


ApplicationException.

chamada

PaisException

com

esteretipo

5. Arraste para o diagrama de classes a classe Pais.


6. Crie dependncias entre as classes PaisHandler e Pais e entre a classe
PaisHandler e a classe PaisException. Para isso, utilize a ferramenta do
MagicDraw da figura abaixo. Clique na ferramenta, clique na classe ou
mtodo de origem e arraste a seta at a classe destino.

24

7. Verifique se o diagrama est como a figura abaixo.

8. A dependncia entre PaisHandler e PaisException far com que todos os


mtodos de PaisHandler lance exceo para PaisException. Se a dependncia
tivesse sido entre algum mtodo de PaisHandler e no com a prpria classe,
somente o mtodo com dependncia lanaria exceo.
A dependncia entre PaisHandler e Pais cria um mtodo nas classes de servio
chamado manipula e esse mtodo realiza operaes bsicas de banco de dados, como
inserir, alterar, remover etc. Mas como o mtodo manipula sabe qual operao deve
ser realizada? Esse mtodo possui a seguinte assinatura:
public List manipulaEntidade(Entidade entidade, Action action)
atravs do parmetro action que informaremos ao mtodo qual a operao
que ele deve realizar. Por exemplo, se quisermos fazer uma insero, passaremos uma
instncia da classe InsertAction. Se for uma remoo, passaremos uma instncia da
classe DeleteAction. Para uma relao completa de quais actions devem ser
instanciadas para quais operaes.
No exemplo de consulta, estamos interessados na operao Filter. Essa
operao retorna todos os registros que atendem a determinadas restries. Por
exemplo, queremos saber qual o pas que possui o cdigo X. Para que o mtodo
manipula execute uma operao de Filter, passaremos uma instncia da classe
FilterAction como parmetro. Utilizaremos o seguinte construtor da classe
FilterAction:
public FilterAction(VO objetoVO, Integer paginacao);

25

O objeto VO conter as restries da consulta.


9. Salve o projeto do MagicDraw.
10. No diretrio da aplicao, executar o comando maven. O resultado
apresentado deve ser BUILD SUCCESFULL. Caso o Maven detecte erros
no projeto resolva-os antes de seguir os prximos passos do tutorial.

4.3.3. Camada de Interface


A modelagem feita atravs de diagramas de atividades. Estes diagramas
expressam a forma como os casos de uso iro se comportar. O fluxo de navegao da
aplicao descrito basicamente em termos de estados e transies.
1. Inicie o Magic Draw
2. Abra o projeto em File Open Project e selecione o arquivo
<DiretorioProjeto>\mda\src\uml\<NomeProjeto>.xml
3. Caso uma tela de erro semelhante abaixo seja apresentada pelo MagicDraw:

4. Clique em OK e abra o arquivo andromda-profile-datatype-3.1.xml.zip. O


arquivo
se
encontra
em
<DiretorioHomeUsuario>\.maven\repository\.maven\repository\andromda\xml
.zips onde <DiretorioHomeUsuario> geralmente fica em C:\Documents and
Settings\<usurio>. Caso essa tela de erro no seja exibida, clique em file
Import Project e importe o arquivo andromda-profile-datatype-3.1.xml.zip
para garantir que este esteja realmente importado.

26

5. Criar a estrutura de pacotes do projeto e um novo pacote principal, para


agrupar o(s) caso(s) de uso (New Element => Package). Nome do pacote
dever ser padronizado, por exemplo: web
6. Crie um pacote chamando cadastroPais. Cada caso de uso tem que estar dentro
de um pacote. Crie um pacote chamado consultaPais

27

7. Criar a classe de controle (New Element => Class), dentro do pacote


consultaPais, para cada caso de uso elaborado;
As classes de controle so aquelas que recebem as solicitaes da camada de
viso e as transfere para a camada de servio. Essas classes compem a camada de
controle.
Nome da classe de controle dever ser padronizado de acordo com o caso de
uso, sempre acrescentando Controle no nome do caso de uso, com isso fica neste
caso: ConsultaPaisControle

8. Criar um caso de uso (New Element => UseCase), dentro do pacote


consultaPais, para cada caso de uso elaborado. Nesse exemplo o caso de uso
ser chamado ConsultarPais.

28

9. Atribuir ao caso de uso criado os esteretipo <FrontEndApplication> para


indiciar que este caso de uso o principal do sistema, o que significa que ser
o primeiro a ser executado, (clicar com o boto direito no caso de uso, depois
Stereotypes). Somente um caso de uso pode possuir este esteretipo.

10. Criar um diagrama de atividade ( New Diagram => Activity Diagram) dentro
do caso de uso criado acima. Nome do diagrama de atividades dever ser
padronizado de acordo com o caso de uso, por exemplo: ConsultarPaisDA
Um diagrama de atividade essencialmente um grfico de fluxo, mostrando o
fluxo de controle de uma atividade para outra. Na MDA as atividades do tipo
FrontEndView sero transformadas em telas para o usurio e as demais atividades
sero interaes com o servidor.

11. Modelar o diagrama de atividades. Para isso, abra o diagrama de atividades


(executar duplo clique sobre o nome do diagrama).
a) Crie um estado inicial. Cada diagrama de atividades deve possuir
apenas um estado inicial;
29

b) Crie um Action State. Como exemplo, criamos uma ao com o


nome Preencha os Dados da Consulta de Pais e colocamos o
esteretipo <<FrontEndView>>. Este esteretipo indica que esta
ao uma pgina JSP cujo ttulo o nome que foi dado a ela.
Toda atividade deve estar com o nome preenchido. Para nomear
uma atividade, deve-se sempre utilizar a especificao da atividade
(opo Specification da atividade);

c) Criar uma transio do estado inicial para a atividade que foi criada
no exemplo acima (ver figura abaixo);

12. Criar um mtodo na classe ConsultaPaisControle que ir ser chamado quando


a atividade for executada (ou seja, a atividade gerar uma pgina jsp que,
quando submetida, executar este mtodo). Como exemplo, criamos o mtodo
consultaPais. Para criao deste mtodo so executados os seguintes passos:
Criar mtodo (Operations => Add)

30

Preencher os campos abaixo:


Obs.: Nos campos de tipos no digite os tipos, selecione-os da lista do combo
box. Se o tipo for digitado, o MagicDraw no reconhece o tipo como sendo um tipo
igual ao que j existe no combo e cria um novo tipo. Por exemplo, se voc digitar
void [datatype] o MagicDraw no entender que esse tipo o mesmo tipo void
[datatype] que est sendo exibido como opo no combo box. Caso os tipos
[datatype] no estejam disponveis para seleo, importe o arquivo andromda-profiledatatype-3.1.xml.zip
que
se
encontra
no
diretrio
<HOME>/.maven/repository/andromda/xml.zips onde <HOME> o diretrio padro
do usurio logado.
Name: consultaPais (exemplo)
Return type: void
Parmetros: codigo, codigoAuxiliar, valor, descricao
A tela abaixo mostra o mtodo consultaPais criado;

13. Para que a classe ConsultaPaisControle possa ser referenciada no Diagrama de


Atividades necessrio que ela seja relacionada ao diagrama.
a) Para isso clique com o boto direito na classe, selecione a opo
Diagrama de Estados e Atribuir;

b) Seleciona o diagrama desejado e clique em Atribuir:

31

14. No Diagrama de Atividade no permitido criar transies entre duas aes


com esteretipos <<FrontEndView>>. necessrio criar uma ao que
representar o lado do servidor. Como exemplo, criamos uma ao com o
nome Consulta Pais. Esta ao dever possuir um deferrable event para o
mtodo criado no controlador. Para isso devemos: (ver figura abaixo)
a. Criar a ao:

b. Executar o clique do mouse sobre a ao com o boto direito e escolher


a opo Specification;

32

c. Na janela de especificao da ao escolher a aba detalhe e apertar o


boto Adicionar;

d. No campo tipo escolher a opo chamada, no campo operaao escolher


o mtodo consultaPais e no precisa nomear a chamada ao mtodo.

33

15. Criar uma transio entre a ao de FrontEndView e a ao criada no item


anterior;

Executar o clique do mouse sobre a transio com o boto direito e escolher a


opo Specification, o trigger desta transio deve ser do tipo signal. Como exemplo,
editamos o trigger colocando o nome consulta;
a) Criar os parmetros codigo, codigoAuxiliar, valor, descrio (Parameters
=> Add) e preencher os campos abaixo:

Name : codigo (exemplo),


34

Type: String (ver documentao dos tipos utilizados),

35

b) Abaixo a visualizao dos parmetros criados;

36

16. Para uma visualizao mais detalhada da atividade Consulta Pais clique com o
boto direito e desmarque a opo Suppress Actions.

17. At aqui voc definiu as aes que sero executadas para exibir o formulrio
de preenchimento das informaes para consulta de um pas, e j possvel
visualizar este formulrio executando a aplicao. Para tal execute os
seguintes passos:

37

a) No prompt de comando, entrar no diretrio <DiretorioProjeto> e executar


o comando maven. Isso validar o modelo do MagicDraw e gerar as
classes Java. O resultado apresentado deve ser BUILD SUCCESFULL.
b) Ainda no <DiretorioProjeto> executar o comando maven deploy. Este ir
gerar um pacote do projeto (EAR Enterprise Application Resource) e
copiar o arquivo (SuportePais-app- 1.0.ear) para o Jboss. Alm disso, este
comando responsvel por todas as configuraes necessrias para que o
JBoss rode o projeto, o qual voc pode testar no browser.
c) Para testar o projeto abra o Eclipse. Selecione a opo do window, Show
View, Other no menu.

d) Escolher a opo Server Navigator

38

e) Na aba Server Navigator clicar com o boto direito em JBoss 4.0.x e


escolher a opo Start no menu suspenso que ser exibido.

Caso o servidor JBoss no esteja disponvel na aba Server Navigator volte ao


item 2.7 e ratifique a execuo dos passos descritos neste.

39

f) Para ver a tela gerada, abra um browser e acesse o endereo


http://localhost:8080/<nome
do
projeto>/.
Por
exemplo:
http://localhost:8080/SuportePais/
18. Observe que ao clicar no boto Consulta aparecer uma pgina em branco.
Isso ocorre porque apenas foram descritas as atividades necessrias para a
exibio da tela de filtro (primeiro formulrio) e nenhuma atividade para
execuo da consulta, as quais sero definidas nos passos seguintes.
19. Para exibir o resultado da consulta na tela necessrio criar uma outra ao
com o esteretipo FrontEndView com uma transio que parte da ao
consultaPais. Vamos cham-la de Resultado da Consulta de Pais. Esta
atividade tem a finalidade de exibir os pases retornados na consulta em uma
tabela, exibindo como colunas os campos cdigo e valor.

20. Como descrito anteriormente associe a transio entre as atividades Consulta


Pais e Resultado da Consulta de Pais uma trigger do tipo signal. Para isso
clicando na transio com o boto direito, selecione specification.
21. Na janela Transition Specification clique no boto Edit do quadro trigger.
22. Na aba General da janela Signal Event Specification altere o combo Type para
signal.
23. O resultado da consulta ser uma coleo de pases, os quais sero obtidos na
execuo do mtodo da atividade consultaPais e sero repassados para a
atividade Resultado da Consulta da Pais. Observe que atividade
Resultado da Consulta Pais foi atribudo o esteretipo FrontEndView,
definindo a atividade como responsvel pela construo de uma pgina JSP
para exibio dos dados. Sendo assim, execute os passos abaixo para formatar
a exibio da Collection em uma tabela:
a) Na aba Parameters clique no boto Add.

40

b) Na janela Parameter Specification preencha o campo Name com o nome


do parmetro paises e altere o campo Type para Collection [datatype].

41

c) Na aba Tagged Values (Valores Etiquetados) selecione a linha


@andromda.presentation.view.table.columns, clique no boto Create
Value e digite no campo Value: codigo, valor

42

O preenchimento dessa tag indica quais atributos da coleo paises devem ser
exibidos na tabela que apresentar o resultado da consulta.
24. Para finalizar o diagrama de atividades, necessrio :
a) Adicionar um estado final;

b) O nome deste estado final deve ser o nome do caso de uso que ser invocado
aps o trmino desse caso de uso. Como exemplo, criamos um estado final que
volta para o caso de uso principal da aplicao, nesse exemplo o caso de uso
ConsultarPais.
c) O ltimo passo criar uma transio entre a ao Resultado da Consulta de
Pais, para o estado final criado anteriormente, esta transio tambm dever ter
um trigger do tipo (Type) signal, nome (Name) voltar e sem parmetros

43

(Parameters). Esse nome ser atribudo a um boto gerado para executar a ao


que, nesse exemplo, ir voltar para o caso de uso principal.

A figura abaixo mostra o digrama de atividades do caso de uso ConsultarPais;

25. Criar um diagrama de classes chamado Servico2CadastroPais dentro do pacote


cadastroPais e arraste para ele as classes ConsultaPaisControle e PaisHandler.
44

26. Criar uma dependncia entre a classe ConsultaPaisControle e PaisHandler,


como na figura abaixo. Dessa forma, est sendo definido que a classe de
controle ConsultaPaisControle pode invocar mtodos da classe de servio
PaisHandler.

27. Salve
o
modelo
UML
como:
<DiretorioProjeto>\mda\src\uml\<NomeProjeto>.xml. Onde <NomePojeto>
deve ser igual ao nome dado ao projeto no momento de sua criao, de acordo
com a resposta dada ao AndroMDA (ver item 3).
28. Valide o modelo gerado at o momento. No prompt de comando, entrar no
diretrio <DiretorioProjeto> e executar o comando maven. O resultado
apresentado deve ser BUILD SUCCESFULL.
29. Executar o comando maven deploy.
30. Para ver a tela gerada, abra um browser e acesse o endereo
http://localhost:8080/<nome
do
projeto>/.
Por
exemplo:
http://localhost:8080/SuportePais/. Garanta que o JBoss esteja rodando.

31. Observe que, desta vez, ao clicar no boto Consulta, no formulrio de filtro,
aparecer uma tela com ttulo Resultado da Consulta de Pais com um boto
Voltar. Se voc clicar no boto Voltar, voc ser redirecionado para a tela
principal, que neste caso, a tela de filtro. No retornado nenhum resultado na
consulta pois no foi especificado nenhuma implementao para obter os
paises e exibi-los. Alm disso, provavelmente a tabela de paises estar vazia.

45

4.3.4. Gerao de Cdigo e Deploy da Aplicao


1

Abra o eclipse e importe o projeto. Para isso, clique em File  Import e


escolha a opo Existing Projects into Workspace.

2 Na janela seguinte indicar o caminho para <DiretorioProjeto>, selecionar o


projeto e clicar em Finish.

46

3 Uma vez que o projeto seja importado vrios erros de dependncia no


resolvidas sero apresentados pelo Eclipse. Para resolver as dependncias
necessrio criar uma varivel no Eclipse chamada MAVEN_REPO. Para
isso clique com o boto direito do mouse sobre o projeto no Package
Explorer e selecione a opo Properties.
4 Na janela Properties for <NomeProjeto> selecione no menu do lado direito
a opo Java Build Path e clique no boto Add Variable...

47

5 Na janela New Variable Classpath Entry clique no boto Configure


Variables... Na janela Preferences clique no boto New... Nos campos
Name e Path, da janela New Variable Entry digite respectivamente:
MAVEN_REPO e o caminho para o diretrio .maven do seu home.

48

6 Clique no boto OK nas janelas New Variable Entry e Preferences.


7 Na janela New Variables Classpath Entry selecione a varivel
MAVEN_REPO e clique no boto Extend...

49

Na janela Variable Extension selecione a opo conforme apresentado


abaixo e clique em OK.

9 Repita os dois passos anteriores para todos os arquivos .jar abaixo. Voc
tambm pode selecionar todos os arquivos usando a tecla Ctrl e cliar Ok
apenas uma vez.
MAVEN_REPO/struts/jars/struts-1.2.8.jar
MAVEN_REPO/servletapi/jars/servletapi-2.4-20040521.jar
MAVEN_REPO/hibernate/jars/hibernate-3.1.3-coppetec.jar"
MAVEN_REPO/jboss/jars/jboss-j2ee-4.0.2.jar
MAVEN_REPO/dom4j/jars/dom4j-1.4-dev-8.jar
MAVEN_REPO/commons-logging/jars/commons-logging-1.0.4.jar
MAVEN_REPO/commons-validator/jars/commons-validator-1.1.4.jar
MAVEN_REPO/commons-beanutils/jars/commons-beanutils-1.7.0.jar
MAVEN_REPO/commons-lang/jars/commons-lang-2.1.jar
Caso persista um erro do tipo: ...only available if source level is 5.0....
a) Clique com o boto direito do mouse sobre o projeto no Package Explorer e
selecione a opo Properties.
b) Na barra lateral a direita selecione a opo Java Compiler.
c) Marque a opo Enable project specific settings.
d) Altere o campo Compiller compliance level para a opo 5.0.

50

10 Com o eclipse configurado, iremos implementar o cdigo especfico para


executar a consulta de pases e repassar a coleo resultante para ser
exibida na pgina de resultados.
11 Primeiro implementaremos a chamada para o mtodo da classe de servio
a partir da classe de controle, ou seja, do mtodo consultaPais da classe
que implementa a classe de controle ConsultaPaisControleImpl,
chamaremos o mtodo consultaPais da classe de servio PaisHandler.
12 No
Eclipse
abra
o
arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/consul
taPais/ConsultaPaisControleImpl.java
13 O objeto dessa classe ser responsvel por receber a solicitao do browser
quando o usurio preencher os critrios de pesquisa e clicar no boto
Consulta. O mtodo consultaPais no recebe os atributos modelados na
classe de controle ConsultaPaisControle, no entanto, esse mtodo recebe
um atributo do tipo ConsultaPaisForm. Esse atributo contm os parmetros
de entrada do formulrio preenchido pelo usurio. Esse mtodo deve ser
desenvolvido de forma semelhante ao exemplo abaixo:
public final void consultaPais(ActionMapping
mapping,
br.gov.tutorial.web.cadastroPais.consultaPais.Consul
tarPaisForm form,
HttpServletRequest request,
51

HttpServletResponse response) throws Exception


{
Integer paginacao =
(((Integer)request.getAttribute(Constantes.PARAMETRO
_GRUPO)));
PaisVO paisVO = new PaisVO();
paisVO.setCodigo(form.getCodigo());
paisVO.setCodigoAuxiliar(form.getCodigoAuxiliar
());
paisVO.setDescricao(form.getDescricao());
paisVO.setValor(form.getValor());
Collection paises =
getPaisHandler(request).manipulaPais
(new PaisImpl(), new FilterAction(paisVO,
paginacao));
form.setPaises(paises);
}
Observe que h uma varivel chamada paginacao. Essa varivel criada
automaticamente pelo Maven (isso uma especializao para o framework da
Coppetec) e utilizada quando o retorno pode ser muito longo. Assim, possvel
dividir a lista retornada pela consulta em diferentes pginas. A especializao do
Maven tambm gera automaticamente sobrecargas dos mtodos modelados nas
camadas de servio e controle com um parmetro extra chamado paginacao, para que
seja possvel requisitar para essas camadas a pgina desejada e obter somente os
registros pertinentes essa pgina. No necessrio incluir esse atributo na
modelagem. Aps implementao, necessrio importar as classes dos objetos
utilizados. Para isso, clique em ctrl + shift + o, todos ao mesmo tempo.
14 O prximo passo consiste na implementao da consulta para obter os
pases, a qual implementada na classe DAO (Data Access Object). Para
especificao da consulta a ser realizada utilizaremos um objeto da classe
Criteria: definiremos que a consulta deve ser realizada sobre a classe
Pais e em seguida definiremos os critrios de filtro a serem executados.
15 No
Eclipse
abra
o
arquivo
<DiretorioProjeto>/core/src/java/<PacoteProjeto>/cd/PaisDAOImpl.java
16 No mtodo handleFilter criaremos um objeto do tipo Criteria onde
encapsularemos os critrios de filtragem das informaes de nossa
consulta. Isso significa que esse objeto ir levar ao Hibernate as restries
da consulta. Esse mesmo objeto ser retornado pelo mtodo, pois ser
reutilizado para a paginao. Caso queira saber sobre o hibernate consulte
o (Hibernate Reference Documentation), no capitulo 15 criteria queries.
protected Object
handleFilter(br.gov.tutorial.cd.ValueObject vo)
throws br.gov.tutorial.cd.DAOException {
Session session = AbstractDAO.currentSession();

52

Criteria criterios =
session.createCriteria(PaisImpl.class);
if(vo instanceof PaisVO){
PaisVO paisVO = (PaisVO)vo;
Pais pais = new PaisImpl();
if ((paisVO.getCodigo()!= null) &&
(!paisVO.getCodigo().equals(""))){
pais.setCodigo(paisVO.getCodigo());
}
if ((paisVO.getCodigoAuxiliar()!= null) &&
(!paisVO.getCodigoAuxiliar().equals(""))){
pais.setCodigoAuxiliar(paisVO.getCodigoAuxiliar
());
}
if( (paisVO.getDescricao()!= null) &&
(!paisVO.getDescricao().equals(""))){
pais.setDescricao(paisVO.getDescricao());
}
if( (paisVO.getValor()!= null) &&
(!paisVO.getValor().equals(""))){
pais.setValor(paisVO.getValor());
}
}
criterios.add(Example.create(pais).enableLike(MatchM
ode.ANYWHERE));
return criterios;
}
17 Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto,
execute o comando maven core deploy.
18 Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url: http://localhost:8080/SuportePais/
19 Para executar a aplicao passo a passo, abra a classe que deseja
acompanhar a execuo.
20 Incluir o breakpoint na linha do cdigo desejada. Para isso, clique com o
boto direito na barra a esquerda do eclipse.
21 Abra a aplicao no browser http://localhost:8080/SuportePais/
22 Execute o mtodo marcado com o breakpoint. Nesse momento, o eclipse
habilita a execuo passo a passo.
23 Pressione F5 (Step into) ou F6 (Step over) para acompanhar o cdigo.
24 Para encerrar a depurao do cdigo, pressione o boto Resume na janela
de Debug.
53

25 A remoo do breakpoint da mesma maneira que a incluso.

4.4.

Exemplo de caso de uso de Detalhamento

O caso de uso de detalhamento estendido pelo caso de uso de consulta. Isso


significa que ele pode ou no ser executado aps o caso de uso de consulta. Esse caso
de uso responsvel pela exibio do detalhamento de um pais, a partir de um pas
escolhido da listagem do resultado da consulta.

54

4.4.1. Camada de Domnio


1. O mtodo necessrio na camada de domnio para realizar o detalhamento um
que recupere um Pais de acordo com id. A camada de domnio no ser alterada
pois toda classe DAO j contm um mtodo gerado que retorna a entidade de
acordo com o id passado.

4.4.2. Camada de Servio


1. A camada de servio no ser alterada pois iremos utilizar o mtodo manipula que
gerado atravs da dependncia entre PaisHandler e Pais.

4.4.3. Camada de Interface


1. No MagicDraw abra o diagrama de atividades ConsultarPaisDA.
2. Crie um estado final chamado DetalharPais
3. Crie uma transio entre as aes Resultado da Consulta de Pais e o estado
final DetalharPais com uma trigger do tipo sinal com nome detalhar e com um
parmetro chamado id do tipo Long[datatype]

4. Na especificao do parmetro id do item 3, adicione a tagged value


@andromda.presentation.web.view.field.type com o valor plaintext

55

5. Na janela de especificao da transio criada em 3 selecione a aba Tagged


Values.
6. Selecione a opo @andromda.presentation.web.action.tablelink e clique no
boto Create Value.
7. Na caixa de texto lateral digite o nome da coluna da tabela que ser composta
de links, por exemplo, paises.valor. necessrio definir de que Collection o
campo que ser hiperlink, por isso necessrio especificar como
paises.codigo.

56

8. Selecione a opo @andromda.presentation.web.action.type e clique no boto


Create Value.
9. Na barra lateral do lado direito selecione a opo hyperlink.

57

10. O ConsultarPaisDA ficar da seguinte forma:

11. Crie um caso de uso chamado DetalharPais com o


<<FrontEndUseCase>>
dentro
da
rvore
de
consultaPais.detalhaPais. O pacote detalhaPais dever ser criado.

esteretipo
diretrios

58

12. Crie uma classe de controle chamada DetalhaPaisControle com um mtodo


chamado recuperaPais que recebe um id do tipo Long [datatype] como
parmetro e retorna void [datatype].

13. No diagrama de classes Servico2MantemPais inclua a classe


DetalhaPaisControle e crie uma dependncia para a classe PaisHandler. Par
incluir a classe DetalhaPaisControle no diagrama basta arrast-la.

14. Crie um diagrama de atividades chamado DetalharPaisDA sob o caso de uso


DetalharPais.

59

15. Associe a classe DetalhaPaisControle ao diagrama DetalharPaisDA.


16. No diagrama, crie um estado inicial, uma atividade chamada Recupera Pais e
crie uma transio entre elas.

17. Na aba Detail da especificao da atividade Recupera Pais, adicione um


Deferrable event associado ao mtodo recuperaPais da classe
DetalhaPaisControle.

18. Crie uma ao com o esteretipo FrontEndView chamada Detalhamento do


Pais.
19. Crie uma transio entre as aes e criando uma trigger sem nome do tipo
signal.
20. Crie um estado final com o nome ConsultarPais. Isso significa que aps o
detalhamento o usurio poder fazer uma nova consulta.
21. Crie uma transio entre a ao Detalhamento do Pais e o estado final com
uma trigger do tipo signal chamada Nova Consulta.

60

22. Clique com o boto direito na transio criada em 20 e selecione


especificao.
23. Clique em Editar
24. Selecione a aba Parameters
25. Clique no boto Add para adicionar um novo parmetro.
26. Preencha o campo Name com o nome codigo e selecione String [datatype] no
campo Type.
27. Selecione a aba Tagged Values.
28. Selecione a opo @andromda.presentation.view.field.type e clique no boto
Create Value.
29. Na barra lateral a direita marque a opo plaintext

61

importante observar que a opo plaintext faz com que o parmetro seja
exibido como label no formulrio web. No entanto, essa opo s funciona com
parmetros do tipo String [datatype]. Caso os parmetros sejam de outros tipos as
aes do formulrio podem no funcionar.
30. Repita os passos para criao de parmetros com os nomes codigoAuxiliar,
valor, descrio, todos do tipo String [datatype]
31. Acrescente o parmetro id, do tipo Long[datatype] contendo a tagged value
@andromda.presentation.view.field.type igual a hidden ao invs de plaintext
O diagrama de atividades ficar como a figura abaixo:

Mas, ainda h mais coisas a fazer nessa parte, lembra da classe


UnidadeFederativa? Pois bem, queremos que ela seja exibida na tela tambm. Para
isso vamos fazer o seguinte.

62

32. V na especificao da transio do Recupera Pais para o Detalhamento do


pais.
33. V em parmetros e inclua um novo com o nome ufs do tipo Collection
[datatype].
34. Ainda dentro da edio desse parmetro recm criado, v em tagged values e
na opo andromda.presentation.view.table.columns, coloque os valores
codigo, descrio.

Para ver a tela gerada, rode o comando maven install deploy no prompt
de comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome
do
projeto>/.
Por
exemplo:
http://localhost:8080/SuportePais

4.4.4. Gerao de Cdigo e Deploy da Aplicao


1. No Eclipse abra o arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/detalhaPais/Detal
haPaisControleImpl.java
O mtodo recuperaPais deve ser desenvolvido de forma semelhante ao
exemplo abaixo. Lembre-se de fazer os imports necessrios.
public final void recuperaPais(ActionMapping mapping,
br.gov.tutorial.web.cadastroPais.detalhaPais.RecuperaPais
Form form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
Pais pais = new PaisImpl();
pais.setId(form.getId());
pais =
(Pais)getPaisHandler(request).manipulaPais(pais, new
SelectAction()).get(0);
form.setCodigo(pais.getCodigo());
form.setCodigoAuxiliar(pais.getCodigoAuxiliar());

63

form.setValor(pais.getValor());
form.setDescricao(pais.getDescricao());
form.setUfs(pais.getUnidadeFederativas());
form.setId(pais.getId());
}
2. Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto,
execute o comando maven install deploy.
3. Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url: http://localhost:8080/SuportePais/

4.5.

Exemplo de caso de uso de alterao

Este caso de uso pode ser invocado a partir da listagem de pais resultando da
consulta de pais e a partir do detalhamento de um pas.

4.5.1. Camada de Domnio


1. Os mtodos necessrios na camada de domnio para realizar a alterao so:
um que recupere um Pais de acordo com id e outro para alterar efetivamente
um pais. A camada de domnio no ser alterada pois toda classe DAO j
contm esses mtodos gerados automaticamente.

4.5.2. Camada de Servio


1. A camada de servio no ser alterada pois iremos utilizar o mtodo manipula
que gerado atravs da dependncia entre PaisHandler e Pais.

4.5.3. Camada de Interface


1. No MagicDraw abra o diagrama de atividade ConsultarPaisDA
2. Crie um estado final com nome AlterarPais
3. Crie uma transio entre as aes Resultado da Consulta de Pais e o estado final
AlterarPais com uma trigger do tipo sinal com nome alterar e com um parmetro
chamado id do tipo Long[datatype]

4. Na especificao do parmetro id do item 3, adicione a tagged value


@andromda.presentation.web.view.field.type com o valor plaintext

64

5. Na janela de especificao da transio criada em 3 selecione a aba Tagged


Values.
6. Selecione a opo @andromda.presentation.web.action.tablelink e clique no boto
Create Value.
7. Na caixa de texto lateral digite o nome da tabela: paises

65

8. Selecione a opo @andromda.presentation.web.action.type e clique no boto


Create Value.
9. Na barra lateral do lado direito selecione a opo form.

66

10. O ConsultarPaisDA ficar da seguinte forma:

11. Abra o DetalharPaisDA


12. Crie um estado final com o nome DetalharPaisDA
13. Crie uma transio entre a ao Detalhamento do Pais e o estado final
DetalharPaisDA com a trigger do tipo sinal, com nome alterar e parmetro id do
tipo Long[datatype]

67

14. Na especificao do parmetro id do item 13, adicione a tagged value


@andromda.presentation.web.view.field.type com o valor hidden
15. Crie um caso de uso chamado AlterarPais com o esteretipo
<<FrontEndUseCase>> dentro da arvore de diretrios cadastroPais.alteraPais. A
pasta alteraPais deve ser criada.

16. Crie uma classe de controle chamada AlteraPaisControle


17. Crie um diagrama de atividades chamado AlterarPaisDA sob o caso de uso
AlterarPais.
18. Associe a classe AlteraPaisControle ao diagrama AlterarPaisDA.

68

19. No diagrama AlterarPaisDA, crie um estado inicial, uma ao chamada Recupera


Pais e crie uma transio entre elas.

20. Crie um mtodo chamado recuperaPais que retorna void e recebe como parmetro
id do tipo Long[datatype]

21. Na aba Detail da especificao da ao Recupera Pais, adicione um Deferrable


event associado ao mtodo recuperaPais da classe AlteraPaisControle.

69

22. Crie uma ao com o esteretipo <<FrontEndView>> chamada Preencha os


Campos para Alterao
23. Crie uma transio entre as aes Recupera Pais e Preencha os Campos para
Alterao

24. Crie uma ao chamada Altera Pais e crie uma transio entre a ao Preencha os
Campos para Alterao e a ao criada.

70

25. Crie um trigger com o nome Salvar e adicione os atributos: id(Long [datatype]),
codigo (String [datatype]), codigoAuxiliar (String [datatype]), valor (String
[datatype]), descricao (String [datatype]). Este trigger gerar um boto na tela de
alterao. Os parmetros do trigger representam os dados modificados que devem
sem aplicados no objeto pais.

26. Na aba Taggeds Values do parmetro id, selecione a opo


@andromda.presentation.view.field.type e clique no boto Create Value.
27. Na barra lateral a direita, marque a opo hidden. Isto faz com que este atributo
no seja exibido na tela.

71

28. Para cada um dos outros parmetros, na aba Taggeds Values, selecione a opo
@andromda.presentation.view.field.required e clique no boto Create Value.

29. Crie uma operao na classe AlteraPaisControle chamado alteraPais que retorna
void e recebe como parmetros id(Long [datatype]), codigo (String [datatype]),
codigoAuxiliar (String [datatype]), valor (String [datatype]), descricao (String
[datatype]).

30. Na aba Detail da especificao da ao Altera Pais, adicione um Deferrable event


associado ao mtodo alteraPais da classe AlteraPaisControle.

72

31. Crie um estado final com o nome ConsultarPais.


32. Crie uma transio entre a ao Altera Pais e o estado final.

33. No diagrama de classes Servico2CadastroPais inclua a classe AlteraPaisControle e


crie uma dependncia para a classe PaisHandler. Par incluir a classe
AlteraPaisControle no diagrama basta arrast-la

73

34. Para ver a tela gerada, rode o comando maven install deploy no prompt de
comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome do projeto>/. Por exemplo:
http://localhost:8080/SuportePais/

4.5.4. Gerao de Cdigo e Deploy da Aplicao


1. No Eclipse abra o arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/alteraPais/
AlteraPaisControleImpl.java
Esta classe implementa dois mtodos que devem estar da seguinte forma:
public final void recuperaPais(ActionMapping mapping,
br.gov.tutorial.web.cadastroPais.alteraPais.
RecuperaPaisForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Pais pais = new PaisImpl();
pais.setId(form.getId());
pais =
(Pais)getPaisHandler(request).manipulaPais(pais, new
SelectAction()).get(0);
form.setCodigo(pais.getCodigo());
form.setCodigoAuxiliar(pais.getCodigoAuxiliar());
form.setDescricao(pais.getDescricao());
form.setValor(pais.getValor());
form.setId(pais.getId());
}
public final void alteraPais(ActionMapping mapping,
br.gov.tutorial.web.cadastroPais.alteraPais.AlteraPaisFor
m form, HttpServletRequest request, HttpServletResponse
response) throws Exception
{
try {
Pais pais = new PaisImpl();
74

pais.setCodigo(form.getCodigo());
pais.setCodigoAuxiliar(form.getCodigoAuxiliar()
);
pais.setId(form.getId());
pais.setValor(form.getValor());
pais.setDescricao(form.getDescricao());
getPaisHandler(request).manipulaPais(pais, new
UpdateAction());
saveWarningMessage(request,"sucesso.alteracao.p
ais");
PreenchaOsCamposParaAlteracaoSalvarFormImpl
((PreenchaOsCamposParaAlteracaoSalvarFormImpl)
form).clean();
} catch (Exception e) {
saveErrorMessage(request,
"erro.alteracao.pais");
((PreenchaOsCamposParaAlteracaoSalvarFormImpl)
form).clean();
e.printStackTrace();
}
}
2. Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto,
execute o comando maven install deploy.
3. Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url: http://localhost:8080/SuportePais/

75

4.6.

Exemplo de caso de uso de incluso

O caso de uso de incluso estendido pelo caso de uso de consulta. Isso


significa que ele pode ou no ser executado aps o caso de uso de consulta. Esse caso
de uso recebe os valores dos atributos do pas permitindo a criao de um novo pas
de acordo com os valores informados pelo autor.

4.6.1. Camada de Domnio


1. O mtodo necessrio na camada de domnio para realizar a insero um que
insira um pais de acordo com os campos preenchidos na tela de insero. A
camada de domnio no ser alterada pois toda classe DAO j contm esse
mtodo gerado automaticamente.

4.6.2. Camada de Servio


1. A camada de servio no ser alterada pois iremos utilizar o mtodo manipula
que gerado atravs da dependncia entre PaisHandler e Pais.

4.6.3. Camada de Interface


1. No MagicDraw abra o diagrama de atividade ConsultarPaisDA.
2. Crie um novo estado final chamado IncluirPais e crie uma transio entre a ao
Preencha os Dados da Consulta de Pais e o estado final criado com uma trigger
do tipo sinal com nome Incluir .

3. Crie uma transio entre a ao Resultado da Consulta de Pais e o estado final


com nome IncluirPais com uma trigger do tipo sinal com nome Incluir.

76

4. Crie um caso de uso chamado IncluirPais com o esteretipo


<<FrontEndUseCase>> dentro da arvore de diretrios cadastroPais.incluiPais. A
pasta incluiPais deve ser criada.

5. Crie uma classe de controle chamada IncluiPaisControle


6. Crie um diagrama de atividades chamado IncluirPaisDA sob o caso de uso
IncluirPais.
7. Associe a classe IncluiPaisControle ao diagrama IncluirPaisDA.

77

8. No diagrama IncluirPaisDA, crie um estado inicial, uma ao chamada Preencha


os campos de pais com o esteretipo <<FrontEndView>> e uma transio entre
eles

9. Crie uma operao chamada incluiPais que retorna void [datatype] e possui os
parmetros que sero utilizados na criao no novo pas. No nosso exemplo,
inclua os parmetros codigo (String [datatype]), codigoAuxiliar (String
[datatype]), valor (String [datatype]), descricao (String [datatype])

10. Crie uma ao chamada Inclui Pais.


11. Na aba Detail da especificao da ao Inclui Pais, adicione um Deferrable event
associado ao mtodo incluiPais da classe IncluiPaisControle.

78

12. Crie uma transio entre as aes Preencha os Dados de Pais e Inclui Pais.

Na especificao da transio criada, crie um trigger do tipo signal com nome


incluir e parmetros correspondentes a cada atributo da classe IncluiPaisControle.
Assim, criar os seguintes parmetros para o trigger: codigo (String [datatype]),
codigoAuxiliar (String[datatype]), valor (String [datatype]), descricao (String
[datatype]).

13. Adicione para cada atributo criado em 11, na aba Valore Etiquetados, a tagged
value opo @andromda.presentation.view.field.required e clique no boto Create
Value.

79

14. Crie uma nova ao chamada Resultado da Insero com o esteretipo


<<FrontEndView>>
15. Crie uma transio entre as aes Inclui Pais e Resultado da Insero

16. Crie um estado final com o nome IncluirPais


17. Crie uma transio entre Resultado da Insero e o estado final IncluirPais com
uma trigger do tipo sinal com nome Nova Incluso

80

18. Crie um estado final com o nome ConsultarPais


19. Crie uma transio entre Resultado da Insero e o estado final ConsultarPais com
uma trigger do tipo sinal com nome Nova Consulta

81

20. No diagrama de classes Servico2MantemPais inclua a classe IncluiPaisControle e


crie uma dependncia para a classe PaisHandler. Par incluir a classe
IncluiPaisControle no diagrama basta arrast-la.

21. Para ver a tela gerada, rode o comando maven install deploy no prompt de
comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome doprojeto>/. Por exemplo:
http://localhost:8080/SuportePais/

4.6.4. Gerao de Cdigo e Deploy da Aplicao


1. No Eclipse abra o arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/incluiPais/
IncluiPaisControleImpl.java
Esta classe implementa o mtodo incluiPais que deve estar da seguinte forma:
public final void incluiPais(ActionMapping mapping,
br.gov.tutorial.web.cadastroPais.incluiPais.IncluiPaisFor
m form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
try {
Pais pais = new PaisImpl();
pais.setCodigo(form.getCodigo());
pais.setCodigoAuxiliar(form.getCodigoAuxiliar());
pais.setValor(form.getValor());
pais.setDescricao(form.getDescricao());
getPaisHandler(request).manipulaPais(pais, new
InsertAction());
saveWarningMessage(request,"sucesso.insercao.pa
is");
} catch (Exception e) {
saveErrorMessage(request,"erro.insercao.pais");
e.printStackTrace();
}
}
2. Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto, execute
o comando maven install deploy.
3. Inicialize o JBoss e teste a aplicao na url:
82

http://localhost:8080/SuportePais/

4.7.

Exemplo de caso de uso de excluso

O caso de uso de excluso pode ser entendido como um caso de uso de


Detalhamento, onde a diferena est que no caso de excluso, o usurio s pode
excluir.
Esse caso de uso exibe o detalhamento das informaes de um determinado
pas, escolhido da listagem de pases retornados pela consulta. Depois de ter entrado
no detalhamento o usurio clica no boto excluir caso queira excluir algum dos
registros.

4.7.1. Camada de Domnio


1. O mtodo necessrio na camada de domnio para realizar a remoo um que
remova um pais. A camada de domnio no ser alterada pois toda classe DAO
j contm esse mtodo gerado automaticamente.

4.7.2. Camada de Servio


1. A camada de servio no ser alterada pois iremos utilizar o mtodo manipula
que gerado atravs da dependncia entre PaisHandler e Pais.

4.7.3. Camada de Interface


1. No diagrama ConsultarPaisDA crie uma nova transio entre a ao Resultado
da Consulta de Pais e o esto final DetalharPais com uma trigger do tipo signal
com nome excluir com parmetro id do tipo Long[datatype]

2. Na especificao do parmetro id do item 1, adicione a tagged value


@andromda.presentation.web.view.field.type com o valor plaintext

83

3. Na janela de especificao da transio criada em 1 selecione a aba Tagged


Values.
4. Selecione a opo @andromda.presentation.web.action.tablelink e clique no
boto Create Value.
5. Na caixa de texto lateral digite o nome da tabela: paises

84

6. Selecione a opo @andromda.presentation.web.action.type e clique no boto


Create Value.
7. Na barra lateral do lado direito selecione a opo form.

85

8. O ConsultarPaisDA ficar da seguinte forma:

9. No Diagrama DetalharPaisDA crie uma nova ao chamada Deleta Pais.

86

10. Crie uma transio entre as aes Detalhamento do Pais e Deleta Pais com
uma trigger do tipo sinal com nome Excluir e parmetro id do tipo
Long[datatype]
11. Na especificao do parmetro id do item 10, adicione a tagged value
@andromda.presentation.web.view.field.type com o valor hidden

12. Crie uma operao chamada deletaPais na classe DetalhaPaisControle que


retorna void e recebe como parmetro id do tipo Long[datatype]

13. Adicione um Deferrable event associado ao mtodo deletaPais na ao Deleta


Pais

87

14. Crie uma transio entre a ao Deleta Pais e o estado final ConsultarPais

88

15. Para ver a tela gerada, rode o comando maven install deploy no prompt de
comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome doprojeto>/. Por exemplo:
http://localhost:8080/SuportePais/

4.7.4. Gerao de Cdigo e Deploy da Aplicao


1. No Eclipse abra o arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/detalhaPais/Detal
haPaisControleImpl.java
Esta classe implementa dois mtodos que devem estar da seguinte forma:
public void deletaPais(ActionMapping mapping,
DeletaPaisForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
try {
Pais pais = new PaisImpl();
pais.setId(form.getId());
pais =
(Pais)getPaisHandler(request).manipulaPais(pais, new
SelectAction()).get(0);
getPaisHandler(request).manipulaPais(pais,
new DeleteAction());
saveWarningMessage(request,
"sucesso.remocao.pais");
} catch (Exception e) {
saveErrorMessage(request,
"erro.remocao.pais");
e.printStackTrace();
}
}
2. Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto,
execute o comando maven install deploy.
3. Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url: http://localhost:8080/SuportePais/

4.7.5. Modo de Operao


Do jeito que est modelado at agora, o caso de uso de excluso est idntico
ao de detalhamento. Para indicar que o boto alterar somente aparecer no caso de uso
de detalhamento, iremos usar o conceito de modo operao, tem com objetivo
informar a nvel de modelo o que deve ser mostrado ou na tela do usuario de acordo
com o modo de operao. Um modo de operao o contexto de execuo de um
determinado caso de uso.
1. Abra o diagrama de atividades ConsultarPaisDA
2. na especificao da transio com a trigger detalhar, na aba valores
etiquetados, selecione a tagged value
@andromda.presentation.action.input.operation.mode e clique em create value
Essa tagged value indica que ao acessar o caso de uso DetalharPais por essa
transio, o modo operao ser o detalhar
3. Preencha com o valor detalhar
O valor dessa tagged value pode ser um array de String, onde possvel
colocar mais de um valor. Ou seja, possvel especificar que ao chamar o caso de

89

uso DetalharPais por essa transio, mas de um modo operao estar sendo
setado. Para isso, basta separar por ,.

4. Na especificao da transio com a trigger detalhar, na aba valores


etiquetados, selecione a tagged value
@andromda.presentation.action.keep.operation.mode e clique em create value
Essa tagged value indica que para manter o modo operao entre casos de
uso

5. Na especificao da transio com a trigger excluir, na aba valores


etiquetados, selecione a tagged value
@andromda.presentation.action.input.operation.mode e clique em create value
90

6. Preencha com o valor excluir como foi feito em 3


7. Na especificao da transio com a trigger excluir, na aba valores
etiquetados, selecione a tagged value
@andromda.presentation.action.keep.operation.mode e clique em create value
8. O diagrama ConsultarPaisDA ficar assim:

9. Abra o diagrama DetalharPaisDA


10. A transio com a trigger Nova Consulta apresentada tanto no Detalhar
quando na Remoo, assim como a transio com a trigger Excluir. Portanto,
no precisa de modo operao. J a transio com a trigger alterar s estar
disponvel no caso de uso de detalhamento. Para isso, na especificao da
transio alterar, na aba valores etiquetados, selecione a tagged value
@andromda.presentation.action.operation.mode e clique em create value
11. Preencha com o valor detalhar
O valor dessa tagged value pode ser um array de String, onde possvel
colocar mais de um valor, ou seja, possvel especificar que esse boto ser
apresentado para mais de um modo operao. Para isso, basta separar por ,.

12. O diagrama DetalharPais ficar assim:


91

13. Para ver a tela gerada, rode o comando maven install deploy no prompt de
comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome doprojeto>/. Por exemplo:
http://localhost:8080/SuportePais/
14. O modo operao tambm pode ser utilizado para campos, de forma a
especificar quando um campo de uma tela deve ser apresentado ou no de
acordo com o modo operao. Para isso, basta acrescentar a tagged value
@andromda.presentation.view.field.operation.mode com o valor do modo
operaao. Este valor um array de String, podendo conter vrios modos
operaes. Basta colocar os valores separados por ,.

4.7.6. Excluso Mltipla


Agora, iremos modelar a excluso mltipla. Ou seja, a partir da listagem de
pases, iremos poder selecionar vrios pases e remover todos ao mesmo tempo.
1. Abra o diagrama ConsultarPaisDA
2. Crie uma ao com o nome Remove Varios Paises
3. Crie uma transio entre a ao Resultado da Consulta de Paises e a ao
Remove Vrios Paises com uma trigger do tipo signal, nome removeVarios e
parmetro id do tipo Long[datatype].

92

4. Na especificao do parmetro id do item 3, adicione a tagged value


@andromda.presentation.web.view.field.type com o valor plaintext

5. Na janela de especificao da transio criada em 3 selecione a aba Tagged


Values.
6. Selecione a opo @andromda.presentation.web.action.tablelink e clique no
boto Create Value.
7. Na caixa de texto lateral digite o nome da tabela: paises

93

8. Selecione a opo @andromda.presentation.web.action.type e clique no boto


Create Value.
9. Na barra lateral do lado direito selecione a opo table.

94

10. O ConsultarPaisDA ficar da seguinte forma:

11. Crie uma operao chamada removeVarios que retorna void e recebe como
parmetro id do tipo Long[datatype] na classe ConsultaPaisControle

95

12. Na aba Detail da especificao da ao Remove Vrios Paises, adicione um


Deferrable event associado ao mtodo removeVarios da classe
ConsultaPaisControle. Lembre-se de desmarcar a opo suprimir aes da
ao Remove Vrios Paises.

13. Crie uma transio entre a ao Remove Vrios Paises e o estado final
ConsultarPais.

96

14. Para ver a tela gerada, rode o comando maven install deploy no prompt de
comando, inicialize o JBoss, abra um browser e acesse o endereo
http://localhost:8080/<nome doprojeto>/. Por exemplo:
http://localhost:8080/SuportePais/
15. No Eclipse abra o arquivo:
<DiretorioProjeto>/web/src/java/<PacoteProjeto>/web/cadastroPais/consultaPais/Con
sultaPaisControleImpl.java
Iremos implementar o mtodo removeVarios da seguinte forma:
public void removeVariosPaises(ActionMapping mapping,
RemoveVariosPaisesForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
try {
List<Long> paises = form.getIdRowSelection();
for(Long id: paises){
Pais pais = new PaisImpl();
pais.setId(id);
pais = (Pais)
getPaisHandler(request).manipulaPais(pais, new
SelectAction()).get(0);
getPaisHandler(request).manipulaPais(pais, new
DeleteAction());
}
saveWarningMessage(request, "sucesso.remocao.pais");
} catch (Exception e) {
saveErrorMessage(request, "erro.remocao.pais");
e.printStackTrace();
}
}
16. Salve os arquivos no Eclipse, abra um terminal e, no diretrio do projeto,
execute o comando maven install deploy.
17. Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url: http://localhost:8080/SuportePais/

97

4.8.

Editando Paginas JSP

Chegamos ao fim do nosso tutorial, como ultima tarefa ser feita a


personalizao das paginas JSP. Fazendo o tutorial, voc aprendeu e viu que todas as
pginas JSP do projeto so geradas automaticamente a partir do modelo UML. Ou
seja: no foi preciso codificar nenhuma tag html! Seria timo se fosse sempre assim!
Mas h casos em que necessrio editar o cdigo da pgina gerada, seja para fins
especficos de programao ou at mesmo para melhor organizar os itens na tela.
Precisamos seguir alguns passos para atingir esse objetivo.

4.8.1. Achando a localizao da pgina


Antes de mais nada, execute o maven mda para que as pastas targets sejam
criadas. Aps, voc deve achar a pgina gerada automaticamente que ser
personalizada.
Procure-a
nas
subpastas
da
pasta
seuProjeto\web\target\src\br\gov\tutorial\web\cadastroPais. Voc ir encontrar as
varias pastas criadas no magic draw, abra uma dessas e em seguida encontrar a pasta
web com arquivos de vrios tipos: .java, .css, .jsp, .jspf. Para saber qual o arquivo jsp
voc ir personalizar, vamos analisar a estrutura de pginas geradas pelo MDA.
Para cada estado de ao com o esteretipo "FrontEndView" no modelo
gerada uma pgina jsp correspondente, com o mesmo nome do estado de ao. Por
exemplo, se temos o estado de ao, com o estereotipo "FrontEndView" no modelo,
com o nome de "Consulta de pais", gerada uma consulta-de-pais.jsp e tambm:
consulta-de-pais-actions.jsp: contm um formulrio com os campos correspondentes
aos parmetros da primeira transio que sai do "Detalhes da Empresa"; consulta-depais-javascript.jspf: contm o javascript gerado para a pgina; consulta-de-paishiddens.jspf: contm os campos definidos como hidden(todos os parmetros que
possuem o valor etiquetado @andromda.presentation.web.field.type selecionado
como "hidden"); consulta-de-pais-collection.jspf: se a transio que chega em
"Consulta de Pais" possuir uma collection que defina uma tabela, esse arquivo ser
gerado com o cdigo desta tabela. A pgina consulta-de-pais.jsp contm tags de
incluso para todas as subpginas acima.
Geralmente, as modificaes ocorrem nos formulrios. Ento, usa-se a pgina
com o sufixo "actions". At aqui, apenas localizamos a pgina que foi gerada
automaticamente. Abaixo, o procedimento para, de fato, modificar essa pgina.

4.8.2. Alterando as Paginas


Abra a pasta seuProjeto/web/src/jsp. A dentro, faa uma cpia da jsp que voc
localizou no passo acima, obedecendo a mesma estrutura de diretrios da pasta target.
Por exemplo, se no passo 1 eu localizei a pgina meuProjeto/web/
/target/src/br/gov/tutorial/web/cadastroPais/detalhaPais/detalhes-do-pais-actions.jsp,
devo
criar
uma
cpia
em
meuProjeto/web/
src/jsp/br/gov/tutorial/web/cadastroPais/detalhaPais/detalhes-do-pais-actions.jsp.
Faa as alteraes necessrias na cpia que voc gerou (mude o layout do
form, altere o rtulo de algum campo etc.). Ateno, somente copie a pagina que voc
queira personalizar, pois caso contrrio nenhuma pagina gerada com modificaes
ser exibida.
No terminal v ao diretrio da projeto e execute um maven install deploy

98

4.8.3. Retrabalho
O fato da personalizao dos JSP serem a ltima parte do tutorial no foi por
acaso.
Quando criamos uma pgina personalizada, estamos "forando" o maven a
utilizar a nossa pgina personalizada e no a que ele gera automaticamente. Isso quer
dizer que, se voc fizer alguma alterao no modelo, ela no vai aparecer na sua
pgina personalizada, pois s quem pode mexer nela voc. como se o maven
dissesse: "OK! Crie sua pgina personalizada, mas ela de sua inteira
responsabilidade! Eu no vou chegar nem perto dela!". Por isso que o processo de
personalizao deve ser a ltima coisa a ser feita na etapa de desenvolvimento, pois
qualquer alterao no modelo no ser repassada para a sua pgina personalizada.
Mas e se, futuramente, voc realmente precisar adicionar algo no modelo? Tem como
fazer com que, por exemplo, um novo campo de formulrio aparea na pgina que foi
personalizada? Sim, claro!
Basta:
Localizar a pgina gerada automaticamente (ela continuar sendo gerada no
mesmo caminho que vimos acima, s que no ser exibida na tela do sistema). Dentro
da pgina, localize o cdigo gerado do seu interesse e copie para a rea de
transferncia (editar/copiar). Por exemplo, se voc adicionou um novo campo no
modelo, localize e copie o cdigo desse novo campo. O nome o mesmo que voc
utilizou no modelo. Cole o cdigo na sua pgina personalizada, onde voc quer que
ele aparea.

4.8.4. Abas
Vamos fazer a ultima modificao no exemplo do sistema do tutorial, iremos
inserir uma aba na pagina de detalhamento do pas e colocar a exibio das unidades
federativas nesta. Para inserir abas na suas pginas personalizadas, basta copiar o
cdigo abaixo e colar no local do cdigo onde voc quer que a aba seja renderizada.
No nosso caso ser o arquivo detalhes-do-pais-ufs.jspf que est na caminho
\SeuProjeto\web\target\src\br\gov\tutorial\web\cadastroPais\detalhaPais\. Lembrando
que para alterar uma pagina jsp devemos copiar SOMENTE a pagina desejada para o
diretrio jsp que conter as pginas personalizadas.
Codigo das abas:
<div class="SubAbaResultado">
<div class="BotaoMostraSubAba"
onClick="mensagens.style.display =''; this.style.display
='none';
BotaoAbaDadoComplementar2.style.display ='';"
id="BotaoAbaDadoComplementar1">
<bean:message
key="custom.reenvio.mensagem.antecessoras"/>
<img src="/sgdcp/layout/sgdc/BotMostraSubAba.gif"
width="16" height="12">
</div>
<div id="BotaoAbaDadoComplementar2"
onClick="mensagens.style.display ='none';
this.style.display='none';
BotaoAbaDadoComplementar1.style.display ='';"

99

class="BotaoMostraSubAba"
style="display:none ">
<bean:message
key="custom.reenvio.mensagem.antecessoras"/>
<img src="/sgdcp/layout/sgdc/BotEscondeSubAba.gif"
width="16" height="12">
</div>
</div>
Como a aba fecha: Repare que existem duas divises lgicas div dentro da
diviso lgica da aba. Uma delas responsvel por abrir a aba e a outra responsvel
por fech-la. Repare nos comandos que esto no onClick, o mensagens.style.display
responsvel pela mostragem da aba, se tiver none a aba no mostrada e se for
atribuda ento ela ser mostrada. J o BotaoAbaDadoComplementar1.style.display
e o AbaDadoComplementar2.style.display so os comandos que passam a deciso de
uma diviso lgica pra outra, dessa forma sempre depois que for aberta a aba o
prximo clique ir fech-la, j o prximo abrir de novo e assim em diante.
Vamos fazer nosso exemplo
1. Altere mensagens.style.display , na segunda e na dcima linha pelo contedo
da tag id do bloco de pgina que voc deseja colocar dentro da aba. No nosso
caso ser o bloco que tem a id ufs.
2. Dessa forma, voc quer que todo o cdigo envolvido pela tag <div id="ufs ">
fique dentro de uma aba. Agora Substitua mensagens.style.display por
ufs.style.display .
3. Caso voc queira que a aba inicie fechada coloque o atributo
style=display:none" dentro da tag do local desejado, ou seja, <div id=" ufs "
style="display:none">. Caso voc no altere isso a aba vai iniciar aberta
mostrando o contedo. Experimente fazer dos dois jeitos para ver
funcionando.
4. O rtulo da aba est definido por uma chave. Substitua a chave
custom.reenvio.mensagem.antecessoras do cdigo pela chave que apontar
para o cdigo da sua aba.
Se tiver feito tudo segundo o sugerido, o cdigo html ficara da seguinte forma:
<div class="SubAbaResultado">
<div class="BotaoMostraSubAba"
id="BotaoAbaDadoComplementar1" onClick="ufs.style.display
='';
this.style.display ='none';
BotaoAbaDadoComplementar2.style.display ='';"
>
<bean:message
key="detalhar.pais.detalhamento.do.pais.param.ufs"/>
<img src="/SuportePais/layout/sgdc/BotMostraSubAba.gif"
width="16" height="12">
</div>
<div
class="BotaoMostraSubAba"
id="BotaoAbaDadoComplementar2"
onClick="ufs.style.display ='none';
this.style.display='none';
BotaoAbaDadoComplementar1.style.display ='';"
100

class="BotaoMostraSubAba"
style="display:none "
>
<bean:message
key="detalhar.pais.detalhamento.do.pais.param.ufs"/>
<img src="/SuportePais/layout/sgdc/BotEscondeSubAba.gif"
width="16" eight="12">
</div>
</div>
Depois disso abra um terminal e, no diretrio do projeto, execute o comando
maven install deploy.
Inicialize o JBoss conforme descrito anteriormente e no browser teste a
aplicao na url:http://localhost:8080/SuportePais/

101

Você também pode gostar