JBoss Enterprise Application Platform 6.1 Guia de Migração

Transcrição

JBoss Enterprise Application Platform 6.1 Guia de Migração
JBoss Enterprise Application
Platform 6.1
Guia de Migração
Para uso com o JBoss Enterprise Application Plataform 6
Sande Gilda
Tom Wells
Darrin Mison
David Ryan
JBoss Enterprise Application Platform 6.1 Guia de Migração
Para uso com o JBoss Enterprise Application Plataform 6
Sande Gilda
Darrin Miso n
David Ryan
To m Wells
[email protected] m
Nota Legal
Co pyright © 20 14 Red Hat, Inc..
This do cument is licensed by Red Hat under the Creative Co mmo ns Attributio n-ShareAlike 3.0
Unpo rted License. If yo u distribute this do cument, o r a mo dified versio n o f it, yo u must pro vide
attributio n to Red Hat, Inc. and pro vide a link to the o riginal. If the do cument is mo dified, all Red
Hat trademarks must be remo ved.
Red Hat, as the licenso r o f this do cument, waives the right to enfo rce, and agrees no t to assert,
Sectio n 4 d o f CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shado wman lo go , JBo ss, MetaMatrix, Fedo ra, the Infinity
Lo go , and RHCE are trademarks o f Red Hat, Inc., registered in the United States and o ther
co untries.
Linux ® is the registered trademark o f Linus To rvalds in the United States and o ther co untries.
Java ® is a registered trademark o f Oracle and/o r its affiliates.
XFS ® is a trademark o f Silico n Graphics Internatio nal Co rp. o r its subsidiaries in the United
States and/o r o ther co untries.
MySQL ® is a registered trademark o f MySQL AB in the United States, the Euro pean Unio n and
o ther co untries.
No de.js ® is an o fficial trademark o f Jo yent. Red Hat So ftware Co llectio ns is no t fo rmally
related to o r endo rsed by the o fficial Jo yent No de.js o pen so urce o r co mmercial pro ject.
The OpenStack ® Wo rd Mark and OpenStack Lo go are either registered trademarks/service
marks o r trademarks/service marks o f the OpenStack Fo undatio n, in the United States and o ther
co untries and are used with the OpenStack Fo undatio n's permissio n. We are no t affiliated with,
endo rsed o r spo nso red by the OpenStack Fo undatio n, o r the OpenStack co mmunity.
All o ther trademarks are the pro perty o f their respective o wners.
Resumo
Este livro é um guia para migração de seu aplicativo a partir de versõ es anterio res do JBo ss
Enterprise Applicatio n Platafo rm.
Índice
Índice
.Prefácio
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. . . . . . . . . .
⁠1. Co nvenç õ es d e Do c umento s
4
⁠1.1. Co nvenç õ es Tip o g ráfic as
4
⁠1.2. Co nvenç õ es d e Pull-Q uo te
5
⁠1.3. No tas e Avis o s
6
⁠2 . O b tend o Ajud a e Fo rnec end o Co mentário s
6
⁠2 .1. Vo c ê p rec is a d e ajud a?
⁠2 .2. Nó s p rec is amo s d o s eu Co mentário !
7
7
. .apít
⁠C
. . . ulo
...1
. .. .Int
. . rodução
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. . . . . . . . . .
⁠1.1. G uia d a Mig raç ão
8
. .apít
⁠C
. . . ulo
...2
. .. .Preparação
. . . . . . . . . .para
. . . . a. .Migração
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. . . . . . . . . .
⁠2 .1. Prep araç ão p ara a Mig raç ão
9
⁠2 .2. Revis ão d as No vid ad es e Diferenç as no JBo s s Enterp ris e Ap p lic atio n Platafo rm 6
9
. .apít
⁠C
. . . ulo
. . . 3.
. . Migre
. . . . . .seu
. . . Aplicat
. . . . . . .ivo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. 2. . . . . . . . . .
⁠3 .1. Alteraç õ es Req uerid as p ara a maio ria d o s Ap lic ativo s
12
⁠3 .1.1. Revis ão d as Alteraç õ es Req uerid as p ara a Maio ria d o s Ap lic ativo s g
⁠3 .1.2. Alteraç õ es d o Carreg amento d e Clas s e
⁠3 .1.2.1. Atualiz aç ão d o Ap lic ativo d evid o às Alteraç õ es d o Carreg amento d a Clas s e
⁠3 .1.2.2. Co mp reend end o as Dep end ênc ias d e Mó d ulo
12
12
12
12
⁠3 .1.2.3. Atualiz aç ão d as Dep end ênc ias d o Ap lic ativo d evid o às Alteraç õ es d o Carreg amento d a
Clas s e
13
⁠3 .1.3. Alteraç õ es d o Arq uivo d e Co nfig uraç ão
14
⁠3 .1.3.1. Criaç ão o u Mo d ific aç ão d o s Arq uivo s q ue c o ntro lam o Co ntro le d e Carreg amento d a
Clas s e no JBo s s Enterp ris e Ap p lic atio n Platafo rm 6
14
⁠3 .1.3.2. jb o s s -d ep lo yment-s truc ture.xml
18
⁠3 .1.3.3. Rec urs o s d e Pac o te p ara o No vo Sis tema d e Carreg amento d e Clas s e Mo d ular
⁠3 .1.3.4. Alteraç ão d a Lo c aliz aç ão d as Pro p ried ad es Res o urc eBund le
⁠ .1.3.5. Criaç ão d e um Mó d ulo Pers o naliz ad o
3
⁠3 .1.4. Alteraç õ es d o Reg is tro em Lo g
⁠3 .1.4.1. Mo d ific aç ão d as Dep end ênc ias d e Reg is tro em Lo g
⁠3 .1.4.2. Atualiz aç ão d o Có d ig o d o Ap lic ativo p ara Framewo rks d e Reg is tro d e Lo g d e
Terc eiro s
⁠3 .1.4.3. Mo d ific aç ão d o Có d ig o p ara Us o d o No vo Framewo rk d e Reg is tro d e Lo g d o JBo s s
18
19
19
21
21
21
⁠3 .1.5. Alteraç õ es d o Emp ac o tamento d o Ap lic ativo
⁠3 .1.5.1. Mo d ific aç ão d o Emp ac o tamento d o s EARS e WARs
22
23
23
⁠3 .1.6 . Alteraç õ es d a Co nfig uraç ão d o Ad ap tad o r d e Rec urs o e Fo nte d e Dad o s
⁠3 .1.6 .1. Atualiz aç ão d o Ap lic ativo d evid o às Alteraç õ es d a Co nfig uraç ão
⁠3 .1.6 .2. Atualiz aç ão d a Co nfig uraç ão d a Fo nte d e Dad o s
⁠3 .1.6 .3. Ins talaç ão e Co nfig uraç ão d o JDBC Driver
24
24
24
25
⁠3 .1.6 .4. Co nfig uraç ão d a Fo nte d e Dad o s p ara o Hib ernate o u JPA
⁠3 .1.6 .5. Atualiz aç ão d a Co nfig uraç ão d o Ad ap tad o r d e Rec urs o
⁠3 .1.7. Alteraç õ es d e Seg uranç a
⁠3 .1.7.1. Co nfig uraç ão d as Alteraç õ es d e Seg uranç a d o Ap lic ativo
⁠3 .1.8 . Alteraç õ es JNDI
30
30
31
32
32
⁠3 .1.8 .1. Atualiz aç ão d o s No mes JNDI Names p ac e d o Ap lic ativo
33
⁠3 .1.8 .2. Sintaxe d e No meaç ão JNDI Po rtável
33
⁠3 .1.8 .3. Revis ão d as Reg ras JNDI Names p ac e
34
⁠3 .1.8 .4. Mo d ific aç ão d o Ap lic ativo p ara Seg uir as No vas Reg ras d o JNDI Names p ac e (Es p aç o
d o No me JNDI)
35
1
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
⁠3 .1.8 .5. Amo s tras d o JNDI Names p ac es nas Vers õ es Anterio res e c o mo elas s ão es p ec ific ad as
no JBo s s Enterp ris e Ap p lic atio n Platafo rm.
35
⁠3 .2. As Alteraç õ es Dep end em no s Co mp o nentes e na s ua Arq uitetura d o Ap lic ativo
36
⁠3 .2.1. Revis ão d as Alteraç õ es Dep end entes em s eus Co mp o nentes e Arq uitetura d o Ap lic ativo
⁠3 .2.2. Alteraç õ es JPA e Hib ernate
37 36
⁠3 .2.2.1. Atualiz aç ão d o s Ap lic ativo s q ue us am Hib ernate e/o u JPA
37
⁠3 .2.2.2. Co nfig uraç ão d as Alteraç õ es p ara Ap lic ativo s q ue us am o Hib ernate e o JPA
38
⁠3 .2.2.3. Pro p ried ad es d a Unid ad e d e Pers is tênc ia
39
⁠3 .2.2.4. Atualiz aç ão d e s eu Ap lic ativo Hib ernate 3 p ara us o d o Hib ernate 4
41
⁠3 .2.2.5. Mantenha o Co mp o rtamento Exis tente d o Valo r G erad o Auto matic amente d a Id entid ad e
Hib ernate
42
⁠3 .2.2.6 . Mig raç ão d e s eu Ap lic ativo Hib ernate 3.3.x p ara o Hib ernate 4.x
42
⁠3 .2.2.7. Mig raç ão d e s eu Ap lic ativo Hib ernate 3.5.x p ara o Hib ernate 4.x
43
⁠3 .2.2.8 . Mo d ific aç ão d as Pro p ried ad es d e Pers is tênc ia p ara o Seam Mig rad o
⁠3 .2.2.9 . Atualiz aç ão d e s eu Ap lic ativo p ara fic ar d e ac o rd o c o m a Es p ec ific aç ão JPA 2.0
⁠3 .2.2.10 . Sub s tituiç ão d o Cac he d e Seg und o Nível JPA/Hib ernate c o m o Infinis p an
⁠3 .2.2.11. Pro p ried ad es d o Cac he Hib ernate
⁠3 .2.2.12. Mig raç ão p ara o Valid ad o r Hib ernate 4
⁠3 .2.3. Alteraç õ es d o JSF
⁠3 .2.3.1. Ativaç ão d e Ap lic ativo s p ara Us o d e Vers õ es Antig as d o JSF
44
45
45
47
48
49
49
⁠3 .2.4. Alteraç õ es JAX-RS e RESTEas y
⁠3 .2.4.1. Co nfig uraç ão d as Alteraç õ es JAX-RS e RESTEas y
50
50
⁠3 .2.5. Alteraç õ es d o Realm d e Seg uranç a LDAP
⁠3 .2.5.1. Co nfig uraç ão d as Alteraç õ es LDAP Sec urity Realm
52
52
⁠3 .2.6 . Alteraç õ es d o Ho rnetQ
53
⁠3 .2.6 .1. Ho rnetQ e NFS
⁠3 .2.6 .2. Co nfig uraç ão d o JMS Brid g e p ara Mig raç ão d e JMS Mes s ag es Exis tentes ao JBo s s
Enterp ris e Ap p lic atio n Platafo rm 6
53
⁠3 .2.6 .3. Mig raç ão d e s eu Ap lic ativo p ara us o d o Ho rnetQ c o mo um Pro ved o r JMS
⁠3 .2.6 .4. Co nfig uraç ão d e Mens ag ens c o m Ho rnetQ
56
57
⁠3 .2.7. Alteraç õ es d e Clus tering
⁠3 .2.7.1. Realiz e Alteraç õ es ao s eu Ap lic ativo p ara o Clus tering
⁠3 .2.7.2. Imp lantaç ão d e um HA Sing leto n
54
58
58
60
⁠3 .2.8 . Alteraç õ es d o Des envo lvimento d o es tilo d e Serviç o
⁠3 .2.8 .1. Atualiz aç ão d o s Ap lic ativo s q ue us am as Imp lantaç õ es d e es tilo d e Serviç o
69
69
⁠3 .2.9 . Alteraç õ es d a Invo c aç ão Remo ta
70
⁠3 .2.9 .1. Mig raç ão d o s Ap lic ativo s Imp lantad o s d o JBo s s Enterp ris e Ap p lic atio n Platafo rm 5 q ue
realiz a Invo c aç õ es Remo tas ao JBo s s Enterp ris e Ap p lic atio n Platafo rm 6
70
⁠3 .2.9 .2. Invo q ue o Bean d e Ses s ão Remo tamente us and o o JNDI
72
⁠3 .2.10 . Alteraç õ es EJB 2.x
⁠3 .2.10 .1. Atualiz aç ão d o s Ap lic ativo s q ue us am o EJB 2.x
74
74
⁠3 .2.11. Ap lic ativo s Seam 2.2 d e Mig raç ão
75
⁠3 .2.11.1. Mig raç ão d o s Arq uivo s Seam 2.2 p ara o JBo s s Enterp ris e Ap p lic atio n Platafo rm 6
⁠3 .2.11.2. Pro b lemas d e Mig raç ão d o Seam 2.2 Arc hive
80
75
⁠3 .2.12. Ap lic ativo s Sp ring d e Mig raç ão
82
⁠ .2.12.1. Ap lic ativo s Sp ring d e Mig raç ão
3
⁠3 .2.13. O utras Alteraç õ es q ue Afetam a Mig raç ão
82
82
⁠3 .2.13.1. O utras alteraç õ es q ue p o d em afetar s ua Mig raç ão
⁠3 .2.13.2. Alteraç ão d o No me Maven Plug -in
82
83
⁠3 .2.13.3. Mo d ific aç ão d o s Ap lic ativo s d o Cliente
83
. .apít
⁠C
. . . ulo
...4
. .. .Ferrament
. . . . . . . . as
. . .e. Dicas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8. 4. . . . . . . . . .
⁠4 .1. Rec urs o s p ara As s is ti-lo c o m a Mig raç ão
⁠4 .1.1. Rec urs o s q ue p o d em as s is ti-lo em s ua Mig raç ão
2
84
84
Índice
⁠4 .1.1. Rec urs o s q ue p o d em as s is ti-lo em s ua Mig raç ão
84
⁠4 .1.2. Familiariz e-s e c o m as Ferramentas q ue p o d em as s is ti-lo na Mig raç ão
⁠4 .1.3. Us o d o Tattle p ara enc o ntrar Dep end ênc ias d o Ap lic ativo
84
85
⁠4 .1.4. Do wnlo ad e Ins talaç ão d o Tattletale
85
⁠4 .1.5. Criaç ão e Revis ão d o Relató rio Tattletale
⁠4 .1.6 . Us o d a Ferramenta Iro nJac amar p ara Mig raç ão d a Fo nte d e Dad o s e Co nfig uraç õ es d o
Ad ap tad o r d e Rec urs o
86
86
⁠4 .1.7. Do wnlo ad e Ins talaç ão d a Ferramenta d e Mig raç ão Iro nJac amar
87
⁠4 .1.8 . Us o d a Ferramenta d e Mig raç ão Iro nJac amar p ara c o nverter um Arq uivo d e Co nfig uraç ão
d a Fo nte d e Dad o s
88
⁠4 .1.9 . Us o d a Ferramenta Iro nJac amar p ara Co nverter um Arq uivo d e Co nfig uraç ão d o Ad ap tad o r
d e Rec urs o
90
⁠4 .2. Pro b lemas d a Mig raç ão d e Dep uraç ão
⁠4 .2.1. Dep uraç ão e So luç ão d o s Pro b lemas d e Mig raç ão
95
95
⁠4 .2.2. Dep uraç ão e So luç ão d o Clas s No tFo und Exc ep tio ns e No Clas s DefFo und Erro rs
⁠4 .2.3. Bus q ue a Dep end ênc ia d e Mó d ulo d o JBo s s
95
95
⁠4 .2.4. Bus c a d o JAR na Ins talaç ão Anterio r
96
⁠4 .2.5. Dep uraç ão e Res o luç ão d o s Clas s Cas tExc ep tio ns
⁠4 .2.6 . Dep uraç ão e So luç ão d o Dup lic ateServic eExc ep tio ns
97
98
⁠ .2.7. Dep uraç ão e Res o luç ão d o s Erro s d a Pág ina d e Dep uraç ão d o JBo s s Seam
4
⁠4 .3. Revis e a Mig raç ão d o s Ap lic ativo s d a Amo s tra
⁠4 .3.1. Revis e a Mig raç ão d o s Ap lic ativo s d a Amo s tra
98
10 0
10 1
⁠4 .3.2. Mig raç ão d a Amo s tra Seam 2.2 JPA p ara o JBo s s Enterp ris e Ap p lic atio n Platafo rm 6
10 1
⁠4 .3.3. Mig raç ão d a Amo s tra d o Seam 2.2 Bo o king p ara o JBo s s Enterp ris e Ap p lic atio n Platafo rm
6
10 2
⁠4 .3.4. Mig raç ão d o Seam 2.2 Bo o king Arc hive ao JBo s s Enterp ris e Ap p lic atio n Platafo rm 6 :
Ins truç õ es d e Etap a-p o r-Etap a
⁠4 .3.5. Co ns truç ão e Dep uraç ão d a Vers ão d o JBo s s Enterp ris e Ap p lic atio n Platafo rm 5.1 d o
Ap lic ativo Seam 2.2 Bo o king
10 6
10 7
⁠4 .3.6 . Dep uraç ão e res o luç ão d o erro s e exc eç õ es d o Seam 2.2 Bo o king Arc hive Dep lo yment
⁠4 .3.7. Dep uraç ão e Res o luç ão d e erro s e exc eç õ es d o Seam 2.2 Bo o king Arc hive Runtime
⁠4 .3.8 . Revis ão d o Sumário d as Alteraç õ es feitas q uand o Mig rand o o Ap lic ativo Seam 2.2
Bo o king
10 8
118
121
. . . . órico
Hist
. . . . . de
. . .Revisão
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2. 4. . . . . . . . . .
3
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Prefácio
1. Convenções de Document os
Este manual usa diversas convenções para destacar certas palavras e frases e chamar a atenção
para informações específicas.
1.1. Convenções T ipográficas
São usadas quatro convenções tipográficas para realçar palavras e frases específicas. Estas
convenções, e circunstâncias a que se aplicam, são as seguintes:
Neg ri to Espaço Úni co (Mono-spaced Bold)
Usada para realçar entradas do sistema, incluindo comandos de shell, nomes de arquivos e
caminhos. São também usadas para realçar teclas Maiúsculas/Minúsculas e as combinações de
teclas. Por exemplo:
Para ver o conteúdo do arquivo my_next_bestsel l i ng _no vel em sua pasta de
trabalho atual, insira o comando cat my_next_bestsel l i ng _no vel na janela
de solicitação e pressione Enter para executar o comando.
O comando acima inclui um nome de arquivo, um comando de shell e uma tecla, todos
apresentados em Negrito Espaço Único (Mono-spaced Bold) e todos distintos, graças ao conteúdo.
As combinações de tecla podem ser diferenciadas de uma tecla individual pelo sinal positivo que
conecta cada parte da combinação da tecla. Por exemplo:
Pressione Enter para executar o comando.
Pressione C trl +Al t+F2 para trocar ao terminal virtual.
A primeira sentença, destaca uma tecla específica a ser pressionada. A segunda destaca duas
combinações de teclas: um conjunto de três teclas pressionadas simultaneamente.
Caso o código fonte seja discutido, serão apresentados como acima, os nomes de classe, métodos,
funções, nomes de variantes e valores retornados mencionados em um parágrafo, em Neg ri to d e
Espaço Úni co (Mo no -spaced Bo l d ). Por exemplo:
Classes baseadas em arquivo, incluem fi l esystem para sistemas de arquivo,
fi l e para arquivos, e d i r para diretórios. Cada classe possui seu conjunto próprio
de permissões associadas.
N eg rit o Pro p o rcio n al
Esta representa as palavras e frases encontradas no sistema, incluindo os nomes de aplicativos,
texto de caixa de diálogo, botões rotulados, caixa de seleção e rótulos de botão de opção, títulos de
menus e submenus. Por exemplo:
Escolha Sist ema → Pref erên cias → Mo u se da barra do menu principal para
lançar Mo u se Pref eren ces. Na aba Bo tõ es selecione o Bo tão d a esq uerd a
d o mo use selecione a caixa e cliquem emFecharpara mudar o botão inicial do
mouse da esquerda para a direita (tornando o mouse adequado para o uso na mão
esquerda).
Selecione Ap p licat io n s → Accesso ries → C h aract er Map a partir da barra de
menu principal, com o objetivo de inserir um caractere especial ao arquivo g ed it . Em
4
Prefácio
seguida, selecione Search → Fin d … a partir da barra do menu C h aract er Map ,
digite o nome do caractere no campo Search e clique em Next. O caractere
pesquisado aparecerá destacado no C haracter T abl e. Clique duas vezes no
caractere destacado para posicioná-lo no campo T ext to co py e clique no botão
C o py. Retorne ao seu documento e selecione Ed it → Past e a partir da barra do
menu g ed it .
O texto acima inclui nomes de aplicativos, nomes de menu e itens de todo o sistema, nomes de menu
específicos do aplicativo, e botões e textos encontrados na Interface Gráfica GUI, todos
apresentados em Negrito Proporcional (Proportional Bold) e todos diferenciados de acordo com o
contexto.
Itálico em Negrito de Espaço Único (Mono-spaced Bold Italic) ou Itálico em
Negrito Proporcional (Proportional Bold Italic)
Sendo o Negrito Espaço Único (Mono-spaced Bold) ou Negrito Proporcional (Proportional Bold), os
itálicos extras indicam textos substituíveis ou variáveis. O Itálico denota o texto que você não inseriu
literalmente ou textos exibidos que mudam dependendo das circunstâncias. Por exemplo:
Para conectar-se à uma máquina remota usando o ssh, digite ssh nome do
usuário@ domain.name na janela de comandos. Por exemplo, considere que a
máquina remota seja exampl e. co m e seu nome de usuário nesta máquina seja
john, digite ssh jo hn@ exampl e. co m.
O comando mo unt -o remo unt file-system remonta o sistema de arquivo
nomeado. Por exemplo, para remontar o sistema de arquivo /ho me, o comando é
mo unt -o remo unt /ho me.
Para ver a versão de um pacote instalado, use o comando rpm -q package. Ele
retornará um resultado como este: package-version-release.
Perceba as palavras em negrito e itálico acima - username, domain.name, file-system, package,
version e release. Cada palavra é um espaço reservado, tanto para o texto que você insere quando
emitindo um comando ou para textos exibidos pelo sistema.
Além de uso padrão para apresentar o título de um trabalho, os itálicos denotam a primeira vez que
um termo novo e importante é usado. Por exemplo:
O Publican é um sistema de publicação do DocBook.
1.2. Convenções de Pull-Quot e
Resultado de terminal e listagem de código fonte são definidos visualmente com base no contexto.
O resultado enviado à um terminal é configurado em R o mano d e Espaço Úni co (Mo no spaced R o man) e apresentado assim:
books
books_tests
Desktop
Desktop1
documentation drafts mss
downloads
images notes
photos
scripts
stuff
svgs
svn
As listas de código fonte também são configuradas em R o mano d e Espaço Úni co (Mo no spaced R o man), porém são apresentadas e realçadas como a seguir:
​static int kvm_vm_ioctl_deassign_device(struct kvm *kvm,
​
struct kvm_assigned_pci_dev *assigned_dev)
​
{
​
int r = 0;
5
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
struct kvm_assigned_dev_kernel *match;
​
mutex_lock(& kvm->lock);
​
match = kvm_find_assigned_dev(& kvm->arch.assigned_dev_head,
assigned_dev->assigned_dev_id);
if (!match) {
printk(KERN_INFO "%s: device hasn't been assigned
​
​
​
before, "
​
"so cannot be deassigned\n", __func__);
r = -EINVAL;
goto out;
​
​
​
}
​
kvm_deassign_device(kvm, match);
​
kvm_free_assigned_device(kvm, match);
​o ut:
​
mutex_unlock(& kvm->lock);
return r;
​
​}
1.3. Not as e Avisos
E por fim, usamos três estilos visuais para chamar a atenção para informações que possam passar
despercebidas.
Nota
Uma nota é uma dica ou símbolo, ou ainda uma opção alternativa para a tarefa em questão.
Se você ignorar uma nota, provavelmente não resultará em más consequências, porém
poderá deixar passar uma dica importante que tornará sua vida mais fácil.
Importante
Caixas importantes detalham coisas que são geralmente fáceis de passarem despercebidas:
mudanças de configuração que somente se aplicam à sessão atual, ou serviços que
precisam ser reiniciados antes que uma atualização seja efetuada. Se você ignorar estas
caixas importantes, não perderá dados, porém isto poderá causar irritação e frustração.
Atenção
Um Aviso não deve ser ignorado. Se você ignorar avisos, muito provavelmente perderá
dados.
2. Obt endo Ajuda e Fornecendo Coment ários
6
Prefácio
2.1. Você precisa de ajuda?
Se encontrar dificuldades com o procedimento descrito nesta documentação, você pode encontrar
ajuda visitando o Portal do Cliente da Red Hat em http://access.redhat.com. Você poderá realizar o
seguinte através do portal do cliente:
realize buscas ou navegue através da base de conhecimento dos artigos de suporte técnico
sobre os produtos da Red Hat.
insira o caso de suporte nos Serviços de Suporte Global da Red Hat (GSS).
acesso a outra documentação da Red Hat.
A Red Hat acomoda um grande número de listas de correio eletrônico para discussão de software e
tecnologias da Red Hat. Você pode encontrar uma lista contendo as listas públicas disponíveis em
https://www.redhat.com/mailman/listinfo. Clique no nome de qualquer lista para subscrever àquela
lista ou acessar o histórico das listas.
2.2. Nós precisamos do seu Coment ário!
Se você encontrar erro ortográfico neste manual, ou se você tem uma sugestão para melhoramento
deste manual, nós gostaríamos muito de ouvir sua opinião! Por favor submita um relatório em
Bugzilla:http://bugzilla.redhat.com/ contra o produto JB o ss En t erp rise Ap p licat io n Plat f o rm..
Ao submeter um relatório de erro, certifique-se de mencionar a identificação do
manual:Migration_Guide.
Se você tiver uma sugestão para o melhoramento deste documento, por favor tente ser o mais
específico possível em sua descrição. Caso você tenha encontrado um erro, por favor inclua o
número da seção e alguns detalhes a respeito do texto para a nossa melhor identificação.
7
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Capítulo 1. Introdução
1.1. Guia da Migração
O JBoss Enterprise Application Plataform 6 é uma implementação poderosa, rápida e leve da
especificação Java Enterprise Edition 6. A arquitetura é construída no Modular Service Container e
ativa os serviços por demanda quando o seu aplicativo os requer. D evido à nova arquitetura, os
aplicativos executando no JBoss Enterprise Application Plataform 5 podem necessitar de
modificações para executarem no JBoss Enterprise Application Plataform 6.
O propósito deste guia é documentar as alterações que são requeridas a executarem com êxito e
implantar os aplicativos da JBoss Enterprise Application Plataform 6. Isto fornece informação de
como resolver a implantação e os problemas do período de execução e como prevenir alterações no
aplicativo. Esta é a primeira abordagem em direção à nova plataforma. Uma vez que o aplicativo for
implantado e executado com êxito, os planos podem ser feitos para atualização dos componentes
individuais para uso das novas funções e recursos da JBoss Enterprise Application Plataform 6.
Reportar um erro
8
⁠Capít ulo 2 . Preparação para a Migração
Capítulo 2. Preparação para a Migração
2.1. Preparação para a Migração
Uma vez que o servidor do aplicativo é estruturado de forma diferente da primeira versão, é possível
realizar algumas pesquisas e planejamento antes de tentar migrar o seu aplicativo.
1. R evisão d as N o vid ad es e D if eren ças n o JB o ss En t erp rise Ap p licat io n Plat af o rm
6
D iversas modificações foram realizadas neste lançamento que podem impactar na
implantação dos aplicativos do JBoss Enterprise Application Plataform 5. Isto inclui
modificações à estrutura do diretório do arquivo, configuração da implantação,
carregamento da classe e pesquisas JND I. Consulte a Seção 2.2, “ Revisão das Novidades e
D iferenças no JBoss Enterprise Application Plataform 6” para maiores detalhes.
2. R evisão d a d o cu men t ação d a In icializ ação
Certifique-se de revisar o capítulo nomeado Get Started Developing Applications no Development
Guide para o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/. Isto
contém informações importantes sobre o seguinte:
Java EE 6
O novo sistema de carregamento de classe modular
Alterações da estrutura do arquivo
Como baixar e instalar o JBoss Enterprise Application Plataform 6
Como baixar e instalar o JBoss D eveloper Studio
Como configurar o Maven para o seu ambiente de desenvolvimento
Como baixar e executar os aplicativo de amostra de iniciação rápida que lançam o
produto.
3. An álise e En t en d imen t o d e seu Ap licat ivo
Cada aplicativo é único e você deve entender por completo os componentes e a arquitetura
do aplicativo existente antes de tentar a migração.
Importante
Antes de realizar quaisquer modificações ao seu aplicativo, certifique-se de criar uma cópia
como backup.
Reportar um erro
2.2. Revisão das Novidades e Diferenças no JBoss Ent erprise
Applicat ion Plat aform 6
9
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
In t ro d u ção
Segue abaixo uma lista das diferenças notáveis de lançamentos anteriores do JBoss Enterprise
Application Plataform 6.
Mó d u lo b asead o n o carreg amen t o d a classe
No JBoss Enterprise Application Plataform 5, o carregamento de classe era hereditário. No
JBoss Enterprise Application Plataform 6, o carregamento de classe é baseado no JBoss
Modules. Isto oferece uma solução de aplicativo verdadeira, ocultando as classes de
implementação do servidor e apenas realizando o carregamento às classes que seu
aplicativo precisa. O carregamento de classe possui atualmente melhor desempenho. Os
aplicativos gravados ao JBoss Enterprise Application Plataform 5 devem ser modificados
para especificar as dependências do módulo e em alguns casos, reempacotar os
arquivos. Refira-se ao Overview of Class Loading and Modules no capítulo Class Loading and
Modules do Development Guide para o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
G eren ciamen t o d o D o main
No JBoss Enterprise Application Plataform 6, o servidor pode ser executado como um
servidor autônomo ou num storage domain. Num storage domain, você pode configurar
todos os grupos dos servidores de uma só vez, mantendo as configurações sincronizadas
por toda a rede de servidores. Enquanto isto não deve impactar os aplicativos
construídos, isto pode simplificar o gerenciamento de implantações para servidores
múltiplos. Refira-se ao About Managed Domains no Administration and Configuration Guide para
o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Nota
O modo domain não é suportado nos seguintes produtos do JBoss Enterprise:
JBoss Portal Platform 6
C o n f ig u ração d a Imp lan t ação
Servid o res Au t ô n o mo s e Man ag ed D o main s
O JBoss Enterprise Application Plataform 5 usava perfil baseado na
configuração de implantação. Esses perfis estavam localizados no diretório
EAP_HOME/server/. Os aplicativos sempre continham arquivos de
configuração múltiplos para segurança, banco de dados, adaptador de recurso
e outras configurações. No JBoss Enterprise Application Plataform 6, a
configuração da implantação é feita usando um arquivo. Esse arquivo é usado
para configurar todos os serviços e subsistemas usados para a implantação. Um
servidor autônomo é configurado usando o arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . Para os
servidores executando no storage domain, o servidor é configurado usando o
arquivo EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml . A informação
contida nos arquivos de configuração do JBoss Enterprise Application Plataform
5 deve ser integrada ao novo arquivo de configuração única.
O rd en ação d as imp lan t açõ es
O JBoss Enterprise Application Plataform 6 usa uma rápida inicialização para a
10
⁠Capít ulo 2 . Preparação para a Migração
implantação, resultando num desempenho aprimorado e eficiência. Na maioria
das vezes, o servidor do aplicativo está apto a determinar as dependências
automaticamente com antecedência e escolher a estratégia de implantação mais
eficiente. No entanto, os aplicativos do JBoss Enterprise Application Plataform 5,
que consistem em módulos múltiplos implantados como EARs e usam pesquisas
JND I de legacia ao invés de injeção CD I ou entradas de referência de recurso,
podem requerer alterações de configuração.
Est ru t u ra d e D iret ó rio e Scrip t s
Como mencionado anteriormente, o JBoss Enterprise Application Plataform 6 não usa
mais o perfil baseado na configuração da implantação, de forma que não há diretório
EAP_HOME/server/. Os arquivos de configuração para servidores autônomos estão
localizados no diretório EAP_HOME/stand al o ne/co nfi g urati o n/ e as implantações
localizadas no diretório EAP_HOME/stand al o ne/d epl o yments/. Para os servidores
executando num storage domain, os arquivos de configuração podem ser encontrados no
diretório EAP_HOME/d o mai n/co nfi g urati o n/ e as implantações podem ser
encontradas no diretório EAP_HOME/d o mai n/d epl o yments/.
No JBoss Enterprise Application Plataform 5, o script do Linux EAP_HOME/bi n/run. sh
ou o script do Windows EAP_HOME/bi n/run. bat era usado para iniciar o servidor. No
JBoss Enterprise Application Plataform 6, o script de iniciação do servidor depende de
como você executa o seu servidor. O script do Linux EAP_HOME/bi n/stand al o ne. sh ou
script do Windows EAP_HOME/bi n/stand al o ne. bat é usado para iniciar o servidor
autônomo. O script do Linux EAP_HOME/bi n/d o mai n. sh ou o script do Windows
EAP_HOME/bi n/d o mai n. bat é usado para iniciar um storage domain.
Pesq u isas JN D I
O JBoss Enterprise Application Plataform 6 usa agora JND I namespaces portáveis
padronizados. Os aplicativos gravados no JBoss Enterprise Application Plataform 5, que
usam as pesquisas JND I, devem ser alterados para seguir a nova convenção de JND I
namespace gerenciado. Para maiores informações sobre a sintaxe de nomeação JND I,
consulte a Seção 3.1.8.2, “ Sintaxe de Nomeação JND I Portável” .
Refira-se ao New and Changed Features in JBoss Enterprise Application Platform 6 no capítulo Get Started
Developing Applications do Development Guide para o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar um erro
11
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Capítulo 3. Migre seu Aplicativo
3.1. Alt erações Requeridas para a maioria dos Aplicat ivos
3.1.1. Revisão das Alt erações Requeridas para a Maioria dos Aplicat ivosg
As alterações do carregamento da classe e configuração no JBoss Enterprise Application Plataform
6 irão impactar em quase todos os aplicativos. O JBoss Enterprise Application Plataform 6 usa
também uma nova sintaxe de nomeação JND I portável default. Essas alterações irão impactar na
maioria dos aplicativos, por isso sugerimos primeiramente a revisão da seguinte informação antes
de você migrar seu aplicativo.
1. Seção 3.1.2.1, “ Atualização do Aplicativo devido às Alterações do Carregamento da Classe”
2. Seção 3.1.6.1, “ Atualização do Aplicativo devido às Alterações da Configuração”
3. Seção 3.1.8.1, “ Atualização dos Nomes JND I Namespace do Aplicativo”
Reportar um erro
3.1.2. Alt erações do Carregament o de Classe
3.1 .2 .1 . At ualização do Aplicat ivo de vido às Alt e raçõ e s do Carre gam e nt o da Classe
O carregamento da classe modular é uma mudança significativa no JBoss Enterprise Application
Plataform 6 e irá impactar em quase todos os aplicativos. Revise a seguinte informação
primeiramente quando você migrar o seu aplicativo.
1. Primeiro, busque pelo empacotamento de seu aplicativo e suas dependências. Consulte a
Seção 3.1.2.3, “ Atualização das D ependências do Aplicativo devido às Alterações do
Carregamento da Classe” para maiores informações.
2. Caso o seu aplicativo não efetuar o log em registro, você precisará especificar as
dependências de módulo corretas. Consulte a Seção 3.1.4.1, “ Modificação das
D ependências de Registro em Log” para maiores informações
3. D evido às alterações de carregamento de classe modular, você talvez precise alterar a
estrutura do empacotamento de seu EAR ou WAR. Consulte a Seção 3.1.5.1, “ Modificação do
Empacotamento dos EARS e WARs” para maiores informações.
Reportar um erro
3.1 .2 .2 . Co m pre e nde ndo as De pe ndê ncias de Mó dulo
Su mário
Um módulo é apenas apto a acessar suas próprias classes e as classes de qualquer módulo pelo
qual possui uma dependência explícita ou implícita.
Pro ced imen t o 3.1. C o mp reen d en d o as D ep en d ên cias d e Mó d u lo
1. C o mp reen d en d o as d ep en d ên cias imp lícit as
12
⁠Capít ulo 3. Migre seu Aplicat ivo
Os implantadores com o servidor implicitamente automatizado, adicionam algumas das
dependências do módulo comumente usadas, como por exemplo javax. api e sun. jd k.
Isto faz as classes visíveis à implantação no período de rodagem e libera o desenvolvedor
da tarefa de adicionar explicitamente as dependências. Para maiores detalhes de como e
quando essas dependências são adicionadas, refira-se ao Implicit Module Dependencies no
capítulo nomeado Class Loading and Modules no Development Guide do JBoss Enterprise
Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
2. C o mp reen d en d o as d ep en d ên cias exp lícit as
Para outras classes, os módulos devem ser especificados explicitamente ou as
dependências faltantes resultam em erros de implantação ou do período de rodagem. Caso
falte uma dependência, você verá traços C l assNo tFo und Excepti o ns ou
No C l assD efFo und Erro rs no log do servidor. Caso mais de um módulo efetuar o
carregamento ao mesmo JAR ou um módulo efetuar o carregamento numa classe que
estende a classe com carregamento por um módulo diferente, você verá traços
C l assC astExcepti o ns no log do servidor. Para especificar as dependências, modifique o
MANIFEST . MF ou crie um jbo ss-d epl o yment-structure. xml do arquivo do descritor
de implantação específico do JBoss. Para maiores informações sobre as dependências do
módulo, refira-se ao Overview of Class Loading and Modules no capítulo chamado Class
Loading and Module no Development Guide do JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar um erro
3.1 .2 .3. At ualização das De pe ndê ncias do Aplicat ivo de vido às Alt e raçõ e s do
Carre gam e nt o da Classe
Su mário
O carregamento de classe no JBoss Enterprise Application Plataform 6 é consideravelmente
diferente do que as versões anteriores do JBoss Enterprise Application Plataform. O carregamento
de classe é agora baseado no projeto de Módulos do JBoss. Ao invés de um único carregador,
carregador de classe hierárquico que carrega todos os JARS num caminho de classe plano, cada
biblioteca torna-se um módulo que apenas conecta os módulos extras dos quais ela depende. As
implantações no JBoss Enterprise Application Plataform 6 são módulos e não precisam ter acesso
às classes que são definidas nos JARs de um servidor de aplicativo a não que uma dependência
explicita seja definida nessa classe. Algumas das dependências do módulo definidas pelo servidor
do aplicativo são configuradas automaticamente. Por exemplo: caso você esteja implantando um
aplicativo Java EE, uma dependência no Java EE API é adicionada automaticamente ou
implicitamente. Para uma lista de dependências adicionadas automaticamente pelo servidor, refirase ao Implicit Module Dependencies no capítulo nomeado Class Loading and Modules no Development
Guide para o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
T aref as
Quando você migrar seu aplicativo ao JBoss Enterprise Application Plataform 6, você pode precisar
executar uma ou mais tarefas devido às alterações de carregamento de classe modular:
Seção 3.1.2.2, “ Compreendendo as D ependências de Módulo”
Seção 4.1.3, “ Uso do Tattle para encontrar D ependências do Aplicativo”
Seção 3.1.3.1, “ Criação ou Modificação dos Arquivos que controlam o Controle de Carregamento
da Classe no JBoss Enterprise Application Plataform 6”
13
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Seção 3.1.3.3, “ Recursos de Pacote para o Novo Sistema de Carregamento de Classe Modular”
Reportar um erro
3.1.3. Alt erações do Arquivo de Configuração
3.1 .3.1 . Criação o u Mo dificação do s Arquivo s que co nt ro lam o Co nt ro le de
Carre gam e nt o da Classe no JBo ss Ent e rprise Applicat io n Plat afo rm 6
Su mário
D evido à alteração no JBoss Enterprise Application Plataform 6 para uso do carregamento da
classe modular, você talvez precise criar ou modificar um ou mais arquivos para adicionar
dependências ou para prevenir dependências automáticas de serem carregadas. Para maiores
informações sobre o carregamento de classe e a procedência do carregamento de classe, refira-se
ao capítulo nomeado Class Loading and Modules no Development Guide para o JBoss Enterprise
Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Os seguintes arquivos são usados para controlar o carregamento da classe no JBoss Enterprise
Application Plataform 6.
jb o ss- web .xml
Caso tenha definido um elemento <cl ass-l o ad i ng > no arquivo jbo ss-web. xml , você
precisará removê-lo. O comportamento que isto causou no JBoss Enterprise Application
Plataform 5 é agora o comportamento do carregamento da classe default no JBoss
Enterprise Application Plataform 6, portanto não é mais necessário. Caso você não remova
mais esse elemento, você verá um ParseError e XMLStreamException no seu log do
servidor.
Segue abaixo uma amostra do elemento <cl ass-l o ad i ng > no arquivo jbo ssweb. xml que está comentada.
​< !DOCTYPE jboss-web PUBLIC
​
"-//JBoss//DTD Web Application 4.2//EN"
​
"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
​< jboss-web>
​< !-​
<class-loading java2ClassLoadingCompliance="false">
​
<loader-repository>
​
seam.jboss.org:loader=MyApplication
​
<loader-repositoryconfig>java2ParentDelegation=false</loader-repository-config>
​
</loader-repository>
​
</class-loading>
​ -->
​ </jboss-web>
MAN IFEST .MF
Ed it ad o man u almen t e
D ependendo de quais componentes ou módulos o seu aplicativo usa, você
14
⁠Capít ulo 3. Migre seu Aplicat ivo
precisa adicionar uma ou mais dependências a este arquivo. Você pode
adicioná-las tanto como D epend enci es ou como entradas C l ass-P ath.
Segue abaixo uma amostra MANIFEST . MF editada por um desenvolvedor:
​M anifest-Version: 1.0
​D ependencies: org.jboss.logmanager
​C lass-Path: OrderManagerEJB.jar
Caso você modifique esse arquivo, certifique-se de incluir um caractere com linha
nova no final do arquivo.
U san d o o Maven
Caso você use o Maven, você precisa modificar o seu arquivo po m. xml para
gerar as dependências para o arquivo MANIFEST . MF. Caso seu aplicativo usar
EJB 3.0, você pode possuir uma seção no arquivo po m. xml parecido com o
seguinte:
​< plugin>
​
<groupId>org.apache.maven.plugins</groupId>
​
<artifactId>maven-ejb-plugin</artifactId>
​
<configuration>
​
<ejbVersion>3.0</ejbVersion>
​
</configuration>
​< /plugin>
Caso o código EJB 3.0 usar o o rg . apache. co mmo ns. l o g , você precisará
daquela dependência no arquivo MANIFEST . MF. Com o objetivo de gerar aquela
dependência, adicione o elemento <pl ug i n> ao arquivo po m. xml , conforme
abaixo:
​< plugin>
​
<groupId>org.apache.maven.plugins</groupId>
​
<artifactId>maven-ejb-plugin</artifactId>
​
<configuration>
​
<ejbVersion>3.0</ejbVersion>
​
<archive>
​
<manifestFile>src/main/resources/METAINF/MANIFEST.MF</manifestFile>
​
</archive>
​
</configuration>
​< /plugin>
Na amostra acima, o arquivo src/mai n/reso urcres/MANIFEST . MF precisa
conter apenas a entrada da dependência:
​D ependencies: org.apache.commons.logging
15
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
O Maven gerará o arquivo MANIFEST . MF completo:
​M anifest-Version: 1.0
​D ependencies: org.apache.commons.logging
jb o ss- d ep lo ymen t - st ru ct u re.xml
Esse arquivo é um descritor de implantação específico do JBoss que pode ser usado para
controlar o carregamento da classe de forma granulada. Assim como o MANIFEST . MF,
esse arquivo pode ser usado para adicionar dependência. Isto pode também prevenir que
dependências automáticas sejam adicionadas, definir módulos adicionais, alterar o
comportamento de carregamento da classe isolado da implantação EAR e adicionar raízes
de recurso adicional ao módulo.
Segue abaixo uma amostra do arquivo jbo ss-d epl o yment-structure. xml que
adiciona uma dependência para o módulo JSF 1.2 e previne o carregamento automático
do módulo JSF 2.0.
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
Consulte a Seção 3.1.3.2, “ jboss-deployment-structure.xml” para informações adicionais
sobre este arquivo.
ap p licat io n .xml
Nas versões anteriores do JBoss Enterprise Application Plataform, você controlou a ordem
das implantações com um EAR usando o arquivo jbo ss-app. xml . Isto não é mais a
mesma situação. O Java EE6 spec fornece o elemento <i ni ti al i ze-i n-o rd er> no
appl i cati o n. xml que permite o controle da ordem pela qual os módulos do Java EE
com um EAR são implantados.
Na maioria das vezes, você não precisa especificar a ordem da implantação. Caso o seu
aplicativo use injeções de dependência e referências de recurso para referenciar
componentes em módulos externos, o elemento <i ni ti al i ze-i n-o rd er> não é
requerido na maioria das vezes, uma vez que o servidor do aplicativo está apto a
determinar implicitamente a maneira correta e ideal de ordenar os componentes.
16
⁠Capít ulo 3. Migre seu Aplicat ivo
Vamos assumir que você possui um aplicativo que contém um myBeans. jar e um
myApp. war com um myApp. ear. Um servlet no myApp. war@ EJB injeta um bean do
myBeans. jar. Neste caso, o servidor do aplicativo possui um conhecimento apropriado
para certificar-se de que o componente EJB está disponível antes do servlet ser iniciado e
você não necessitar usar o elemento <i ni ti al i ze-i n-o rd er>.
No entanto, caso o servlet usar referências remotas de estilo de pesquisa JND I de legacia
como o seguinte para acesso ao bean, você poderá especificar a ordem do módulo.
​i nit() {
​ Context ctx = new InitialContext();
​ ctx.lookup("TheBeanInMyBeansModule");
​
}
Neste caso, o servidor não está apto a determinar que o componente EJB está no
myBeans. jar e você precisa reforçar que os componentes no myBeans. jar são
inicializados e ativados antes dos componentes no myApp. war. Para isto, você configura
o elemento <i ni ti al i ze-i n-o rd er> para true e especifica a ordem dos módulos
myBeans. jar e myApp. war no arquivo appl i cati o n. xml .
Segue abaixo uma amostra que usa o elemento <i ni ti al i ze-i n-o rd er> para
controlar a ordem de implantação. O myBeans. jar é implantado antes do arquivo
myApp. war.
​< application xmlns="http://java.sun.com/xml/ns/javaee"
​
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="6"
​
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
​
http://java.sun.com/xml/ns/javaee/application_6.xsd">
​
<application-name>myApp</application-name>
​
<initialize-in-order>true</initialize-in-order>
​
<module>
​
<ejb>myBeans.jar</ejb>
​
</module>
​
<module>
​
<web>
​
<web-uri>myApp.war</web-uri>
​
<context-root>myApp</context-root>
​
</web>
​
</module>
​< /application>
O esquema para o arquivo appl i cati o n. xml pode ser encontrado no
http://java.sun.com/xml/ns/javaee/application_6.xsd.
17
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Nota
Você deve estar ciente que a configuração do elemento <i ni ti al i ze-i n-o rd er>
para true reduz a velocidade da implantação. É preferível definir as dependências
de maneira apropriada usando injeções de dependência ou referências de recurso,
uma vez que isto permite o contêiner maior flexibilidade na implantações ideais.
jb o ss- ejb 3.xml
O descritor da implantaçãojbo ss-ejb3. xml substitui o descritor da implantação
jbo ss. xml para substituir e adicionar os recursos fornecidos pelo Java Enterprise
Edition (EE - Edição Java Enterprise) definido pelo descritor de implantação ejb3jar. xml . O novo arquivo é incompatível com o jbo ss. xml e o jbo ss. xml é agora
ignorado nas implantações.
lo g in - co n f ig .xml
O arquivo l o g i n-co nfi g . xml não é mais usado para a configuração de segurança. A
segurança é agora configurada no elemento <securi ty-d o mai n> no arquivo de
configuração do servidor. Para um servidor autônomo, este é o arquivo
stand al o ne/co nfi g urati o n/stand al o ne. xml . Caso você esteja executando o seu
servidor num storage domain, esse é o arquivo
d o mai n/co nfi g urati o n/d o mai n. xml .
Reportar um erro
3.1 .3.2 . jbo ss-de plo ym e nt -st ruct ure .xm l
O jbo ss-d epl o yment-structure. xml é um novo descritor de implantação opcional para o
JBoss Enterprise Application Plataform 6. Este descritor de implantação fornece controle sobre o
carregamento da classe na implantação.
O esquema para este descritor de implantação é o EAP_HOME/d o cs/schema/jbo ssd epl o yment-structure-1_2. xsd
Reportar um erro
3.1 .3.3. Re curso s de Paco t e para o No vo Sist e m a de Carre gam e nt o de Classe
Mo dular
Su mário
Nas versões anteriores do JBoss Enterprise Application Plataform, todos os recursos dentro do
diretório WEB-INF/ foram adicionados ao caminho de classe WAR. No JBoss Enterprise Application
Plataform 6, os artefatos do aplicativo da web são apenas carregados a partir dos diretórios WEBINF/cl asses e WEB-INF/l i b. A falha em empacotar os artefatos do aplicativo nas localizações
especificadas pode resultar em C l assNo tFo und Excepti o n, No C l assD efErro r ou outros erros
do período de execução.
Para resolver esses erros de carregamento da classe, você deverá modificar a estrutura de seu
arquivo do aplicativo ou definir um módulo personalizado.
Mo d if icação d o Emp aco t amen t o d e R ecu rso
18
⁠Capít ulo 3. Migre seu Aplicat ivo
Para disponibilizar os recursos apenas para o aplicativo, você deve empacotar os
arquivos de propriedades, JARs e outros artefatos com WAR, movendo-os ao diretório
WEB-INF/cl asses/ ou WEB-INF/l i b/. Essa abordagem está descrita com maiores
detalhes na: Seção 3.1.3.4, “ Alteração da Localização das Propriedades ResourceBundle”
C riação d e u m Mó d u lo Perso n aliz ad o
Caso deseje disponibilizar recursos personalizados a todos os aplicativos executando no
servidor do JBoss Enterprise Application Plataform, você deverá criar um módulo
personalizado. Essa abordagem está descrita em maiores detalhes na Seção 3.1.3.5,
“ Criação de um Módulo Personalizado”
Reportar um erro
3.1 .3.4 . Alt e ração da Lo calização das Pro prie dade s Re so urce Bundle
Su mário
Nas versões anteriores do JBoss Enterprise Application Plataform, o diretório
EAP_HOME/server/SERVER_NAME/co nf/ estava no classpath e disponível ao aplicativo. Para
disponibilizar as propriedades ao caminho da clase do aplicativo no JBoss Enterprise Application
Plataform 6, você deve empacotá-las com seu aplicativo.
Pro ced imen t o 3.2.
1. Caso esteja implantando um arquivo WAR, você deve empacotar essas propriedades na
pasta WEB-INF/cl asses/ do WAR.
2. Caso deseje disponibilizar essas propriedades a todos os componentes num EAR, você
deve empacotá-las à raiz do JAR na pasta l i b/ do EAR.
Reportar um erro
3.1 .3.5 . Criação de um Mó dulo Pe rso nalizado
O seguinte procedimento descreve como criar um módulo personalizado com o objetivo de criar
arquivos de propriedades e outros recursos disponíveis a todos os aplicativos sendo executados
no servidor do JBoss Enterprise Application Plataform.
Pro ced imen t o 3.3. C riação d e u m Mó d u lo Perso n aliz ad o
1. Crie e preencha a estrutura do diretório mo d ul e/.
a. Crie uma estrutura de diretório sob o diretório EAP_HOME/mo d ul e para conter os
arquivos e JARs. Por exemplo:
$ cd EAP_HOME/mo d ul es/ $ mkd i r -p myo rg -co nf/mai n/pro perti es
b. Mova os arquivos de propriedades ao diretório EAP_HOME/mo d ul es/myo rg co nf/mai n/pro perti es/ criado na etapa anterior.
c. Crie um arquivo mo d ul e. xml no diretório EAP_HOME/mo d ul es/myo rg co nf/mai n/ contendo o seguinte XML:
19
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​< module xmlns="urn:jboss:module:1.1" name="myorg-conf">
​
<resources>
​
<resource-root path="properties"/>
​
</resources>
​< /module>
2. Modifique o subsistema ee no arquivo de configuração do servidor. Você pode usar o JBoss
CLI ou pode editar manualmente o arquivo.
A. Siga as seguintes etapas para modificar o arquivo de configuração do servidor usando
o JBoss CLI.
a. Inicie o servidor e conecte-se ao Gerenciamento CLI.
A. Insira a seguinte linha de comando para o Linux:
$ EAP_HOME/bin/jboss-cli.sh --connect
$ Connected to standalone controller at localhost:9999
B. Insira a seguinte linha de comando para o Windows:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\> Connected to standalone controller at
localhost:9999
b. Para criar o elemento myo rg -co nf<global-modules> no subsistema ee, digite o
seguinte na linha de comando:
/subsystem=ee:write-attribute(name=global-modules, value=
[{"name"=>"myorg-conf","slot"=>"main"}])
Você deverá ver o seguinte resultado:
{"outcome" => "success"}
B. Siga essas etapas caso prefira editar manualmente o arquivo da configuração do
servidor.
a. Interrompa o servidor e abra o arquivo de configuração do servidor num editor de
texto. Caso você esteja executando um servidor autônomo, este é o arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml ou caso esteja
executando um storage domain, o arquivo é o
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml .
b. Encontre o subsistema ee e adicione o módulo global para myo rg -co nf. Segue
abaixo uma amostra do elemento do subsistema ee modificado para inclusão do
elemento myo rg -co nf:
​< subsystem xmlns="urn:jboss:domain:ee:1.0" >
​
<global-modules>
​
<module name="myorg-conf" slot="main" />
20
⁠Capít ulo 3. Migre seu Aplicat ivo
​
</global-modules>
​< /subsystem>
3. Assumindo que você copiou um arquivo nomeado my. pro perti es à localização de
módulo correta, você poderá agora carregar os arquivos de propriedades usando o código
similar ao seguinte:
​T hread.currentThread().getContextClassLoader().getResource("my.prop
erties");
Reportar um erro
3.1.4 . Alt erações do Regist ro em Log
3.1 .4 .1 . Mo dificação das De pe ndê ncias de Re gist ro e m Lo g
Su mário
O JBoss LogManager suporta front ends para todos os frameworks de registro em log, de forma que
você pode manter seu código de registro de log atual ou mover à nova infraestrutura de registro de
log do JBoss. Independente de sua decisão, devido às alterações de carregamento de classe
modular, você precisará provavelmente modificar seu aplicativo para adicionar as dependências
requeridas.
Pro ced imen t o 3.4 . At u aliz ação d o có d ig o d e reg ist ro d e lo g d o ap licat ivo
1. Seção 3.1.4.2, “ Atualização do Código do Aplicativo para Frameworks de Registro de Log de
Terceiros”
2. Seção 3.1.4.3, “ Modificação do Código para Uso do Novo Framework de Registro de Log do
JBoss”
Reportar um erro
3.1 .4 .2 . At ualização do Có digo do Aplicat ivo para Fram e wo rks de Re gist ro de Lo g
de T e rce iro s
Su mário
No JBoss Enterprise Application Plataform 6, as dependências de registro em log para frameworks
de terceiros comuns como o Apache Commons Logging, Apache log4j, SLF4J e Java Logging são
adicionados por default. No entanto, caso você esteja usando o log4j e você não deseja usar o
subsistema de registro em log para configurar seus manuseadores (anexadores), você precisa
excluir o módulo do log4j do JBoss Enterprise Application Plataform.
Pro ced imen t o 3.5. C o n f ig u ração d o JB o ss En t erp rise Ap p licat io n Plat af o rm 6 p ara u so
d e u m arq u ivo lo g 4 j.p ro p ert ies o u lo g 4 j.xml
1. Criação de um jbo ss-d epl o yment-structure. xml com o seguinte conteúdo:
​< jboss-deployment-structure>
21
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<deployment>
<!-- Exclusions allow you to prevent the server from
automatically adding some dependencies -->
​
<exclusions>
​
<module name="org.apache.log4j" />
​
</exclusions>
​
</deployment>
​< /jboss-deployment-structure>
​
2. Posicione o arquivo jbo ss-d epl o yment-structure. xml tanto no diretório MET A-INF/
ou diretório WEB-INF/, caso esteja implantando um WAR ou no diretório MET A-INF/, caso
você esteja implantando um EAR.
3. Adicione o arquivo l o g 4 j. pro perti es ou l o g 4 j. xml no diretório l i b/ de seu EAR ou
no diretório WEB-INF/cl asses/ de sua implantação WAR.
4. Implante seu aplicativo.
Nota
Caso você deseje usar o arquivo de configuração log4j, você não estará mais apto à alterar a
configuração do registro de log log4j no período de execução.
Reportar um erro
3.1 .4 .3. Mo dificação do Có digo para Uso do No vo Fram e wo rk de Re gist ro de Lo g do
JBo ss
Su mário
Para usar o novo framework, altere suas importações e código conforme abaixo:
Pro ced imen t o 3.6 . Mo d if iq u e o C ó d ig o e D ep en d ên cias p ara U so d o JB o ss lo g g in g
Framewo rk
1. Alt eração d e su as imp o rt açõ es e có d ig o d e reg ist ro em lo g
Segue abaixo uma amostra do código que usa o novo framework do JBoss Logging:
​i mport org.jboss.logging.Level;
​i mport org.jboss.logging.Logger;
​p rivate static final Logger logger =
Logger.getLogger(MyClass.class.toString());
​i f(logger.isTraceEnabled()) {
​
logger.tracef("Starting...", subsystem);
​
}
2. Ad ição d e d ep en d ên cia d e reg ist ro em lo g
22
⁠Capít ulo 3. Migre seu Aplicat ivo
O JAR contendo as classes do JBoss Logging está localizado no módulo nomeado
o rg . jbo ss. l o g g i ng . O seu arquivo MANIFEST -MF deve parecer com o seguinte:
Manifest-Version: 1.0
Dependencies: org.jboss.logging
Por favor consulte a Seção 3.1.2.3, “ Atualização das D ependências do Aplicativo devido às
Alterações do Carregamento da Classe” e a Seção 4.2.1, “ D epuração e Solução dos
Problemas de Migração” para maiores informações sobre como encontrar a dependência do
módulo.
Reportar um erro
3.1.5. Alt erações do Empacot ament o do Aplicat ivo
3.1 .5 .1 . Mo dificação do Em paco t am e nt o do s EARS e WARs
Su mário
Quando você migrar seu aplicativo, você pode ter que alterar a estrutura de empacotamento de seu
EAR ou WAR devido à alteração do carregamento da classe modular. As dependências de módulo
contém o carregamento em ordem específica:
1. D ependências do sistema
2. D ependências do Usuário
3. Recursos Locais
4. D ependências inter-implantadas
Pro ced imen t o 3.7. Mo d if icação d o emp aco t amen t o d o arq u ivo
1. Emp aco t amen t o d o WAR
O WAR é um módulo único e todas as classes no WAR são carregados com a mesmo
carregador de classe. Isto significa que as classes empacotadas no diretório WEBINF/l i b/ são tratadas da mesma forma que as classes no diretório WEB-INF/cl asses.
2. Emp aco t amen t o d e u m EAR
Um EAR consiste de módulos múltiplos. O diretório EAR /l i b/ é um módulo único e cada
WAR ou sub-implantação jar EJB com EAR é um módulo separado. As classes não possuem
acesso às classes em outros módulos com o EAR, a não ser que as dependências tenham
sido definidas. As sub-implantações sempre possuem uma dependência automática no
módulo pai que as fornecem acesso às classes no diretório EAR /l i b/. No entanto, as subimplantações nem sempre possuem uma dependência automática para permiti-las acessarse entre si. Este comportamento é controlado pela configuração do elemento <earsubd epl o yments-i so l ated > na configuração do subsistema ee, conforme abaixo:
​< subsystem xmlns="urn:jboss:domain:ee:1.0" >
​ <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
​< /subsystem>
23
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Por default, isto é configurado para falso, permitindo que as sub-implantações vejam as
classes pertencentes a demais sub-implantações com o EAR.
Para maiores informações sobre o carregamento da classe, refira-se ao capítulo Class
Loading and Modules no Development Guide para o JBoss Enterprise Application Plataform 6
no https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar um erro
3.1.6. Alt erações da Configuração do Adapt ador de Recurso e Font e de
Dados
3.1 .6 .1 . At ualização do Aplicat ivo de vido às Alt e raçõ e s da Co nfiguração
No JBoss Enterprise Application Plataform 5, os serviços e subsistemas foram configurados em
diversos arquivos diferentes. No JBoss Enterprise Application Plataform 6, a configuração é agora
realizada basicamente em um arquivo. Caso o seu aplicativo usar qualquer um dos recursos ou
serviços, as alterações da configuração podem ser necessárias.
1. Caso o seu aplicativo usar uma fonte de dados, consulte a Seção 3.1.6.2, “ Atualização da
Configuração da Fonte de D ados” .
2. Caso o seu aplicativo usar JPA e empacotar o Hibernate JARs, consulte abaixo as opções
de migração na Seção 3.1.6.4, “ Configuração da Fonte de D ados para o Hibernate ou JPA” .
3. Caso o seu aplicativo usar um adaptador de recurso, consulte a Seção 3.1.6.5, “ Atualização
da Configuração do Adaptador de Recurso” .
4. Revise abaixo as informações de como configurar as alterações para segurança básica na
Seção 3.1.7.1, “ Configuração das Alterações de Segurança do Aplicativo” .
Reportar um erro
3.1 .6 .2 . At ualização da Co nfiguração da Fo nt e de Dado s
Su mário
Nas versões anteriores do JBoss Enterprise Application Plataform, a configuração da fonte de
dados JCA foi definida num arquivo com sufixo *-d s. xml . Esse arquivo foi implantado no diretório
d epl o y/ do servidor ou empacotado com o aplicativo. O driver JD BC foi copiado ao diretório
server/l i b/ ou empacotado no diretório WEB-INF/l i b/ do aplicativo. Enquanto esse método de
configuração de fonte de dados não é suportado para o desenvolvimento, ele não é recomendado
para produção uma vez que ele não é suportado pelas ferramentas de gerenciamento e
administrativa do JBoss.
No JBoss Enterprise Application Plataform 6, a fonte de dados é configurada no arquivo de
configuração do servidor. Caso a instância do JBoss Enterprise Application Plataform estiver sendo
executada num storage domain, a fonte de dados é configurada no arquivo
d o mai n/co nfi g urati o n/d o mai n. xml . Caso a instância do JBoss Enterprise Application
Plataform estiver sendo executada como servidor autônomo, a fonte de dados é configurada no
stand al o ne/co nfi g urati o n/stand al o ne. xml fi l e. As fontes de dados configuradas
dessa maneira podem ser gerenciadas e controladas usando as interfaces de gerenciamento do
JBoss, incluindo o Web Management Console e a interface da linha de comando (CLI). Essas
ferramentas facilitam o gerenciamento de implantações e configuram servidores múltiplos sendo
executados no storage domain.
24
⁠Capít ulo 3. Migre seu Aplicat ivo
A seguinte seção descreve como modificar sua configuração de fonte de dados, de forma que ela
pode ser gerenciada e suportada pelas ferramentas de gerenciamento disponíveis.
Mig ração p ara u ma C o n f ig u ração d e Fo n t e d e D ad o s G eren ciável p ara o JB o ss
En t erp rise Ap p licat io n Plat af o rm 6
Um driver compatível com JD BC 4.0 pode ser instalado como implantação ou como módulo core.
Um driver que é compatível com o JD BC 4.0 contém um arquivo MET AINF/servi ces/java. sq l . D ri ver que especifica o nome da classe do driver. Um driver que não
é compatível com o JD BC 4.0 requer etapas adicionais. Para maiores detalhes de como fazer um
driver compatível com o JD BC 4.0 e como atualizar sua configuração de fonte de dados atual para
uma gerenciável pelo Web Management Console e CLI, consulte a Seção 3.1.6.3, “ Instalação e
Configuração do JD BC D river” .
Caso seu aplicativo usar Hibernate ou JPA, ele poderá requerer alterações adicionais. Consulte a
Seção 3.1.6.4, “ Configuração da Fonte de D ados para o Hibernate ou JPA” para maiores
informações.
U se a Ferramen t a d e Mig ração Iro n Jacamar p ara C o n vert er o s D ad o s d e C o n f ig u ração
Você pode consultar a Seção 4.1.6, “ Uso da Ferramenta IronJacamar para Migração da Fonte de
D ados e Configurações do Adaptador de Recurso” . Essa ferramenta converte os arquivos de
configuração do estilo *-d s. xml ao formato esperado pelo JBoss Enterprise Application Plataform
6.
Reportar um erro
3.1 .6 .3. Inst alação e Co nfiguração do JDBC Drive r
Su mário
O JD BC driver pode ser instalado no contêiner em uma das duas seguintes maneiras:
como implantação
como módulo core
Os aspectos positivos e negativos de cada abordagem estão descritos abaixo.
No JBoss Enterprise Application Plataform 6, a fonte de dados é configurada no arquivo de
configuração do servidor. Caso a instância do JBoss Enterprise Application Plataform estiver sendo
executada num storage domain, a fonte de dados é configurada no arquivo
d o mai n/co nfi g urati o n/d o mai n. xml . Caso a instância do JBoss Enterprise Application
Plataform estiver sendo executada como um servidor autônomo, a fonte de dados é configurada no
arquivo stand al o ne/co nfi g urati o n/stand al o ne. xml . A informação da referência do
esquema, que é a mesma em ambos os modos, pode ser encontrada no diretório d o c/ de
instalação do JBoss Enterprise Application Plataform 6. Para propósitos desta discussão, assuma
que o servidor está sendo executado como servidor autônomo e a fonte de dados está configurada
no arquivo stand al o ne. xml .
Pro ced imen t o 3.8. In st alação e C o n f ig u ração d o JD B C D river
1. In st alação d o JB B C D river
a. In st ale o JD B C D river co mo u ma imp lan t ação
Esta é a maneira recomendada para instalar o driver. Quando o JD BC driver for
25
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
instalado como uma implantação, ele é implantado como um JAR regular. Caso a
instância do JBoss Enterprise Application Plataform estiver sendo executada como
um servidor autônomo, copie o JD BC 4.0 compatível ao JAR no diretório
EAP_HOME/stand al o ne/d epl o yments/. Caso o servidor estiver sendo executado
num storage domain, copie o JAR ao diretório EAP_HOME/d o mai n/d epl o yments/.
Segue abaixo uma amostra de um MySQL JD BC driver instalado como implantação
ao servidor autônomo:
$cp mysql-connector-java-5.1.15.jar
EAP_HOME/stand al o ne/d epl o yments/
Qualquer driver compatível com JD BC 4.0 é automaticamente reconhecido e
instalado no sistema pelo nome e versão. Um JAR compatível com JD BC 4.0 contém
um texto com arquivo nomeado MET A-INF/servi ces/java. sq l . D ri ver que
especifica o(s) nome(s) da classe do driver. Caso o driver não for compatível com o
JD BC 4.0, ele pode ser implantável em uma das seguintes maneiras:
Crie e adicione o arquivo java. sq l . D ri ver ao JAR sob o caminho MET AINF/servi ces/. Esse arquivo deve conter o nome de classe do driver, por
exemplo:
co m. mysq l . jd bc. D ri ver
Crie um arquivo java. sq l . D ri ver no diretório de implantação. Para uma
instância do JBoss Enterprise Application Plataform 6 sendo executada como
servidor autônomo, o arquivo deve ser posicionado aqui:
EAP_HOME/stand al o ne/d epl o yments/MET AINF/servi ces/java. sq l . D ri ver. Caso o servidor estiver num storage
domain, o arquivo deve ser posicionado aqui:
EAP_HOME/d o mai n/d epl o yments/MET AINF/servi ces/java. sq l . D ri ver.
Os aspectos positivos desta abordagem são:
Este é o método mais simples uma vez que não há necessidade de definir um
módulo.
Quando o servidor estiver executando num storage domain, as implantações que
usam esta abordagem são propagadas automaticamente a todos os servidores
no domain. Isto significa que o administrador não precisa distribuir o driver JAR
manualmente.
Os aspectos negativos desta abordagem são:
Caso o JD BC driver consistir de mais de um JAR, por exemplo o driver JAR mais
um JAR com licença independente ou JAR de localização, você não pode instalar
o driver como uma implantação. Você deve instalar o JD BC driver como um
módulo core.
Caso o driver não for compatível com o JD BC 4.0, um arquivo deve ser criado
contendo o(s) nome(s) da classe do driver e deve ser importado num JAR ou
sobreposto no diretório d epl o yments/.
b. In st ale o JD B C D river co mo mó d u lo co re
26
⁠Capít ulo 3. Migre seu Aplicat ivo
Para instalar um JD BC driver como um módulo core, você deve criar uma estrutura
do caminho do arquivo sob o diretório EAP_HOME/mo d ul es/. Esta estrutura contém
o JD BC driver JAR, qualquer licença do fornecedor adicional ou JARs de localização
e um arquivo mo d ul e. xml para definir o módulo.
A. In st ale o MySQ L JD B C D river co mo mó d u lo co re
i. Crie uma estrutura de diretório EAP_HOME/mo d ul es/co m/mysq l /mai n/
ii. No subdiretório mai n/, crie um arquivo mo d ul e. xml contendo a
seguinte definição do módulo para o MySQL JD BC driver:
​< ?xml version="1.0" encoding="UTF-8"?>
​< module xmlns="urn:jboss:module:1.0"
name="com.mysql">
​< resources>
​
<resource-root path="mysql-connector-java5.1.15.jar"/>
​< /resources>
​< dependencies>
​
<module name="javax.api"/>
​< /dependencies>
​< /module>
O nome do módulo, " com.mysql" , coincide com a estrutura do diretório
para esse módulo. O elemento <d epend enci es> é usado para
especificar as dependências do módulo em outros módulos. Neste caso,
como é o caso em todas as fontes de dados JD BC, isto é dependente do
Java JD BC APIs que é definido em outro módulo nomeado javax. api .
Este módulo está localizado sob o diretório
mo d ul es/system/l ayers/base/javax/api /mai n/.
Nota
Certifique-se de que você NÃO possui espaço no início do arquivo
mo d ul e. xml ou você obterá um erro " New missing/unsatisfied
dependencies" para este driver.
iii. Copie o MySQL JD BC driver JAR ao diretório
EAP_HOME/mo d ul es/co m/mysq l /mai n/:
$ cp mysql-connector-java-5.1.15.jar
EAP_HOME/mo d ul es/co m/mysq l /mai n/
B. In st ale o IB M D B 2 JD B C d river e licen ça JAR co mo u m mó d u lo co re
Esta amostra é fornecida para apenas demonstrar como implantar drivers que
requerem JARs além do JD BC D river JAR.
i. Crie a estrutura do diretório
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/.
27
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
ii. No subdiretório mai n/ crie um arquivo mo d ul e. xml contendo a
seguinte definição do módulo para o IBM D B2 JD BC driver e licença:
​< ?xml version="1.0" encoding="UTF-8"?>
​< module xmlns="urn:jboss:module:1.1"
name="com.ibm.db2">
​ <resources>
​
<resource-root path="db2jcc.jar"/>
​
<resource-root path="db2jcc_license_cisuz.jar"/>
​ </resources>
​ <dependencies>
​
<module name="javax.api"/>
​
<module name="javax.transaction.api"/>
​ </dependencies>
​< /module>
Nota
Certifique-se de que você NÃO possui espaço no início do arquivo
mo d ul e. xml ou você obterá um erro " New missing/unsatisfied
dependencies" para este driver.
iii. Copie o JD BC driver e a licença JAR ao diretório
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/.
$ cp db2jcc.jar EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/
$ cp db2jcc_license_cisuz.jar
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/
Os aspectos positivos desta abordagem são:
Esta é a única abordagem que funciona quando o JD BC driver consiste de mais
de um JAR.
Com esta abordagem, os drivers que não são compatíveis com o JD BC 4.0 podem
ser instalados sem modificar o driver JAR ou criando uma sobreposição de
arquivo.
Os aspectos negativos desta abordagem são:
É mais difícil configurar um módulo.
O módulo deve ser manualmente copiado para cada servidor executando num
storage domain.
2. C o n f ig u ração d a f o n t e d e d ad o s
a. Ad ição d o d river d o b an co d e d ad o s
Adicione o elemento <d ri ver> ao elemento <d ri vers> de mesmo arquivo. Isto
contém algumas das informações que foram definidas anteriormente no arquivo *d s. xml .
28
⁠Capít ulo 3. Migre seu Aplicat ivo
Primeiro determine se o driver JAR é compatível com o JD BC 4.0. Um JAR que é
compatível com o JD BC 4.0 contém um arquivo MET AINF/servi ces/java. sq l . D ri ver que especifica o nome de classe do driver. O
servidor usa este arquivo para encontrar o nome da(s) classe(s) de driver no JAR.
Um driver que é compatível com o JD BC 4.0 não requer um elemento <d ri vercl ass>, uma vez que ele já está especificado no JAR. Esta é uma amostra do
elemento do driver para um JD BC 4.0 compatível com o driver MySQL:
​< driver name="mysql-connector-java-5.1.15.jar"
module="com.mysql"/>
Um driver que não seja compatível com o JD BC 4.0 requer um atributo <d ri vercl ass> para identificar a classe do driver desde que não haja um arquivo MET AINF/servi ces/java. sq l . D ri ver que especifique o nome da classe do driver.
Segue abaixo uma amostra do elemento driver para o driver não compatível com o
JD BC 4.0:
​< driver name="mysql-connector-java-5.1.15.jar"
module="com.mysql"><driverclass>com.mysql.jdbc.Driver</driver-class></driver>
b. C riação d a f o n t e d e d ad o s
Crie um elemento <d ataso urce> na seção <d ataso urces> do arquivo
stand al o ne. xml . Este arquivo contém bastante informações da fonte de dados
anteriormente definida no arquivo *-d s. xml .
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do
servidor para a sua alteração ser persistente na iniciação do servidor.
Segue abaixo uma amostra de um elemento de fonte de dados MySQL no arquivo
stand al o ne. xml :
​< datasource jndi-name="java:/YourDatasourceName" poolname="YourDatasourceName">
​ <connectionurl>jdbc:mysql://localhost:3306/YourApplicationURL</connectio
n-url>
​ <driver>mysql-connector-java-5.1.15.jar</driver>
​ <transactionisolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
​ <pool>
​
<min-pool-size>100</min-pool-size>
​
<max-pool-size>200</max-pool-size>
​ </pool>
​ <security>
​
<user-name>USERID</user-name>
29
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<password>PASSWORD</password>
</security>
​ <statement>
​
<prepared-statement-cache-size>100</prepared-statementcache-size>
​
<share-prepared-statements/>
​ </statement>
​< /datasource>
​
Reportar um erro
3.1 .6 .4 . Co nfiguração da Fo nt e de Dado s para o Hibe rnat e o u JPA
Caso o seu aplicativo usar o JPA e empacotar atualmente JBoss JARss, você deverá usar o
Hibernate que está incluso com o JBoss Enterprise Application Plataform 6. Para uso dessa versão
do Hibernate, você deve remover o pacote antigo do Hibernate de seu aplicativo.
Pro ced imen t o 3.9 . R emo ção d o p aco t e H ib ern at e
1. Remova o Hibernate JARs de suas pastas da biblioteca do aplicativo.
2. Remova ou comente o elemento <hi bernate. transacti o n. manag er_l o o kup_cl ass>
em seu arquivo persi stence. xml uma vez que este elemento não é necessário.
Reportar um erro
3.1 .6 .5 . At ualização da Co nfiguração do Adapt ado r de Re curso
Su mário
Nas versões anteriores do servidor do aplicativo, a configuração do adaptador do recurso era
definido num arquivo com um sufixo *-d s. xml . No JBoss Enterprise Application Plataform 6, o
adaptador de recurso é configurado no arquivo de configuração do servidor. Caso você esteja
rodando num storage domain, o arquivo de configuração é o arquivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml . Caso você esteja rodando como um
servidor autônomo, configure o adaptador de recurso no arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . A informação da referência do
esquema, que é a mesma para ambos os módulos, pode ser encontrada no Resource adapter
descriptors.
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do servidor para
a sua alteração ser persistente na iniciação do servidor.
D ef in ição d o ad ap t ad o r d e recu rso
A informação do descritor do adaptador de recurso está definida no elemento do seguinte
subsistema no arquivo de configuração do servidor:
​< subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>
30
⁠Capít ulo 3. Migre seu Aplicat ivo
Você usará algumas das informações definidas anteriormente no arquivo *-d s. xml do adaptador
de recurso.
Segue abaixo uma amostra do elemento do adaptador de recurso no arquivo de configuração do
servidor:
​< resource-adapters>
​ <resource-adapter>
​
<archive>multiple-full.rar</archive>
​
<config-property name="Name">ResourceAdapterValue</config-property>
​
<transaction-support>NoTransaction</transaction-support>
​
<connection-definitions>
​
<connection-definition
​
classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConn
ectionFactory1"
​
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1"
​
pool-name="MultipleConnectionFactory1">
​
<config-property
name="Name">MultipleConnectionFactory1Value</config-property>
​
</connection-definition>
​
<connection-definition
​
classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConn
ectionFactory2"
​
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2"
​
pool-name="MultipleConnectionFactory2">
​
<config-property
name="Name">MultipleConnectionFactory2Value</config-property>
​
</connection-definition>
​
</connection-definitions>
​
<admin-objects>
​
<admin-object
​
classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject
1Impl"
​
jndi-name="java:/eis/MultipleAdminObject1">
​
<config-property name="Name">MultipleAdminObject1Value</configproperty>
​
</admin-object>
​
<admin-object classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject
2Impl"
​
jndi-name="java:/eis/MultipleAdminObject2">
​
<config-property name="Name">MultipleAdminObject2Value</configproperty>
​
</admin-object>
​
</admin-objects>
​ </resource-adapter>
​< /resource-adapters>
Reportar um erro
3.1.7. Alt erações de Segurança
31
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
3.1 .7 .1 . Co nfiguração das Alt e raçõ e s de Se gurança do Aplicat ivo
C o n f ig u re a seg u ran ça p ara a au t en t icação b ásica
O UsersR o l esLo g i nMo d ul e sempre bloqueava os arquivos das propriedades no classpath. Nas
versões anteriores do JBoss Enterprise Application Plataform, os arquivos das propriedades
posicionados no diretório EAP_HOME/server/SERVER_NAME/co nf/ encontravam-se no classpath
e podiam ser facilmente encontrados pelo UsersR o l esLo g i nMo d ul e. No JBoss Enterprise
Application Plataform 6, a estrutura do diretório foi alterada. Os arquivos das propriedades devem
ser empacotados com o aplicativo e disponibilizá-los na classpath.
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do servidor para
a sua alteração ser persistente na iniciação do servidor.
Para configurar a segurança para uma autenticação básica, adicione um novo security domain sob
o securi ty-d o mai ns para o stand al o ne/co nfi g urati o n/stand al o ne. xml ou o arquivo
de configuração do servidor d o mai n/co nfi g urati o n/d o mai n. xml :
​< security-domain name="example">
​
<authentication>
​
<login-module code="UsersRoles" flag="required">
​
<module-option name="usersProperties"
​
value="${jboss.server.config.dir}/exampleusers.properties"/>
​
<module-option name="rolesProperties"
​
value="${jboss.server.config.dir}/exampleroles.properties"/>
​
</login-module>
​
</authentication>
​< /security-domain>
Caso a instância do JBoss Enterprise Application Plataform 6 estiver sendo executada como um
servidor autônomo, o ${jbo ss. server. co nfi g . d i r} refere-se ao diretório
EAP_HOME/stand al o ne/co nfi g urati o n/. Caso a instância estiver executando num managed
domain, o ${jbo ss. server. co nfi g . d i r} refere-se ao diretório
EAP_HOME/d o mai n/co nfi g urati o n/.
Mo d if icação d o s n o mes d o secu rit y d o main
Os security domains não usam mais o prefixo java: /jaas/ no JBoss Enterprise Application
Plataform 6.
Você deve remover esse prefixo das configurações do security domain para os aplicativos da
Web no jbo ss-web. xml .
Você deve remover esse prefixo das configurações do security domain para os aplicativos
Enterprise no jbo ss-web. xml . Esse arquivo foi substituído pelo jbo ss. xml no JBoss
Enterprise Application Plataform 6.
Reportar um erro
3.1.8. Alt erações JNDI
32
⁠Capít ulo 3. Migre seu Aplicat ivo
3.1 .8 .1 . At ualização do s No m e s JNDI Nam e space do Aplicat ivo
Su mário
O EJB 3.1 introduziu um JND I namespace global padronizado e uma série de namespaces que
mapeiam vários escopos do aplicativo Java EE. Os três namespaces JND I usados para pesquisas
JND I portáveis são java: g l o bal , java: mo d ul e e java: app. Os aplicativos que usam as
pesquisas JND I devem ser alterados para seguir uma nova convenção de JND I namespace
padronizado.
Pro ced imen t o 3.10. Mo d if icação d as p esq u isas JN D I
1. Leia mais a respeito deste assunto na Seção 3.1.8.2, “ Sintaxe de Nomeação JND I Portável”
2. Seção 3.1.8.3, “ Revisão das Regras JND I Namespace”
3. Seção 3.1.8.4, “ Modificação do Aplicativo para Seguir as Novas Regras do JND I Namespace
(Espaço do Nome JND I)”
Amo st ra d e Map eamen t o s JN D I
As amostras de espaços de nome JND I dos lançamentos anteriores e como eles são especificados
no JBoss Enterprise Application Plataform 6 podem ser encontradas na: Seção 3.1.8.5, “ Amostras
do JND I Namespaces nas Versões Anteriores e como elas são especificadas no JBoss Enterprise
Application Plataform.”
Reportar um erro
3.1 .8 .2 . Sint axe de No m e ação JNDI Po rt áve l
Su mário
Existem quatro namespaces lógicos, cada um com o seu próprio escopo. Três desses namespaces
são usados para pesquisas JND I portáveis. A seguinte tabela descreve quando e como usar cada
namespace.
T ab ela 3.1. N amesp aces JN D I Po rt áveis
JN D I N amesp ace
D escrição
java:global
Os nomes neste namespace são compartilhados em todos os
aplicativos implantados numa instância do servidor do
aplicativo. Use nomes no namespace para encontrar os EJBs
remotos.
Segue abaixo uma amostra do java:global namespace:
java: g l o bal /jbo ss-seam-bo o ki ng /jbo ss-seambo o ki ng . jar/Ho tel Bo o ki ng Acti o n
33
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
JN D I N amesp ace
D escrição
java:module
Os nomes neste namespace são compartilhados por todos os
componentes num módulo, por exemplo: todos os enterprise
beans num módulo EJB único ou todos os componentes num
módulo da web.
Segue abaixo uma amostra do java:module namespace:
java: mo d ul e/Ho tel Bo o ki ng Acti o n! o rg . jbo ss. seam. e
xampl e. bo o ki ng . Ho tel Bo o ki ng
java:app
Os nomes neste namespace são compartilhados por todos os
componentes num aplicativo único. Por exemplo, um WAR e um
arquivo EJB jar no mesmo arquivo EAR teria acesso recursos no
java:app namespace.
Segue abaixo uma amostra do java:app namespace:
java: app/jbo ss-seambo o ki ng . jar/Ho tel Bo o ki ng Acti o n
Você pode encontrar maiores informações sobre os contextos de nomeação JND I na seção
EE.5.2.2, " Application Component Environment Namespaces" no " JSR 316: JavaTM Platform,
Enterprise Edition (Java EE) Specification, v6" . Você pode baixar a especificação a partir do
http://jcp.org/en/jsr/detail?id=316
Reportar um erro
3.1 .8 .3. Re visão das Re gras JNDI Nam e space
Su mário
O JBoss Enterprise Application Plataform 6 aprimorou os nomes do JND I namespace, não apenas
para fornecer regras consistentes e premeditadas para cada nome limitado no servidor do
aplicativo, mas também para prevenir problemas futuros de compatibilidade. Isto significa que você
poderá ter problemas com os namespaces atuais no seu aplicativo, caso eles não seguirem as
novas regras.
O s n amesp aces d evem seg u ir as seg u in t es reg ras:
1. Os nomes relativos não qualificados como o D efaul tD S ou jd bc/D efaul tD S devem ser
relativamente qualificados para o java: co mp/env, java: mo d ul e/env ou
java: jbo ss/env, dependendo do contexto.
2. Os nomes abso l ute não qualificados como /jd bc/D efaul tD S devem ser relativamente
qualificados a um nome java: jbo ss/ro o t.
3. Os nomes abso l ute qualificados como o java: /jd bc/D efaul tD S devem ser
qualificados da mesma forma que os nomes abso l ute não qualificados acima.
4. O espaço do nome java: jbo ss especial é compartilhado por toda a instância do servidor
AS.
5. Qualquer nome rel ati ve com o prefixo java: deve estar em um dos cinco espaços do
nome: co mp, mo d ul e, app, g l o bal ou jbo ss proprietário. Qualquer nome começando
com java: xxx onde xxx não combina com nenhum dos cinco acima e resultaria num erro
de nome inválido.
34
⁠Capít ulo 3. Migre seu Aplicat ivo
Reportar um erro
3.1 .8 .4 . Mo dificação do Aplicat ivo para Se guir as No vas Re gras do JNDI Nam e space
(Espaço do No m e JNDI)
Segue abaixo uma amostra da pesquisa JND I no JBoss Enterprise Application Plataform 5.1.
Este código é normalmente encontrado num método de inicialização.
​p rivate ProductManager productManager;
​t ry {
​
context = new InitialContext();
​
productManager = (ProductManager)
context.lookup("OrderManagerApp/ProductManagerBean/local");
​} catch(Exception lookupError) {
​
throw new ServletException("Unable to find the ProductManager
bean", lookupError);
​
}
Note que o nome de pesquisa é O rd erManag erApp/P ro d uctManag erBean/l o cal .
Segue abaixo uma amostra de como a mesma pesquisa pode ser codificada no JBoss Enterprise
Application Plataform 6.
​@ EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.
ProductManager")
​p rivate ProductManager productManager;
Os valores de pesquisa são definidos como variáveis do associado e usam o novo nome
java: app JND I namespace
java: app/O rd erManag erEJB/P ro d uctManag erBean! servi ces. ejb. P ro d uctManag er.
Reportar um erro
3.1 .8 .5 . Am o st ras do JNDI Nam e space s nas Ve rsõ e s Ant e rio re s e co m o e las são
e spe cificadas no JBo ss Ent e rprise Applicat io n Plat afo rm .
T ab ela 3.2.
N amesp ace n o JB o ss En t erp rise
Ap p licat io n Plat af o rm 5.x
O N amesp ace n o JB o ss
En t erp rise Ap p licat io n Plat af o rm
6
OrderManagerApp/ProductManagerB
ean/local
java:module/ProductManagerBean!se
rvices.ejb.ProductManager
OrderManagerApp/ProductManagerB
ean/local
C o men t ário s
ad icio n ais
O EE6 binding
default é apenas
acessível com o
mesmo módulo
java:app/OrderManagerEJB/ProductM O EE6 binding
anagerBean!services.ejb.ProductMan default é apenas
ager
acessível com o
mesmo aplicativo
35
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
N amesp ace n o JB o ss En t erp rise
Ap p licat io n Plat af o rm 5.x
O N amesp ace n o JB o ss
En t erp rise Ap p licat io n Plat af o rm
6
C o men t ário s
ad icio n ais
OrderManagerApp/ProductManagerB
ean/local
java:global/OrderManagerApp/Order
ManagerEJB/ProductManagerBean!s
ervices.ejb.ProductManager
java:comp/UserTransaction
java:comp/UserTransaction
java:comp/UserTransaction
java:jboss/UserTransaction
O EE6 binding
default é
acessível
globalmente
Isto é acessível
para os EE
threads, ex.: Os
threads que seu
aplicativo cria
diretamente
Acessível
globalmente. Use
isto, caso o
java:comp/UserTr
ansaction não
esteja disponível
java:/TransactionManager
java:/TransactionSynchronizationRe
gistry
java:jboss/TransactionManager
java:jboss/TransactionSynchronizati
onRegistry
Reportar um erro
3.2. As Alt erações Dependem nos Component es e na sua Arquit et ura
do Aplicat ivo
3.2.1. Revisão das Alt erações Dependent es em seus Component es e
Arquit et ura do Aplicat ivo
Caso o seu aplicativo usar qualquer um dos seguintes componentes e tecnologias, você poderá
precisar realizar modificações ao seu aplicativo quando migrar ao JBoss Enterprise Application
Plataform 6.
H ib ern at e e JPA
Caso o seu aplicativo usar o Hibernate ou JPA, o seu aplicativo pode precisar de algumas
modificações. Consulte a Seção 3.2.2.1, “ Atualização dos Aplicativos que usam Hibernate
e/ou JPA” para maiores informações.
R EST
Caso seu aplicativo usar JAX-RS, você deve estar ciente de que ao JBoss Enterprise
Application Plataform 6 configura automaticamente o RESTEasy, de forma de que você
não precisa mais configurá-lo automaticamente. Consulte a Seção 3.2.4.1, “ Configuração
das Alterações JAX-RS e RESTEasy” para maiores informações.
LD AP
O realm de segurança LD AP é configurado de forma diferente no JBoss Enterprise
Application Plataform 6. Caso o seu aplicativo usar o LD AP, refira-se ao seguinte tópico
para maiores informações na Seção 3.2.5.1, “ Configuração das Alterações LD AP Security
Realm” .
36
⁠Capít ulo 3. Migre seu Aplicat ivo
Messag in g
O JBoss Messaging não está mais incluído no JBoss Enterprise Application Plataform 6.
Caso o seu aplicativo usar o JBoss Messaging como provedor messaging, você precisará
substituir o código do JBoss Messag como o HornetQ. A seguinte Seção 3.2.6.3,
“ Migração de seu Aplicativo para uso do HornetQ como um Provedor JMS” descreve o que
você precisa realizar.
C lu st erin g
A maneira que você ativa o clustering foi alterada no JBoss Enterprise Application
Plataform 6. Consulte a Seção 3.2.7.1, “ Realize Alterações ao seu Aplicativo para o
Clustering” para maiores detalhes.
Imp lan t ação d e est ilo d e serviço
Embora o JBoss Enterprise Application Plataform 6 não usa mais os descritores de estilo
de serviço, o contêiner suporta essas implantações de estilo de serviço sem alterações
onde possível. Consulte a Seção 3.2.8.1, “ Atualização dos Aplicativos que usam as
Implantações de estilo de Serviço ” para maiores informações.
In vo cação remo t a
Caso o seu aplicativo realizar invocações remota, você pode continuar usando o JND I
para pesquisar um proxy para o seu bean e invocar aquele proxy retornado. Consulte a
Seção 3.2.9.1, “ Migração dos Aplicativos Implantados do JBoss Enterprise Application
Plataform 5 que realiza Invocações Remotas ao JBoss Enterprise Application Plataform 6”
para maiores informações sobre as alterações dos namespaces e a sintaxe requerida.
Seam 2.2
Caso o seu aplicativo usar o Seam 2.2, refira-se à seguinte Seção 3.2.11.1, “ Migração dos
Arquivos Seam 2.2 para o JBoss Enterprise Application Plataform 6” para melhor
entendimento das alterações necessárias que você precisa realizar.
Sp rin g
Consulte a Seção 3.2.12.1, “ Aplicativos Spring de Migração” caso seu aplicativo usar o
Spring.
O u t ras alt eraçõ es q u e p o d em af et ar su a mig ração
Para alterações adicionais do JBoss Enterprise Application Plataform 6 que podem
impactar o seu aplicativo, consulte a Seção 3.2.13.1, “ Outras alterações que podem afetar
sua Migração” .
Reportar um erro
3.2.2. Alt erações JPA e Hibernat e
3.2 .2 .1 . At ualização do s Aplicat ivo s que usam Hibe rnat e e /o u JPA
Su mário
Caso seu aplicativo usar Hibernate ou JPA, leia as seguintes seções e realize quaisquer alterações
necessárias para migrar ao JBoss Enterprise Application Plataform 6.
Pro ced imen t o 3.11.
37
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
1. Seção 3.2.2.2, “ Configuração das Alterações para Aplicativos que usam o Hibernate e o
JPA”
2. Seção 3.2.2.4, “ Atualização de seu Aplicativo Hibernate 3 para uso do Hibernate 4”
3. Seção 3.2.2.9, “ Atualização de seu Aplicativo para ficar de acordo com a Especificação JPA
2.0”
4. Seção 3.2.2.10, “ Substituição do Cache de Segundo Nível JPA/Hibernate com o Infinispan”
5. Seção 3.2.2.12, “ Migração para o Validador Hibernate 4”
Reportar um erro
3.2 .2 .2 . Co nfiguração das Alt e raçõ e s para Aplicat ivo s que usam o Hibe rnat e e o
JPA
Su mário
Caso o seu aplicativo contenha um arquivo persi stence. xml ou código usando anotações
@ P ersi stenceC o ntext ou @ P ersi stenceUni t, o JBoss Enterprise Application Plataform 6
detectará isto durante a implantação e assumirá que o aplicativo usa o JPA. Ele adiciona o
Hibernate 4 mais algumas outras dependências no seu classpath do aplicativo.
Caso o seu aplicativo estiver usando as bibliotecas do Hibernate 3, na maioria das vezes você
estará apto à alterar ao uso do Hibernate 4 e executar com sucesso. No entanto, caso você ver
C l assNo tFo und Excepti o ns quando implantando seu aplicativo, você pode tentar resolvê-las
usando uma das abordagens seguintes.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo a executar seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 3.12. C o n f ig u ração d o Ap licat ivo
1. C o p ie o H ib ern at e 3 JAR s req u erid o p ara su a b ib lio t eca d o ap licat ivo .
Você pode estar apto a resolver o problema copiando o Hibernate 3 JARs específico que
contém classes ausentes no diretório l i b/ do aplicativo ou adicionando-as ao classpath
usando algum outro método. Em alguns casos, isto pode resultar no
C l assC astExcepti o ns ou outros problemas de carregamento de classe devido ao uso
misturado das versões Hibernate. Caso isto aconteça, você precisará usar a próxima
abordagem.
2. In st ru ção d o servid o r p ara u so ap en as d as b ib lio t ecas H Ib ern at e 3.
O JBoss Enterprise Application Plataform 6 permite você empacotar os jars do provedor de
38
⁠Capít ulo 3. Migre seu Aplicat ivo
persistência Hibernate 3.5 (ou superior) com o aplicativo. Para direcionar o servidor para
uso apenas das bibliotecas Hibernate 3 e excluir as bibliotecas do Hibernate 4, você precisa
configurar o jbo ss. as. jpa. pro vi d erMo d ul e para hi bernate3-bund l ed no
persi stence. xml , conforme abaixo:
​< ?xml version="1.0" encoding="UTF-8"?>
​< persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">
​
<persistence-unit name="plannerdatasource_pu">
​
<description>Hibernate 3 Persistence Unit.</description>
​
<jta-data-source>java:jboss/datasources/PlannerDS</jtadata-source>
​
<properties>
​
<property name="hibernate.show_sql" value="false" />
​
<property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />
​
</properties>
​
</persistence-unit>
​< /persistence>
O implantador do Java Persistence API (JPA - API de Persistência Java) detectará a
presença de um provedor de persistência no aplicativo e uso das bibliotecas do Hibernate 3.
Consulte a Seção 3.2.2.3, “ Propriedades da Unidade de Persistência” para maiores
informações sobre as propriedades de persistência JPA.
3. D esat ivação d o cach e d e seg u n d o n ível
O cache de segundo nível para o Hibernate 3 não exibe o mesmo comportamento com o
JBoss Enterprise Application Plataform 6 assim como fazia nas versões anteriores. Caso
você esteja usando o cache de segundo nível com o seu aplicativo, você deve desativá-lo
até atualizá-lo para o Hibernate 4. Para desativar o cache de segundo nível, configure o
<hi bernate. cache. use_seco nd _l evel _cache> para fal se no arquivo
persi stence. xml .
Reportar um erro
3.2 .2 .3. Pro prie dade s da Unidade de Pe rsist ê ncia
Pro p ried ad es d a C o n f ig u ração H ib ern at e 4 .x
O JBoss Enterprise Application Plataform 6 configura automaticamente as seguintes propriedades
da configuração Hibernate 4.x:
T ab ela 3.3. Pro p ried ad es d a U n id ad e d e Persist ên cia H ib ern at e
N o me d a
Pro p ried ad e
Valo r D ef au lt
Pro p ó sit o
39
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
N o me d a
Pro p ried ad e
Valo r D ef au lt
Pro p ó sit o
hi bernate. i d .
new_g enerato r
_mappi ng s
verdadeiro
Esta configuração é relevante caso você use
@ G enerated Val ue(AUT O ) para gerar valores de chave
de indexe único. Os novos aplicativos devem manter o
valor default true. Os aplicativos existentes que usavam
o Hibernate 3.3.x talvez tenham que alterar isto para
fal se com o objetivo de continuar usando o objeto de
sequência ou tabela baseada no gerador e manter a
compatibilidade reversa. O aplicativo pode substituir esse
valor no arquivo persi stence. xml .
Maiores informações sobre este comportamento são
fornecidas abaixo.
hi bernate. tra
nsacti o n. jta.
pl atfo rm
hi bernate. ejb
. reso urce_sca
nner
hi bernate. tra
nsacti o n. mana
g er_l o o kup_cl
ass
hi bernate. ses
si o n_facto ry_
name
hi bernate. ses
si o n_facto ry_
name_i s_jnd i
hi bernate. ejb
. enti tymanag e
r_facto ry_nam
e
Instância da
Interface
o rg . hi bernate
. servi ce. jta.
pl atfo rm. spi .
JtaP l atfo rm
Instância da
Interface
o rg . hi bernate
. ejb. packag i n
g . Scanner
Essa classe passa o gerenciador de transação, a
transação do usuário e o registro de sincronização da
transação no Hibernate.
Essa classe sabe como usar o indexe de anotação do
JBoss Enterprise Application Plataform para fornecer uma
implantação mais rápida.
Essa propriedade é removida caso encontrada no
persistence.xml uma vez que isto pode entrar em conflito
com o hi bernate. transacti o n. jta. pl atfo rm
QUALIFIED_PERSI Isto é configurado para o nome do aplicativo + o nome da
STENCE_UNIT_N unidade da persistência. O aplicativo pode especificar um
AME
valor diferente, mas ele deve ser único por todas as
implantações do aplicativo na instância do JBoss
Enterprise Application Plataform.
falso
Isto é configurado apenas se o aplicativo não tiver
especificado um valor para o
hi bernate. sessi o n_facto ry_name.
QUALIFIED_PERSI Isto é configurado para o nome do aplicativo + o nome da
STENCE_UNIT_N unidade da persistência. O aplicativo pode especificar um
AME
valor diferente, mas ele pode ser único por todas as
implantações do aplicativo na instância do JBoss
Enterprise Application Plataform.
No Hibernate 4.x, caso o new_g enerato r_mappi ng s esteja configurado para true:
O @ G enerated Val ue(AUT O ) mapeia para
o rg . hi bernate. i d . enhanced . Seq uenceStyl eG enerato r.
O @ G enerated Val ue(T ABLE) mapeia para
o rg . hi bernate. i d . enhanced . T abl eG enerato r.
O @ G enerated Val ue(SEQ UENC E) mapeia para
o rg . hi bernate. i d . enhanced . Seq uenceStyl eG enerato r.
40
⁠Capít ulo 3. Migre seu Aplicat ivo
No Hibernate 4.x, caso o new_g enerato r_mappi ng s esteja configurado para fal se:
O @ G enerated Val ue(AUT O ) mapeia para o Hibernate " native" .
O @ G enerated Val ue(T ABLE) mapeia para o
o rg . hi bernate. i d . Mul ti pl eHi Lo P erT abl eG enerato r.
O @ G enerated Val ue(SEQ UENC E) mapeia para o Hibernate " seqhilo" .
Consulte o http://www.hibernate.org/docs e veja o Hibernate 4.1 D eveloper Guide para maiores
informações sobre essa propriedade.
Pro p ried ad es d e Persist ên cia JPA
As seguintes propriedades JPA são suportadas na definição de unidade de persistência no arquivo
persi stence. xml :
T ab ela 3.4 . Pro p ried ad es d a U n id ad e d e Persist ên cia JPA
N o me d a
Pro p ried ad e
Valo r D ef au lt
Pro p ó sit o
jbo ss. as. jpa.
pro vi d erMo d ul
e
o rg . hi bernate
O nome do fornecedor de persistência.
O valor deve ser hi bernate3-bund l ed caso os
Hibernate 3 JARs estiverem no arquivo do aplicativo.
Caso o fornecedor de persistência for empacotado com o
aplicativo, este valor deve ser appl i cati o n.
jbo ss. as. jpa.
ad apterMo d ul e
o rg . jbo ss. as.
jpa. hi bernate
:4
O nome das classes de integração que ajuda o JBoss
Enterprise Application Plataform a funcionar com o
fornecedor de persistência.
Os valores válidos e corretos são:
o rg . jbo ss. as. jpa. hi bernate: 4 : Este é para as
classes de integração do Hibernate 4
o rg . jbo ss. as. jpa. hi bernate: 3: Este é para as
classes de integração Hibernate 3
Reportar um erro
3.2 .2 .4 . At ualização de se u Aplicat ivo Hibe rnat e 3 para uso do Hibe rnat e 4
Su mário
Quando você atualizar seu aplicativo para uso do Hibernate 4, algumas atualizações são gerais e
válidas independente da versão Hibernate sendo usada no momento pelo aplicativo. Para as
demais atualizações, você deve determinar qual versão o aplicativo está usando.
Pro ced imen t o 3.13. At u aliz ação d o ap licat ivo p ara u so d o H ib ern at e 4
1. O comportamento default gerador da sequência de auto-incremento foi alterado no JBoss
Enterprise Application Plataform 6. Consulte a Seção 3.2.2.5, “ Mantenha o Comportamento
Existente do Valor Gerado Automaticamente da Identidade Hibernate” para maiores
informações.
41
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
2. D etermine a versão do Hibernate sendo utilizado pelo aplicativo e escolha o procedimento
de atualização correto abaixo.
A. Seção 3.2.2.6, “ Migração de seu Aplicativo Hibernate 3.3.x para o Hibernate 4.x ”
B. Seção 3.2.2.7, “ Migração de seu Aplicativo Hibernate 3.5.x para o Hibernate 4.x”
3. Consulte a Seção 3.2.2.8, “ Modificação das Propriedades de Persistência para o Seam
Migrado” caso deseje executar seu aplicativo num ambiente com cluster.
Reportar um erro
3.2 .2 .5 . Mant e nha o Co m po rt am e nt o Exist e nt e do Valo r Ge rado Aut o m at icam e nt e
da Ide nt idade Hibe rnat e
O Hibernate 3.5 introduziu uma propriedade core nomeada
hi bernate. i d . new_g enerato r_mappi ng s que direciona como as colunas de sequência e
identidade são geradas usando o @ G enerated Val ue. No JBoss Enterprise Application Plataform
6, o valor default para esta propriedade é configurado como o seguinte:
Quando você implanta um aplicativo native Hibernate, o valor default é fal se.
Quando você implanta um aplicativo JPA, o valor default é true.
In st ru çõ es p ara N o vo s Ap licat ivo s
Os novos aplicativos que usam a anotação @ G enerated Val ue devem determinar o valor para a
propriedade hi bernate. i d . new_g enerato r_mappi ng s para true. Esta é a configuração
preferida uma vez que ela é mais portável entre bancos de dados diferentes. Na maioria das vezes
ela é mais eficiente e, na maioria dos casos, ela endereça compatibilidade com a especificação JPA
2.
Para novos aplicativos JPA, o JBoss Enterprise Application Plataform 6 efetua o default na
propriedade hi bernate. i d . new_g enerato r_mappi ng s para true e isto não deve ser
alterado.
Para novos aplicativos native Hibernate, o JBoss Enterprise Application Plataform 6 efetua o
default na propriedade hi bernate. i d . new_g enerato r_mappi ng s para fal se. Você deve
configurar essa propriedade para true.
In st ru çõ es p ara o s Ap licat ivo s d o JB o ss En t erp rise Ap p licat io n Plat af o rm 5
Os aplicativos existentes que usam a anotação @ G enerated Val ue devem certificar-se de que o
mesmo gerador é usado para criar valores de chave primária para novas entidades quando o
aplicativo é migrado ao JBoss Enterprise Application Plataform 6.
Para aplicativos JPA existentes, o JBoss Enterprise Application Plataform 6 efetua o default na
propriedade hi bernate. i d . new_g enerato r_mappi ng s para true. Você deve configurar
esta propriedade para fal se no arquivo persi stence. xml .
Para aplicativos native Hibernate, o JBoss Enterprise Application Plataform 6 efetua o default no
hi bernate. i d . new_g enerato r_mappi ng s para fal se e isto não deve ser alterado.
Consulte a Seção 3.2.2.3, “ Propriedades da Unidade de Persistência” para maiores informações
sobre essas configurações de propriedade.
Reportar um erro
3.2 .2 .6 . Migração de se u Aplicat ivo Hibe rnat e 3.3.x para o Hibe rnat e 4 .x
42
⁠Capít ulo 3. Migre seu Aplicat ivo
3.2 .2 .6 . Migração de se u Aplicat ivo Hibe rnat e 3.3.x para o Hibe rnat e 4 .x
Pro ced imen t o 3.14 .
1. Map eie o s t ip o s d e text H ib ern at e p ara JD BC LO NG VAR C HAR
Nas versões anteriores do Hibernate 3.5, o tipo de text era mapeado para JD BC C LO B. Um
novo tipo de Hibernate, materi al i zed _cl o b, foi adicionado ao Hibernate 4 para mapear
as propriedades Java Stri ng para JD BC C LO B. Caso o seu aplicativo possuir
propriedades configuradas como type= "text" que possuem por intenção serem mapeadas
para JD BC C LO B, você deve fazer o seguinte:
a. Caso o seu aplicativo usar arquivos de mapeamento hbm, altere a propriedade para
type= "materi al i zed _cl o b".
b. Caso seu aplicativo usar anotações, você deve substituir @ T ype(type = "text")
por @ Lo b.
2. R evise o có d ig o p ara en co n t rar alt eraçõ es em t ip o s d e valo res ret o rn ad o s
As projeções de critério agregado numérico retornam agora o mesmo tipo de valor de seus
counterparts HQL. Como resultado, os tipos de retorno das projeções seguintes no
o rg . hi bernate. cri teri o n foram alteradas.
a. D evido às alterações no C o untP ro jecti o n, P ro jecti o ns. ro wC o unt(),
P ro jecti o ns. co unt(pro pertyName) e
P ro jecti o ns. co untD i sti nct(pro pertyName), as projeções co unt e co unt
d i sti nct retornam agora um valor Lo ng .
b. D evido às alterações no P ro jecti o ns. sum(pro pertyName), as projeções sum
retornam agora um tipo de valor que depende do tipo de propriedade.
Nota
Falha ao modificar o seu código do aplicativo num
java. l ang . C l assC astExcepti o n.
i. Para propriedades mapeadas com tipos de número primitivo, Número, Longo
ou Curto, o valor Longo é retornado;
ii. Para propriedades mapeadas como tipos de ponto flutuante primitivo, D uplo
ou Flutuante, o valor D uplo é retornado.
Reportar um erro
3.2 .2 .7 . Migração de se u Aplicat ivo Hibe rnat e 3.5 .x para o Hibe rnat e 4 .x
Pro ced imen t o 3.15.
1. Mescle o An n o t at io n C o n f ig u rat io n n a C o n f ig u ração
Embora o Anno tati o nC o nfi g urati o n tenha sido substituído, ele não deve afetar a sua
migração.
Caso você esteja usando um arquivo hbm. xml , você deve estar ciente que o JBoss
Enterprise Application Plataform 6 usa o o rg . hi bernate. cfg . EJB3Nami ng Strateg y no
43
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Anno tati o nC o nfi g urati o n ao invés do
o rg . hi bernate. cfg . D efaul tNami ng Strateg y que foi usado em versões anteriores.
Isto pode resultar em incompatibilidade de nomeação. Caso você baseie-se na estratégia de
nomeação para o default do nome de uma tabela associada (muitos-para-muitos e coleções
de elementos), você poderá ver esse problema. Para resolver isto, você pode solicitar ao
Hibernate a usar o o rg . hi bernate. cfg . D efaul tNami ng Strateg y de legacia
chamando o C o nfi g urati o n#setNami ng Strateg y e passando-o ao
o rg . hi bernate. cfg . D efaul tNami ng Strateg y#INST ANC E.
2. Mo d if iq u e o s n amesp aces p ara est arem d e aco rd o co m o s n o vo s arq u ivo s
H ib ern at e D T D .
T ab ela 3.5.
D T D N amesp ace an t erio r
N o vo D T D N amesp ace
http://hibernate.sourceforge.net/hibernateconfiguration-3.0.dtd
http://hibernate.sourceforge.net/hibernatemapping-3.0.dtd
http://www.hibernate.org/dtd/hibernateconfiguration-3.0.dtd
http://www.hibernate.org/dtd/hibernatemapping-3.0.dtd
3. Mo d if iq u e as variáveis d o amb ien t e
a. Caso você esteja usando o Oracle e usando as propriedades materi al i zed _cl o b
ou materi al i zed _bl o b, a variável de ambiente global
hi bernate. jd bc. use_streams_fo r_bi nary deve ser configurada para
verdadeiro.
b. Caso você esteja usando o PostgreSQL e usando as propriedades C LO B ou BLO B, o
hi bernate. jd bc. use_streams_fo r_bi nary da variável do ambiente global
deve ser configurado para falso.
Reportar um erro
3.2 .2 .8 . Mo dificação das Pro prie dade s de Pe rsist ê ncia para o Se am Migrado
Caso você migrar o aplicativo gerenciado pelo contêiner JPA, as propriedades que influenciam a
serialização dos contextos de persistência estendidos são automaticamente passadas ao sistema.
No entanto, devido às alterações no Hibernate, você pode executar em problemas de serialização
caso você executar seu Seam migrado ou aplicativo Hibernate num ambiente com cluster. Você
poderá observar mensagens de erro similares à seguinte:
javax.ejb.EJBTransactionRolledbackException: JBAS010361: Failed to
deserialize
....
Caused by: java.io.InvalidObjectException: could not resolve session
factory during session deserialization
[uuid=8aa29e74373ce3a301373ce3a44b0000, name=null]
Para solucionar esses erros, você pode modificar as propriedades no arquivo de configuração. Na
maioria das vezes, este é o arquivo persi stence. xml . Para aplicativos native Hibernate API, este
é o arquivo hi bernate. cfg . xml .
Pro ced imen t o 3.16 . C o n f ig u ração d as p ro p ried ad es a serem execu t ad as n u m amb ien t e
co m clu st er
44
⁠Capít ulo 3. Migre seu Aplicat ivo
1. D etermine o valor hi bernate. sessi o n_facto ry_name a um nome único. Este nome deve
ser único por todas as implantações de aplicativo na instância do JBoss Enterprise
Application Plataform. Por exemplo:
​< property name="hibernate.session_factory_name" value="jboss-seambooking.ear_session_factory"/>
2. D etermine o valor hi bernate. ejb. enti tymanag er_facto ry_name a este nome único.
Este nome deve ser único por todas as implantações do aplicativo na instância do JBoss
Enterprise Application Plataform. Por exemplo:
​< property name="hibernate.ejb.entitymanager_factory_name"
value="seam-booking.ear_PersistenceUnitName"/>
Para maiores informações sobre as configurações do Hibernate JPA Persistence Unit Property,
consulte a Seção 3.2.2.3, “ Propriedades da Unidade de Persistência” .
Reportar um erro
3.2 .2 .9 . At ualização de se u Aplicat ivo para ficar de aco rdo co m a Espe cificação JPA
2 .0
Su mário
A especificação JPA 2.0 requer que um contexto de persistência não seja propagado fora da
transação JTA. Caso o seu aplicativo use apenas contextos de persistência de transação com
escopo, o comportamento é o mesmo que no JBoss Enterprise Application Plataform 6 assim como
era nas versões anteriores do servidor do aplicativo e nenhuma alteração é requerida. No entanto,
caso o seu aplicativo use um extended persistence context (XPC - contexto de persistência
estendida) para permitir o enfileiramento ou as modificações de dados em lote, você talvez tenha
que alterar o seu aplicativo.
C o mp o rt amen t o d e p ro p ag ação d e co n t ext o d e p ersist ên cia
Caso o seu aplicativo possua um bean de sessão stateful, Bean1, que use um contexto de
persistência estendido e chame um bean de sessão stateless, Bean2, que usa um contexto de
persistência de transação com escopo, você pode esperar que o seguinte comportamento ocorra:
Caso o Bean1 iniciar uma transação JTA e realizar a invocação do método Bean2 com a
transação JTA ativa, o comportamento no JBoss Enterprise Application Plataform 6 é o mesmo
que dos lançamentos anteriores e nenhuma alteração será necessária.
Caso o Bean1 não inciar uma transação JTA e realizar a invocação do método Bean2, o
JBoss Enterprise Application Plataform 6 não propaga o contexto de persistência estendida ao
Bean2. Esse comportamento é diferente ao dos lançamentos anteriores que propagavam o
contexto de persistência estendido ao Bean2. Caso o seu aplicativo esperar que o contexto de
persistência estendido seja propagado ao bean com o gerenciador de entidade transacional,
você precisa alterar o seu aplicativo para realizar a invocação com uma transação JTA ativa.
Reportar um erro
3.2 .2 .1 0 . Subst it uição do Cache de Se gundo Níve l JPA/Hibe rnat e co m o Infinispan
45
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
3.2 .2 .1 0 . Subst it uição do Cache de Se gundo Níve l JPA/Hibe rnat e co m o Infinispan
Su mário
O JBoss Cache foi substituído pelo Infinispan para o cache de segundo nível (2LC) Hibernate. Isso
requer uma alteração ao arquivo persi stence. xml . A sintaxe é um pouco diferente, dependendo
de você usar o JPA ou o cache de segundo nível Hibernate. Essas amostras assumem que você está
usando o Hibernate.
Segue abaixo uma amostra de como as propriedades para o cache e segundo nível foram
especificadas no arquivo persi stence. xml do JBoss Enterprise Application Plataform 5.x.
​< property name="hibernate.cache.region.factory_class"
​
value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
​< property name="hibernate.cache.region.jbc2.cachefactory"
value="java:CacheManager"/>
​< property name="hibernate.cache.use_second_level_cache" value="true"/>
​< property name="hibernate.cache.region.jbc2.cfg.entity" value="mvccentity"/>
​< property name="hibernate.cache.region_prefix" value="services"/>
As seguintes etapas usarão essa amostra para configurar o Infinispan no JBoss Enterprise
Application Plataform 6.
Pro ced imen t o 3.17. Mo d if icação d o arq u ivo persi stence. xml p ara u so In f in isp an
1. C o n f ig u ração In f in isp an p ara o ap licat ivo JPA n o JB o ss En t erp rise Ap p licat io n
Plat af o rm 6
Esta é a forma de como você especifica as propriedades para arquivo de mesma
configuração para o aplicativo JPA usando o Infinispan no JBoss Enterprise Application
Plataform 6:
​< property name="hibernate.cache.use_second_level_cache"
value="true"/>
Além disso, você precisa especificar um shared -cache-mo d e com um valor de
ENABLE_SELEC T IVE ou ALL conforme abaixo:
A. O ENABLE_SELEC T IVE é o default e valor recomendado. Isto significa que as entidades
não possuem cache a não que você marque-as como com cache.
​< shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
B. ALL significa que as entidades sempre possuem cache mesmo que você as marque sem
cache.
46
⁠Capít ulo 3. Migre seu Aplicat ivo
​< shared-cache-mode>ALL</shared-cache-mode>
2. C o n f ig u re o In f in isp an p ara o ap licat ivo H ib ern at e n at ive n o JB o ss En t erp rise
Ap p licat io n Plat af o rm 6
Esta é a forma de como você especifica a mesma configuração para o aplicativo Hibernate
native usando o Infinispan com o JBoss Enterprise Application Plataform 6:
​< property name="hibernate.cache.region.factory_class"
​
value="org.jboss.as.jpa.hibernate4.infinispan.InfinispanRegionFacto
ry"/>
​< property name="hibernate.cache.infinispan.cachemanager"
​
value="java:jboss/infinispan/container/hibernate"/>
​< property name="hibernate.transaction.manager_lookup_class"
​
value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
​< property name="hibernate.cache.use_second_level_cache"
value="true"/>
Você deve adicionar o seguinte ao arquivo MANIFEST . MF:
Manifest-Version: 1.0
Dependencies: org.infinispan, org.hibernate
Para maiores informações sobre as propriedades do cache Hibernate, consulte: Seção 3.2.2.11,
“ Propriedades do Cache Hibernate” .
Reportar um erro
3.2 .2 .1 1 . Pro prie dade s do Cache Hibe rnat e
T ab ela 3.6 . Pro p ried ad es
N o me d a Pro p ried ad e
D escrição
hi bernate. cache. pro vi d er_cl ass
O nome da classe de um C acheP ro vi d er
personalizado.
Booliano. Otimiza a operação do cache de
segundo nível para minimizar as gravações, ao
custo de leituras mais frequentes. Essa
configuração é mais útil para caches com
cluster, sendo que o Hibernate3 é habilitado por
default para as implantações do cache com
cluster.
Booliano. Habilita o cache da consulta. As
consultas individuais continuam sendo
configuradas com o cache.
hi bernate. cache. use_mi ni mal _puts
hi bernate. cache. use_q uery_cache
47
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
N o me d a Pro p ried ad e
D escrição
Booliano. Usado para desativar completamente
o cache de segundo nível, que é habilitado por
default para classes que especificam um
mapeamento <cache>.
hi bernate. cache. q uery_cache_facto ry
O nome da classe da interface Q ueryC ache
default. O valor default é um
Stand ard Q ueryC ache interno.
hi bernate. cache. reg i o n_prefi x
O prefixo para uso dos nomes de região do
cache de segundo nível.
hi bernate. cache. use_structured _entri Booliano. Força o Hibernate a aplicar o store
es
nos dados no cache de segundo nível num
formato mais fácil para o usuário.
hi bernate. cache. d efaul t_cache_co ncur Configuração usada para gerar o nome do
rency_strateg y
o rg . hi bernate. anno tati o ns. C acheC o nc
urrencyStrateg y default de uso quando tanto
o @ C acheabl e ou @ C ache forem usados. O
@ C ache(strateg y= ". . ") é usado para
substituir este default.
hi bernate. cache. use_seco nd _l evel _ca
che
Reportar um erro
3.2 .2 .1 2 . Migração para o Validado r Hibe rnat e 4
Su mário
O Validador Hibernate 4.x é uma nova base de código que implementa o JSR 303 - Bean Validation.
O processo de migração do Validator 3.x para 4.x é bastante simples, mas existem algumas
alterações que você deve realizar quando migrando seu aplicativo.
Pro ced imen t o 3.18. Vo cê p o d e p recisar execu t ar u ma o u mais d essas t aref as
1. Acesso ao Valid at o rFact o ry d ef au lt
O JBoss Enterprise Application Plataform 6 bind (associa) o ValidatorFactory default ao
contexto JND I sob o nome java: co mp/Val i d ato rFacto ry.
2. C o mp reen d en d o o ciclo d e vid a d a valid ação t rig g er
Quando usado em combinação com o Hibernate Core 4, o ciclo de vida baseado na
validação é automaticamente ativado pelo Hibernate Core.
a. A validação ocorre nas operações INSER T , UP D AT E e D ELET E de entidade.
b. Você pode configurar os grupos a serem validados pelo tipo de evento usando as
seguintes propriedades:
javax. persi stence. val i d ati o n. g ro up. pre-persi st,
javax. persi stence. val i d ati o n. g ro up. pre-upd ate, and
javax. persi stence. val i d ati o n. g ro up. pre-remo ve.
Os valores dessas propriedades são de vírgula separada, nomes de classe
inteiramente qualificada dos grupos a serem validados.
48
⁠Capít ulo 3. Migre seu Aplicat ivo
Os grupos de validação são um novo recurso da especificação da Validação Bean.
Caso você não deseje aproveitar as vantagens desse novo recurso, não existem
alterações requeridas na migração para o Hibernate Validator 4.
c. Caso você desativar o ciclo de vida baseado na validação pela configuração da
propriedade javax. persi stence. val i d ati o n. mo d e para no ne. Outros valores
válidos para esta propriedade são auto (o default), cal l back e d d l .
3. C o n f ig u ração d e seu ap licat ivo p ara u so d a valid ação
a. Caso você deseje manualmente controlar a validação, você pode criar um Validador
em algumas das seguintes maneiras:
Crie uma instância Val i d ato r a partir do Val i d ato rFacto ry usando o
método g etVal i d ato r().
Injete as Instâncias do Validador em seu EJB. O bean CD I ou qualquer outro
recurso injetável do Java EE.
b. Você pode usar o Val i d ato rC o ntext retornado pelo
Val i d ato rFacto ry. usi ng C o ntext() para personalizar sua instância do
Validador. Você pode configurar um Messag eInterpo l ato r,
T raverabl eR eso l ver e C o nstrai ntVal i d ato rFacto ry personalizado usando
o API. Essas interfaces são específicas na especificação do Bean Validation e são
novas ao Hibernate Validator 4.
4. Mo d if icação d o có d ig o p ara u so d e n o vas rest riçõ es d o B ean Valid at io n
As novas restrições de validação de nível Bean solicitam alterações de código quando
migrando ao Hibernate Validator 4.
a. Você deve usar as restrições nos seguintes pacotes para atualização ao Validador
Hibernate 4:
javax. val i d ati o n. co nstrai nts
o rg . hi bernate. val i d ato r. co nstrai nts
b. Todas as restrições que existiam no Hibernate Validator 3 continuam disponíveis no
Hibernate Validator 4. Para usá-las, você precisa importar a classe especificada e em
alguns casos alterar o nome ou tipo de parâmetro de restrição.
5. U so d e rest rição p erso n aliz ad a
No Hibernate Validator 3, é necessária uma restrição personalizada para implantar a
interface o rg . hi bernate. val i d ato r. Val i d ato r. No Hibernate Validator 4, você
precisa implantar a interface javax. val i d ati o n. C o nstrai ntVal i d ato r. Essa
interface contém os mesmos métodos i ni ti al i ze() e i sVal i d () da interface anterior,
no entanto, o método de assinatura foi alterado. Além disso, a alteração D D L não é mais
suportada no Hibernate Validator 4.
Reportar um erro
3.2.3. Alt erações do JSF
3.2 .3.1 . At ivação de Aplicat ivo s para Uso de Ve rsõ e s Ant igas do JSF
49
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Su mário
Caso seu aplicativo usar uma versão antiga do JSF, você não precisará atualizar para o JSF 2.0.
Ao invés disso, você pode criar um arquivo jbo ss-d epl o yment-structure. xml para solicitar
que o JBoss Enterprise Application Plataform 6 use o JSF 1.2 ao invés do JSF 2.0 com a sua
implantação de aplicativo. Este descritor de implantação específico do JBoss é usado para
controlar o carregador de classe e é posicionado no diretório MET A-INF/ ou WEB-INF/do seu
WAR, ou no diretório MET A-INF/ do seu EAR.
Segue abaixo uma amostra de um arquivo jbo ss-d epl o yment-structure. xml que adiciona a
dependência para o módulo JSF 1.2 e exclui ou previne o carregamento automático do módulo JSF
2.0.
​< jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
​
<deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2" export="true"/>
​
</dependencies>
​
</deployment>
​
<sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​
</sub-deployment>
​< /jboss-deployment-structure>
Reportar um erro
3.2.4 . Alt erações JAX-RS e REST Easy
3.2 .4 .1 . Co nfiguração das Alt e raçõ e s JAX-RS e REST Easy
O JBoss Enterprise Application Plataform automaticamente configura o RESTEasy, de forma que
você não precisa configurá-lo. Portanto, você deve remover toda configuração RESTEasy existente
de seu arquivo web. xml e substituí-la por uma das três opções abaixo:
1. Sub-classifique o javax. ws. rs. co re. Appl i cati o n e use a anotação
@ Appl i cati o nP ath.
Esta é a opção mais fácil e não requer qualquer configuração xml. Apenas sub-classifique o
javax. ws. rs. co re. Appl i cati o n em seu aplicativo e anote-o com o caminho que
deseja para disponibilizar as classes JAX-RS. Por exemplo:
​@ ApplicationPath("/mypath")
​p ublic class MyApplication extends Application {
​
}
50
⁠Capít ulo 3. Migre seu Aplicat ivo
Na amostra acima, os seus recursos JAX-RS estão disponíveis no caminho
/MY_WEB_APP_CONTEXT/mypath/.
Nota
Perceba que o caminho deve ser especificado como /mypath e não /mypath/*. Não
deve ter nenhum asterísco ou barra.
2. Sub-classifique javax. ws. rs. co re. Appl i cati o n e use o arquivo web. xml para
configurar o mapeamento JAX-RS.
Caso você não deseje usar a anotação @ Appl i cati o nP ath, você terá que sub-classificar
da mesma forma o javax. ws. rs. co re. Appl i cati o n. Você então irá configurar o
mapeamento JAX-RS no arquivo web. xml . Por exemplo:
​p ublic class MyApplication extends Application {
​
}
​< servlet-mapping>
​
<servlet-name>com.acme.MyApplication</servlet-name>
​
<url-pattern>/hello/*</url-pattern>
​< /servlet-mapping>
Na amostra acima, os seus recursos JAX-RS estão disponíveis no
/MY_WEB_APP_CONTEXT/hel l o do caminho.
Nota
Você pode usar também esta abordagem para substituir um caminho de aplicativo
que foi configurado usando a anotação @ Appl i cati o nP ath.
3. Modificação do arquivo web. xml .
Caso você deseje sub-classificar o Appl i cati o n, você pode configurar o mapeamento
JAX-RS no arquivo web. xml , conforme abaixo:
​< servlet-mapping>
​
<servlet-name>javax.ws.rs.core.Application</servlet-name>
​
<url-pattern>/hello/*</url-pattern>
​< /servlet-mapping>
Na amostra acima, os seus recursos JAX-RS estão disponíveis no
/MY_WEB_APP_CONTEXT/hel l o do caminho.
51
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Nota
Caso você escolha esta opção, você precisará apenas adicionar o mapeamento.
Você não precisa adicionar o servlet correspondente. O servidor é responsável pela
adição do servlet correspondente automaticamente.
Reportar um erro
3.2.5. Alt erações do Realm de Segurança LDAP
3.2 .5 .1 . Co nfiguração das Alt e raçõ e s LDAP Se curit y Re alm
No JBoss Enterprise Application Plataform 5, o LD AP security realm foi configurado num elemento
<appl i cati o n-po l i cy> do arquivo l o g i n-co nfi g . xml . No JBoss Enterprise Application
Plataform 6, o LD AP security realm é configurado no elemento <securi ty-d o mai n> do arquivo do
servidor do aplicativo. Para um servidor autônomo, este é o arquivo
stand al o ne/co nfi g urati o n/stand al o ne. xml . Caso você esteja executando o seu servidor
num storage domain, este é o arquivo d o mai n/co nfi g urati o n/d o mai n. xml .
Segue abaixo a configuração realm de segurança LD AP no arquivo l o g i n-co nfi g . xml do
JBoss Enterprise Application Plataform 5:
​< application-policy name="mcp_ldap_domain">
​ <authentication>
​
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule"
flag="required">
​
<module-option
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</mod
ule-option>
​
<module-option
name="java.naming.security.authentication">simple</module-option>
​
....
​
</login-module>
​ </authentication>
​< /application-policy>
Segue abaixo uma amostra da configuração LD AP no arquivo de configuração do servidor no
JBoss Enterprise Application Plataform 6:
​< subsystem xmlns="urn:jboss:domain:security:1.0">
​ <security-domains>
​
<security-domain name="mcp_ldap_domain" type="default">
​
<authentication>
​
<login-module code="org.jboss.security.auth.spi.LdapLoginModule"
flag="required">
​
<module-option name="java.naming.factory.initial"
value="com.sun.jndi.ldap.LdapCtxFactory"/>
​
<module-option name="java.naming.security.authentication"
value="simple"/>
​
...
​
</login-module>
52
⁠Capít ulo 3. Migre seu Aplicat ivo
​
</authentication>
</security-domain>
​ </security-domains>
​< /subsystem>
​
Nota
O pesquisador XML foi alterado no JBoss Enterprise Application Plataform 6. No JBoss
Enterprise Application Plataform 5, você especificava as opções de módulo como conteúdo
de elemento como, por exemplo:
​< module-option
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory
</module-option>
Agora, as opções de módulo devem ser especificadas como atributos de elemento com
" value=" conforme abaixo:
​< module-option name="java.naming.factory.initial"
value="com.sun.jndi.ldap.LdapCtxFactory"/>
Reportar um erro
3.2.6. Alt erações do Hornet Q
3.2 .6 .1 . Ho rne t Q e NFS
Na maioria das vezes, o NFS não é um método apropriado de storing de dados JMS para uso com o
HornetQ, quando usando o NIO como um tipo de diário devido à maneira de sincronização que o
mecanismo de bloqueio funciona. No entanto, o NFS pode ser usado em determinadas
circunstâncias, apenas nos servidores do Red Hat Enterprise Linux. Isto é devido à implantação
NFS usada pelo Red Hat Enterprise Linux.
A implantação NFS do Red Hat Enterprise Linux suportar ambos I/O diretos (arquivos de abertura
com o conjunto de aviso O_D IRECT) e kernel baseado no I/O assíncrono. É possível o uso do NFS
com ambos recursos presentes e é possível usar o NFS como opção de storage compartilhado, sob
as seguintes regras:
O HornetQ deve ser configurado para uso do tipo de diário ASYNCIO.
O cache do cliente NFS do Red Hat Enterprise Linux deve ser desabilitado.
Importante
O log do servidor deve ser checado após o JBoss Enterprise Appliaction Plataform 6 for
iniciado para certificar-se de que a biblioteca native seja carregada com sucesso e que o tipo
de diário ASYNCIO está sendo usado. Caso a biblioteca native falhar no carregamento, o
HornetQ falhará no tipo de diário NIO e isto será mencionado no log do servidor.
53
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Importante
A biblioteca native que implementa o I/O assíncrono requer que o l i bai o seja instalado no
sistema do Red Hat Enterprise Linux onde o JBoss Enterprise Application Plataform está
sendo executado.
Reportar um erro
3.2 .6 .2 . Co nfiguração do JMS Bridge para Migração de JMS Me ssage s Exist e nt e s ao
JBo ss Ent e rprise Applicat io n Plat afo rm 6
O JBoss Enterprise Application Plataform 6 substituiu o JBoss Messaging pelo HornetQ como
implantação JMS default. A maneira mais fácil de migrar mensagens JMS a partir de um ambiente a
outro é usar o JMS Bridge. Embora o JBoss Enterprise Application Plataform 6 não possua
atualmente um JMS bridge disponível, você pode implantar um JMS bridge ao JBoss Enterprise
Application Plataform 5.x para mover as mensagens ao JBoss Enterprise Application Plataform 6.
Com o objetivo de evitar conflitos nas classes entre lançamentos, você deve usar o seguinte
procedimento para configurar o JMS Bridge. Os nomes do diretório SAR e bridge são arbitrários e
podem ser alterados caso seja necessário.
Pro ced imen t o 3.19 . C o n f ig u ração d o JMS B rid g e
1. Crie um subdiretório no diretório de implantação do JBoss Enterprise Application Plataform
5 para conter o SAR, por exemplo:
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar
2. Crie um subdiretório nomeado MET A-INF no
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/.
3. Crie um arquivo jbo ss-servi ce. xml que contém informação similar ao seguinte no
diretório EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/MET A-INF/.
​< server>
​
<loader-repository>
​
com.example:archive=unique-archive-name
​
<loader-repositoryconfig>java2ParentDelegation=false</loader-repository-config>
​
</loader-repository>
​
<!-- JBoss Enterprise Application Platform 6 JMS Provider -->
<mbean code="org.jboss.jms.jndi.JMSProviderLoader"
name="jboss.messaging:service=JMSProviderLoader,name=EnterpriseAppl
icationPlatform6JMSProvider">
​
<attribute
name="ProviderName">EnterpriseApplicationPlatform6JMSProvider</attr
ibute>
​
<attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter<
/attribute>
​
<attribute
name="FactoryRef">jms/RemoteConnectionFactory</attribute>
​
<attribute
name="QueueFactoryRef">jms/RemoteConnectionFactory</attribute>
​
54
⁠Capít ulo 3. Migre seu Aplicat ivo
​
<attribute
name="TopicFactoryRef">jms/RemoteConnectionFactory</attribute>
​
<attribute name="Properties">
​
java.naming.factory.initial=org.jboss.naming.remote.client.InitialC
ontextFactory
​
java.naming.provider.url=remote://EnterpriseApplicationPlatform6hos
t:4447
​
java.naming.security.principal=jbossuser
​
java.naming.security.credentials=jbosspass
​
</attribute>
​
</mbean>
​
<mbean code="org.jboss.jms.server.bridge.BridgeService"
name="jboss.jms:service=Bridge,name=MyBridgeName" xmbeandd="xmdesc/Bridge-xmbean.xml">
​
<depends optional-attributename="SourceProviderLoader">jboss.messaging:service=JMSProviderLoad
er,name=JMSProvider</depends>
​
<depends optional-attributename="TargetProviderLoader">jboss.messaging:service=JMSProviderLoad
er,name=EnterpriseApplicationPlatform6JMSProvider</depends>
​
<attribute
name="SourceDestinationLookup">/queue/A</attribute>
​
<attribute
name="TargetDestinationLookup">jms/queue/test</attribute>
​
<attribute name="QualityOfServiceMode">1</attribute>
​
<attribute name="MaxBatchSize">1</attribute>
​
<attribute name="MaxBatchTime">-1</attribute>
​
<attribute name="FailureRetryInterval">60000</attribute>
​
<attribute name="MaxRetries">-1</attribute>
​
<attribute name="AddMessageIDInHeader">false</attribute>
​
<attribute name="TargetUsername">jbossuser</attribute>
​
<attribute name="TargetPassword">jbosspass</attribute>
​
</mbean>
​< /server>
​
Nota
O <l o ad -repo si to ry> está presente para garantir que o SAR já foi um classloader
isolado. Além disso, perceba que ambos bridge " target" e bridge look-up incluem
credenciais de segurança para o usuário " jbossuser" com senha " jbosspass" . Isto é
devido ao JBoss Enterprise 6 possuir segurança por default. O usuário nomeado
" jbossuser" com senha " jbosspass" foi criado no Appl i cati o nR eal m com a função
g uest usando o script EAP_HOME/bi n/ad d _user. sh.
4. Copie os seguintes JARs a partir do diretório
EAP_HOME/mo d ul es/system/l ayers/base/ no diretório
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/. Substitua cada
VERSION_NUMBER pelo número de versão em sua distribuição do JBoss Enterprise
Application Plataform 6.
55
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
o rg /ho rnetq /mai n/ho rnetq -co re-VERSION_NUMBER. jar
o rg /ho rnetq /mai n/ho rnetq -jms-VERSION_NUMBER. jar
o rg /jbo ss/ejb-cl i ent/mai n/jbo ss-ejb-cl i ent-VERSION_NUMBER. jar
o rg /jbo ss/l o g g i ng /mai n/jbo ss-l o g g i ng -VERSION_NUMBER. jar
o rg /jbo ss/l o g manag er/mai n/jbo ss-l o g manag er-VERSION_NUMBER. jar
o rg /jbo ss/marshal l i ng /mai n/jbo ss-marshal l i ng -VERSION_NUMBER. jar
o rg /jbo ss/marshal l i ng /ri ver/mai n/jbo ss-marshal l i ng ri ver-VERSION_NUMBER. jar
o rg /jbo ss/remo te-nami ng /mai n/jbo ss-remo tenami ng -VERSION_NUMBER. jar
o rg /jbo ss/remo ti ng 3/mai n/jbo ss-remo ti ng -VERSION_NUMBER. jar
o rg /jbo ss/sasl /mai n/jbo ss-sasl -VERSION_NUMBER. jar
o rg /jbo ss/netty/mai n/netty-VERSION_NUMBER. jar
o rg /jbo ss/remo ti ng 3/remo te-jmx/mai n/remo ti ng -jmx-VERSION_NUMBER. jar
o rg /jbo ss/xni o /mai n/xni o -api -VERSION_NUMBER. jar
o rg /jbo ss/xni o /ni o /mai n. xni o -ni o -VERSION_NUMBER. jar
Nota
Não copie simplesmente o EAP_HOME/bi n/cl i ent/jbo ss-cl i ent. jar uma vez
que as classes javax API classes entrarão em conflito com aquelas do JBoss
Enterprise Application Plataform 5.x.
Reportar um erro
3.2 .6 .3. Migração de se u Aplicat ivo para uso do Ho rne t Q co m o um Pro ve do r JMS
O JBoss Messaging não está mais incluído no JBoss Enterprise Application Plataform. Caso o seu
aplicativo use o JBoss Messaging como um fornecedor messaging, você precisará substituir o
código do JBoss Messaging com o HornetQ.
Pro ced imen t o 3.20. An t es d e co meçar
1. Encerre o cliente e o servidor
2. Realize uma cópia do backup de quaisquer dados do JBoss Messaging. Os dados da
mensagem são stored num banco de dados com tabelas pré-fixadas com o JBM_.
Pro ced imen t o 3.21. Alt ere seu p ro ved o r p ara o H o rn et Q
1. T ran sf ira co n f ig u raçõ es
56
⁠Capít ulo 3. Migre seu Aplicat ivo
A transferência das configurações do JBoss Messaging à configuração do JBoss Enterprise
Application Plataform. As seguintes configurações podem ser encontradas nos descritores
de implantação localizados no servidor do JBoss Messaging:
Configuração do Serviço de Criações da Conexões
Esta configuração descreve as criações da conexão JMS implantada com o servidor do
JBoss Messaging. O JBoss Messaging configura as criações da conexão num arquivo
nomeado co nnecti o n-facto ri es-servi ce. xml , que está localizado no diretório de
implantação do servidor do aplicativo.
Configuração de D estinação
Esta configuração descreve as filas JMS e tópicos implantados com o servidor do JBoss
Messaging. Por default, o JBoss Messaging configura as destinações num arquivo
nomeado d esti nati o ns-servi ce. xml que está localizado no diretório de
implantação no servidor do aplicativo.
Configuração do Serviço da Bridge de Mensagem
Esta configuração inclui os serviços de ponte implantados com o servidor do JBoss
Messaging. Nenhum dos bridges é implantado por default, de forma que o nome do
arquivo da implantação varia, dependendo de sua instalação.
2. Mo d if icação d e seu có d ig o d e arq u ivo
Caso o código do aplicativo usar o JMS default, nenhuma alteração do código será
solicitada. No entanto, caso o aplicativo seja conectado a um cluster, você deverá revisar
com cuidado a documentação HornetQ das semânticas de clustering. O clustering está fora
do escopo da especificação JMS e o HornetQ e o JBoss Messaging tomaram abordagens
diferentes em suas respectivas implementações de funcionalidade de clustering.
Caso o aplicativo usar recursos específicos do JBoss Messaging, você deverá modificar o
código para uso dos recursos equivalentes disponíveis no HornetQ.
Para maiores informações sobre a configuração do messaging com o HornetQ, consulte:
Seção 3.2.6.4, “ Configuração de Mensagens com HornetQ” .
3. Mig ração d e men sag en s exist en t es
Mova quaisquer mensagens do banco de dados do JBoss Messaging ao diário HornetQ
usando a ponte JMS. As instruções para configuração da ponte JMS podem ser
encontrados na: Seção 3.2.6.2, “ Configuração do JMS Bridge para Migração de JMS
Messages Existentes ao JBoss Enterprise Application Plataform 6” .
Reportar um erro
3.2 .6 .4 . Co nfiguração de Me nsage ns co m Ho rne t Q
O método recomendado de configuração de mensagem no JBoss Entrerprise Application Plataform
6 é tanto o Management Console ou Management CLI. Você pode fazer com que estas alterações
sejam persistentes com qualquer uma dessas ferramentas sem a necessidade de editar
manualmente os arquivos de configuração stand al o ne. xml ou d o mai n. xml . Isto é útil, no
entanto recomendamos familiarizar-se com os componentes de mensagem, sendo que as amostras
da documentação usando as ferramentas de gerenciamento fornecem snippets do arquivo de
configuração default para referência.
Reportar um erro
57
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
3.2.7. Alt erações de Clust ering
3.2 .7 .1 . Re alize Alt e raçõ e s ao se u Aplicat ivo para o Clust e ring
Pro ced imen t o 3.22.
1. In icie o JB o ss En t erp rise Ap p licat io n Plat af o rm 6 co m o clu st erin g at ivad o
Para ativar o clustering no JBoss Enterprise Application Plataform 5.x, você precisava iniciar
suas instâncias do servidor usando o perfil al l ou alguma derivação do mesmo, como por
exemplo:
$ EAP5_HOME/bi n/run. sh -c al l
No JBoss Enterprise Application Plataform 6, o método para ativação do clustering depende
dos servidores serem autônomos ou serem executados num storage domain.
a. At ivação d o clu st er p ara servid o res ro d an d o n u m st o rag e d o main
Para ativar o clustering para servidores iniciados usando o controlador do domain,
atualize o seu d o mai n. xml e determine um grupo de servidor para uso do seu perfil
ha e grupo binding de socket ha-so ckets. Por exemplo:
​< server-groups>
​ <server-group name="main-server-group" profile="ha">
​
<jvm name="default">
​
<heap size="64m" max-size="512m"/>
​
</jvm>
​
<socket-binding-group ref="ha-sockets"/>
​ </server-group>
​< /server-group>
b. At ivação d o clu st er p ara servid o res au t ô n o mo s
Para ativar o clustering para os servidores autônomos, inicie o servidor usando o
arquivo de configuração apropriado conforme o seguinte: $
EAP_HOME/bi n/stand al o ne. sh --server-co nfi g = stand al o ne-ha. xml D jbo ss. no d e. name= UNIQUE_NODE_NAME
2. Esp ecif icação d o en d ereço b in d
No JBoss Enterprise Application Plataform 5.x, você normalmente indicaria o endereço bind
usado para o clustering usando o argumento da linha de comando -b parecido com: $
EAP_HOME/bi n/run. sh -c al l -b 19 2. 16 8. 0 . 2
No JBoss Enteprise Application Plataform 6, os endereços bind são claramente definidos
pelos bindings de sockets relevantes com os arquivos da configuração do JBoss Enterprise
Application Plataform 6. Para os servidores iniciados usando o controlador do domain, os
endereços bind são especificados com o arquivo d o mai n/co nfi g urati o n/ho st. xml .
Para os servidores autônomos, os endereços bind são especificados com o arquivo
stand al o ne-ha. xml :
​< interfaces>
​
<interface name="management">
​
<inet-address value="192.168.0.2"/>
​
</interface>
58
⁠Capít ulo 3. Migre seu Aplicat ivo
​
<interface name="public">
<inet-address value="192.168.0.2"/>
</interface>
</interfaces>
​
​
​
​< socket-binding-groups>
​
<socket-binding-group name="ha-sockets" defaultinterface="public">
​
<!-- ... -->
​
</socket-binding-group>
​ </socket-binding-groups>
A interface publ i c é especificada na amostra acima como interface default para todos os
sockets com o grupo binding de socket ha-so ckets.
3. C o n f ig u re o jvmR o ute p ara su p o rt ar o mo d _jk e mo d _p ro xy
No JBoss Enterprise Application Plataform 5, o servidor da web jvmR o ute foi configurado
usando a propriedade no arquivo server. xml . No JBoss Enterprise Application Plataform
6, o atributo jvmR o ute é configurado no subsistema da web do arquivo de combinação do
servidor usando o atributo i nstance-i d conforme o seguinte:
​< subsystem xmlns="urn:jboss:domain:web:1.1" default-virtualserver="default-host" native="false" instance-id="
{JVM_ROUTE_SERVER}">
O {JVM_ROUTE_SERVER} acima deve ser substituído pela ID do servidor jvmRoute.
O i nstance-i d pode ser determinado usando o Management Console.
4. Esp ecif icação d o en d ereço mu lt icast e p o rt a
No JBoss Enterprise Application Plataform 5.x, você pode especificar o endereço multicast e
a porta usada para a comunicação infra-cluster usando os argumentos da linha de
comando -u e -m, respectivamente, como por exemplo: $ EAP_HOME/bi n/run. sh -c
al l -u 228. 11. 11. 11 -m 4 56 88
No JBoss Enterprise Application Plataform 6, o endereço e porta multicast usados para a
comunicação do cluster são definidos pelo socket-binding referenciado pela pilha do
protocolo JGroups relevante, conforme abaixo:
​< subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
​
<stack name="udp">
​
<transport type="UDP" socket-binding="jgroups-udp"/>
​
<!-- ... -->
​
</stack>
​< /subsystem>
​< socket-binding-groups>
​
<socket-binding-group name="ha-sockets" defaultinterface="public">
​
<!-- ... -->
59
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<socket-binding name="jgroups-udp" port="55200" multicastaddress="228.11.11.11" multicast-port="45688"/>
​
<!-- ... -->
​
</socket-binding-group>
​< /socket-binding-groups>
Caso você preferir especificar o endereço multicast e a porta na linha de comando, você
pode definir o endereço multicast e as portas como propriedades de sistema e usá-las na
linha de comando quando você inciar o servidor. A seguinte amostra,
jbo ss. mcast. ad d r é o nome da variável para o endereço multicast e o
jbo ss. mcast. po rt é o nome da variável para a porta.
​< socket-binding name="jgroups-udp" port="55200"
​ multicast-address="${jboss.mcast.addr:230.0.0.4}" multicastport="${jboss.mcast.port:45688}"/>
Você pode inciar o seu servidor usando os argumentos da linha de comando: $
EAP_HOME/bi n/d o mai n. sh -D jbo ss. mcast. ad d r= 228. 11. 11. 11 D jbo ss. mcast. po rt= 4 56 88
5. U so d a p ilh a d e p ro t o co lo alt ern at ivo
No JBoss Enterprise Application Plataform 5.x, você pode manipular a pilha de protocolo
default para todos os serviços de clustering usando a propriedade de sistema
jbo ss. d efaul t. jg ro ups. stack. $ EAP_HOME/bi n/run. sh -c al l D jbo ss. d efaul t. jg ro ups. stack= tcp
No JBoss Enterprise Application Plataform 6, a pilha do protocolo default é definida pelo
subsistema JGroups com o d o mai n. xml ou stand al o ne-ha. xml :
​< subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
​
<stack name="udp">
​
<!-- ... -->
​
</stack>
​< /subsystem>
Reportar um erro
3.2 .7 .2 . Im plant ação de um HA Single t o n
Su mário
No JBoss Enterprise Application Plataform 5, os arquivos HA singleton eram implantados no
diretório d epl o y-hasi ng l eto n/ separados de outras implantações. Isto era realizado para
prevenir a implantação automática e garantir que o serviço HASingletonD eployer controlava a
implantação do arquivo e que arquivos fossem implantados apenas no nó mestre do cluster. Não
havia recurso da implantação instantânea (hot deployment), de forma que a implantação solicitava
a reinicialização do servidor. Além disso, caso o nó mestre falhasse solicitando outro nó a assumir
posição do nó mestre, o serviço singleton tinha que passar por todo o processo de implantação
com o objetivo de fornecer o serviço.
60
⁠Capít ulo 3. Migre seu Aplicat ivo
No JBoss Enterprise Application Plataform 6 isto foi alterado. O serviço de destino é instalado em
cada nó no cluster, mas é apenas iniciado em um nó a cada período gerado, quando usando um
SingletonService. Este procedimento simplifica as solicitações de implantação e reduz o período
solicitado de relocação do serviço mestre singleton entre os nós.
Pro ced imen t o 3.23. Imp lan t ação d o Serviço H A Sin g let o n
1. G rave o ap licat ivo d o serviço H A sin g let o n .
Segue abaixo uma amostra simples de um Serviço que está encapsulado com o decorador
SingletonService a ser implantado como um serviço singleton.
a. C rie u m serviço sin g let o n .
A seguinte listagem é uma amostra do serviço singleton:
​p ackage com.mycompany.hasingleton.service.ejb;
​i mport java.util.concurrent.atomic.AtomicBoolean;
​i mport java.util.logging.Logger;
​i mport
​i mport
​i mport
​i mport
​i mport
​i mport
​i mport
​i mport
org.jboss.as.server.ServerEnvironment;
org.jboss.msc.inject.Injector;
org.jboss.msc.service.Service;
org.jboss.msc.service.ServiceName;
org.jboss.msc.service.StartContext;
org.jboss.msc.service.StartException;
org.jboss.msc.service.StopContext;
org.jboss.msc.value.InjectedValue;
​
​/ **
​ * @ author <a href="mailto:wfink@ redhat.com">Wolf-Dieter
Fink</a>
​ */
​p ublic class EnvironmentService implements Service<String> {
​
private static final Logger LOGGER =
Logger.getLogger(EnvironmentService.class.getCanonicalName())
;
​
public static final ServiceName SINGLETON_SERVICE_NAME =
ServiceName.JBOSS.append("quickstart", "ha", "singleton");
​
/**
​
* A flag whether the service is started.
​
*/
​
private final AtomicBoolean started = new
AtomicBoolean(false);
private String nodeName;
​
​
​
​
private final InjectedValue<ServerEnvironment> env = new
InjectedValue<ServerEnvironment>();
public Injector<ServerEnvironment> getEnvInjector() {
return this.env;
}
61
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
/**
* @ return the name of the server node
​
*/
​
public String getValue() throws IllegalStateException,
IllegalArgumentException {
​
if (!started.get()) {
​
throw new IllegalStateException("The service '" +
this.getClass().getName() + "' is not ready!");
​
}
​
return this.nodeName;
​
}
​
​
public void start(StartContext arg0) throws
StartException {
​
if (!started.compareAndSet(false, true)) {
​
throw new StartException("The service is still
started!");
​
}
​
LOGGER.info("Start service '" +
this.getClass().getName() + "'");
​
this.nodeName = this.env.getValue().getNodeName();
​
}
​
public void stop(StopContext arg0) {
if (!started.compareAndSet(true, false)) {
​
LOGGER.warning("The service '" +
this.getClass().getName() + "' is not active!");
​
} else {
​
LOGGER.info("Stop service '" +
this.getClass().getName() + "'");
​
}
​
}
​
}
​
b. C rie u m sin g let o n EJB p ara in iciar o serviço co mo u m Sin g let o n Serviço n a
in iciação d o servid o r.
A seguinte listagem é uma amostra de um singleton EJB que inicia um Singleton na
iniciação do servidor:
​p ackage com.mycompany.hasingleton.service.ejb;
​i mport java.util.Collection;
​i mport java.util.EnumSet;
62
​i mport
​i mport
​i mport
​i mport
javax.annotation.PostConstruct;
javax.annotation.PreDestroy;
javax.ejb.Singleton;
javax.ejb.Startup;
​i mport
​i mport
​i mport
​i mport
org.jboss.as.clustering.singleton.SingletonService;
org.jboss.as.server.CurrentServiceContainer;
org.jboss.as.server.ServerEnvironment;
org.jboss.as.server.ServerEnvironmentService;
⁠Capít ulo 3. Migre seu Aplicat ivo
​i mport
​i mport
​i mport
​i mport
​i mport
​i mport
org.jboss.msc.service.AbstractServiceListener;
org.jboss.msc.service.ServiceController;
org.jboss.msc.service.ServiceController.Transition;
org.jboss.msc.service.ServiceListener;
org.slf4j.Logger;
org.slf4j.LoggerFactory;
​/ **
​ * A Singleton EJB to create the SingletonService during
startup.
​ *
​ * @ author <a href="mailto:wfink@ redhat.com">Wolf-Dieter
Fink</a>
​ */
​@ Singleton
​@ Startup
​p ublic class StartupSingleton {
​ private static final Logger LOGGER =
LoggerFactory.getLogger(StartupSingleton.class);
​
/**
​
* Create the Service and wait until it is started.<br/>
​
* Will log a message if the service will not start in
10sec.
​
*/
​ @ PostConstruct
​ protected void startup() {
​
LOGGER.info("StartupSingleton will be initialized!");
​
EnvironmentService service = new EnvironmentService();
SingletonService<String> singleton = new
SingletonService<String>(service,
EnvironmentService.SINGLETON_SERVICE_NAME);
​
// if there is a node where the Singleton should deployed
the election policy might set,
​
// otherwise the JGroups coordinator will start it
​
//singleton.setElectionPolicy(new
PreferredSingletonElectionPolicy(new
NamePreference("node2/cluster"), new
SimpleSingletonElectionPolicy()));
​
ServiceController<String> controller =
singleton.build(CurrentServiceContainer.getServiceContainer()
)
​
.addDependency(ServerEnvironmentService.SERVICE_NAME,
ServerEnvironment.class, service.getEnvInjector())
​
.install();
​
​
controller.setMode(ServiceController.Mode.ACTIVE);
try {
​
wait(controller,
EnumSet.of(ServiceController.State.DOWN,
ServiceController.State.STARTING),
ServiceController.State.UP);
​
LOGGER.info("StartupSingleton has started the
Service");
​
63
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
} catch (IllegalStateException e) {
LOGGER.warn("Singleton Service {} not started, are you
sure to start in a cluster (HA)
environment?",EnvironmentService.SINGLETON_SERVICE_NAME);
​
}
​ }
​
​
/**
​
* Remove the service during undeploy or shutdown
​
*/
​ @ PreDestroy
​ protected void destroy() {
​
LOGGER.info("StartupSingleton will be removed!");
​
ServiceController<?> controller =
CurrentServiceContainer.getServiceContainer().getRequiredServ
ice(EnvironmentService.SINGLETON_SERVICE_NAME);
​
controller.setMode(ServiceController.Mode.REMOVE);
​
try {
​
wait(controller, EnumSet.of(ServiceController.State.UP,
ServiceController.State.STOPPING,
ServiceController.State.DOWN),
ServiceController.State.REMOVED);
​
} catch (IllegalStateException e) {
​
LOGGER.warn("Singleton Service {} has not be stopped
correctly!",EnvironmentService.SINGLETON_SERVICE_NAME);
​
}
​ }
​
private static <T> void wait(ServiceController<T>
controller, Collection<ServiceController.State>
expectedStates, ServiceController.State targetState) {
​
if (controller.getState() != targetState) {
​
ServiceListener<T> listener = new
NotifyingServiceListener<T>();
​
controller.addListener(listener);
​
try {
​
synchronized (controller) {
​
int maxRetry = 2;
​
while
(expectedStates.contains(controller.getState()) & & maxRetry >
0) {
​
LOGGER.info("Service controller state is {},
waiting for transition to {}", new Object[]
{controller.getState(), targetState});
​
controller.wait(5000);
​
maxRetry--;
​
}
​
}
​
} catch (InterruptedException e) {
​
LOGGER.warn("Wait on startup is interrupted!");
​
Thread.currentThread().interrupt();
​
}
​
controller.removeListener(listener);
​
ServiceController.State state = controller.getState();
​
LOGGER.info("Service controller state is now
{}",state);
64
⁠Capít ulo 3. Migre seu Aplicat ivo
​
if (state != targetState) {
throw new IllegalStateException(String.format("Failed
to wait for state to transition to %s. Current state is %s",
targetState, state), controller.getStartException());
​
}
​
}
​ }
​
​
private static class NotifyingServiceListener<T> extends
AbstractServiceListener<T> {
​
@ Override
​
public void transition(ServiceController<? extends T>
controller, Transition transition) {
​
synchronized (controller) {
​
controller.notify();
​
}
​
}
​ }
​
}
c. C rie u m B ean d e Sessão St at eless p ara acesso ao serviço a p art ir d e u m
clien t e.
Segue abaixo uma amostra de um bean de sessão stateless que acessa o serviço de
um cliente:
​p ackage com.mycompany.hasingleton.service.ejb;
​i mport javax.ejb.Stateless;
​i mport
​i mport
​i mport
​i mport
org.jboss.as.server.CurrentServiceContainer;
org.jboss.msc.service.ServiceController;
org.slf4j.Logger;
org.slf4j.LoggerFactory;
​/ **
​ * A simple SLSB to access the internal SingletonService.
​ *
​ * @ author <a href="mailto:wfink@ redhat.com">Wolf-Dieter
Fink</a>
​ */
​@ Stateless
​p ublic class ServiceAccessBean implements ServiceAccess {
​
private static final Logger LOGGER =
LoggerFactory.getLogger(ServiceAccessBean.class);
​
public String getNodeNameOfService() {
LOGGER.info("getNodeNameOfService() is called()");
​
ServiceController<?> service =
CurrentServiceContainer.getServiceContainer().getService(
​
EnvironmentService.SINGLETON_SERVICE_NAME);
​
LOGGER.debug("SERVICE {}", service);
​
if (service != null) {
​
return (String) service.getValue();
​
65
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
} else {
throw new IllegalStateException("Service '" +
EnvironmentService.SINGLETON_SERVICE_NAME + "' not found!");
​
}
​
}
​
}
​
d. C rie u ma in t erf ace d e ló g ica co mercial p ara o Sin g let o n Service.
A seguinte amostra é uma interface lógica comercial para o SingletonService:
​p ackage com.mycompany.hasingleton.service.ejb;
​i mport javax.ejb.Remote;
​/ **
​ * Business interface to access the SingletonService via this
EJB
​ *
​ * @ author <a href="mailto:wfink@ redhat.com">Wolf-Dieter
Fink</a>
​ */
​@ Remote
​p ublic interface ServiceAccess {
​
public abstract String getNodeNameOfService();
​
}
2. In icie cad a in st ân cia d o JB o ss En t erp rise Ap p licat io n Plat af o rm 6 co m o
clu st erin g h ab ilit ad o .
O método de ativação com cluster depende se os servidores forem autônomos ou rodando
num storage domain.
a. H ab ilit e o clu st erin g p ara servid o res execu t an d o n u m st o rag e d o main .
Você pode habilitar o clustering usando o Management CLI ou você pode editar
manualmente o arquivo de configuração.
A. H ab ilit e o clu st erin g u san d o o Man ag emen t C LI.
i. In icie o seu co n t ro lad o r d e d o main .
ii. Ab ra a jan ela co man d o p ara o seu sist ema o p eracio n al.
iii. C o n ect e ao Man ag emen t C LI p assan d o o en d ereço IP d o
co n t ro lad o r d e d o main o u n o me D N S.
Nesta amostra, assuma que o endereço IP do controlador de domain é
19 2. 16 8. 0 . 14 .
A. Insira a seguinte linha de comando para o Linux:
66
⁠Capít ulo 3. Migre seu Aplicat ivo
$ EAP_HOME/bin/jboss-cli.sh --connect -controller=192.168.0.14
$ Connected to domain controller at 192.168.0.14
B. Insira a seguinte linha de comando para o Windows:
C:\>EAP_HOME\bin\jboss-cli.bat --connect -controller=192.168.0.14
C:\> Connected to domain controller at
192.168.0.14
iv. Ad icio n e o g ru p o d e servid o r mai n-server.
[domain@ 192.168.0.14:9999 /] /server-group=mainserver-group:add(profile="ha",socket-bindinggroup="ha-sockets")
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}
v. C rie u m servid o r n o mead o server-o ne e ad icio n e- o ao g ru p o d o
servid o r mai n-server.
[domain@ 192.168.0.14:9999 /]
/host=station14Host2/server-config=serverone:add(group=main-server-group,auto-start=false)
{
"outcome" => "success",
"result" => undefined
}
vi. C o n f ig u re o JVM p ara o g ru p o d o servid o r mai n-server.
[domain@ 192.168.0.14:9999 /] /server-group=mainserver-group/jvm=default:add(heap-size=64m,max-heapsize=512m)
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}
vii. C rie u m servid o r n o mead o server-two , co lo q u e- o n u m g ru p o d e
servid o r sep arad o e co n f ig u re a p o rt a d e d eslo camen t o p ara 100.
[domain@ 192.168.0.14:9999 /]
/host=station14Host2/server-config=servertwo:add(group=distinct2,socket-binding-portoffset=100)
67
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
{
"outcome" => "success",
"result" => undefined
}
B. H ab ilit e o clu st erin g ed it an d o man u almen t e o s arq u ivo s d e
co n f ig u ração d o servid o r.
i. In t erro mp a o servid o r d o JB o ss En t erp rise Ap p licat io n
Plat af o rm.
Importante
Você deve interromper o servidor antes de editar o arquivo de
configuração do servidor para que sua alteração seja persistida na
iniciação do servidor.
ii. Ab ra o arq u ivo d e co n f ig u ração d o mai n. xml p ara ed ição
D etermine um grupo de servidor para uso do seu perfil ha e grupo binding
de socket ha-so ckets conforme abaixo:
​< server-groups>
​ <server-group name="main-server-group"
profile="ha">
​
<jvm name="default">
​
<heap size="64m" max-size="512m"/>
​
</jvm>
​
<socket-binding-group ref="ha-sockets"/>
​ </server-group>
​< /server-groups>
iii. Ab ra o arq u ivo d e co n f ig u ração ho st. xml p ara ed ição
Modifique o arquivo conforme o seguinte:
​< servers>
​ <server name="server-one" group="main-server-group"
auto-start="false"/>
​ <server name="server-two" group="distinct2">
​
<socket-bindings port-offset="100"/>
​ </server>
​< servers>
iv. In icie o servid o r.
A. D igite EAP_HOME/bi n/d o mai n. sh para o Linux
68
⁠Capít ulo 3. Migre seu Aplicat ivo
B. D igite EAP_HOME\bi n\d o mai n. bat para o Microsoft Windows
b. At ivação d o clu st er p ara servid o res au t ô n o mo s
Para ativar o cluster para servidores autônomos, inicie o servidor usando o nome do
nó e o arquivo da configuração stand al o ne-ha. xml conforme abaixo:
A. D igite EAP_HOME/bi n/stand al o ne. sh --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= UNIQUE_NODE_NAME para Linux
B. D igite EAP_HOME\bi n\stand al o ne. bat --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= UNIQUE_NODE_NAME para Microsoft Windows
Nota
Configure o arquivo stand al o ne-ha. xml para cada instância do servidor efetuar o
bind numa interface separada, com o objetivo de evitar conflitos quando executando
múltiplos servidores numa máquina. Alternativamente, você pode iniciar as instâncias
do servidor subsequentes com uma porta de deslocamento usando o argumento
conforme a seguinte linha de comando: -D jbo ss. so cket. bi nd i ng . po rto ffset= 10 0 .
3. Imp lan t ação d o ap licat ivo ao s servid o res
Caso você use o Maven para implantar seu aplicativo, use o seguinte comando Maven para
implantar o servidor rodando nas portas default:
mvn cl ean i nstal l jbo ss-as: d epl o y
Para implantar os servidores adicionais, passe o nome do servidor e o número da porta com
a linha de comando:
mvn cl ean packag e jbo ss-as: d epl o y -D d epl o y. ho stname= l o cal ho st D d epl o y. po rt= 10 0 9 9
Reportar um erro
3.2.8. Alt erações do Desenvolviment o do est ilo de Serviço
3.2 .8 .1 . At ualização do s Aplicat ivo s que usam as Im plant açõ e s de e st ilo de Se rviço
Su mário
Embora o JBoss Enterprise Application Plataform 6 não use mais os descritores de estilo de serviço,
o contêiner suporta essas implantações de estilo de serviço sem alteração quando possível. Isto
significa que se você usar descritores de implantação jbo ss-servi ce. xml ou jbo ssbeans. xml em seu aplicativo do JBoss Enterprise Application Plataform 5.x, eles devem ser
executados com pouca ou sem nenhuma modificação no JBoss Enterprise Application Plataform 6.
Você pode continuar a empacotar os arquivos no EAR ou SAR, ou você pode substituir os arquivos
diretamente no diretório de implantações. Caso você esteja executando um servidor autônomo, o
diretório de implantações encontra-se no: EAP_HOME/stand al o ne/d epl o yments/. Caso você
esteja executando um storage domain, a pasta de implantações encontra-se localizada no
EAP_HOME/d o mai n/d epl o yments/.
Reportar um erro
69
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
3.2.9. Alt erações da Invocação Remot a
3.2 .9 .1 . Migração do s Aplicat ivo s Im plant ado s do JBo ss Ent e rprise Applicat io n
Plat afo rm 5 que re aliza Invo caçõ e s Re m o t as ao JBo ss Ent e rprise Applicat io n
Plat afo rm 6
Su mário
Existem duas maneiras de tornar as invocações remotas ao servidor no JBoss Enterprise
Application Plataform 6:
Você pode usar o novo API do cliente EJB específico do JBoss para realizar a invocação.
Você pode usar o JND I para pesquisar um proxy para seu bean e invocar no proxy retornado.
Essa seção cobre a opção 2: alterações de codificação requeridas para os clientes que usam o
JND I.
No JBoss Enterprise Application Plataform 5, a interface remota do EJB foi limitada ao JND I, por
default, sob o nome " ejbName/local" para interfaces locais e " ejbName/remote" para interfaces
remotas. O aplicativo do cliente pesquisa então o bean usando o " ejbName/remote" .
No JBoss Enterprise Application Plataform 6, você pode usar o ejb: NAMESPACE_NAME para
acesso remoto ao EJBs com a seguinte sintaxe: Para beans stateless:
​e jb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fullyqualified-classname-of-the-remote-interface>
Para beans stateful:
​e jb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fullyqualified-classname-of-the-remote-interface>?stateful
Os valores a serem substituídos na sintaxe acima são:
<app-name> - o nome do aplicativo dos EJBs implantados. Isto é tipicamente o nome ear sem o
sufixo .ear, no entanto, o nome pode ser substituído no arquivo application.xml. Caso o
aplicativo não seja implantado com um .ear, esse valor é uma sequência vazia. Vamos assumir
que esta amostra não estava implantada como um EAR.
<mo d ul e-name> - o nome do módulo dos EJBs implantados no servidor. Isto é tipicamente o
nome jar da implantação EJB, sem o sufixo .jar, mas pode ser substituído usando o ejb-jar.xml.
Nessa amostra, assuma que os EJBs foram implantados num jboss-as-ejb-remote-app.jar, de
forma que o nome do módulo é jboss-as-ejb-remote-app.
<d i sti nct-name> - é um nome distinto opcional para o EJB. Essa amostra não usa um nome
distinto, portanto usa uma sequência vazia.
<bean-name> - por default é um nome de classe simples da classe de implantação do bean.
<ful l y-q ual i fi ed -cl assname-o f-the-remo te-i nterface> - o nome da classe
inteiramente qualificado de visualização remota.
At u aliz ação d o có d ig o d o clien t e
70
⁠Capít ulo 3. Migre seu Aplicat ivo
At u aliz ação d o có d ig o d o clien t e
Assuma que você implantou o seguinte EJB stateless a um servidor do JBoss Enterprise Application
Plataform 6. Perceba que isto o expõe uma visualização remota para o bean.
​@ Stateless
​@ Remote(RemoteCalculator.class)
​p ublic class CalculatorBean implements RemoteCalculator {
​
​
@ Override
public int add(int a, int b) {
return a + b;
}
​
​
​
​
​
@ Override
public int subtract(int a, int b) {
return a - b;
}
​
​
​
​}
No JBoss Enterprise Application Plataform 5, a pesquisa EJB do cliente e a invocação foi codificada
como o seguinte:
​I nitialContext ctx = new InitialContext();
​R emoteCalculator calculator = (RemoteCalculator)
ctx.lookup("CalculatorBean/remote");
​i nt a = 204;
​i nt b = 340;
​i nt sum = calculator.add(a, b);
No JBoss Enterprise Application Plataform 6, a pesquisa do cliente e a invocação com o uso da
informação descrita acima, é codificada como o seguinte:
​final Hashtable jndiProperties = new Hashtable();
​j ndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
​final Context context = new InitialContext(jndiProperties);
​final String appName = "";
​final String moduleName = "jboss-as-ejb-remote-app";
​final String distinctName = "";
​final String beanName = CalculatorBean.class.getSimpleName();
​final String viewClassName = RemoteCalculator.class.getName();
​final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator)
context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + viewClassName);
​
​i nt a = 204;
​i nt b = 340;
​i nt sum = statelessRemoteCalculator.add(a, b);
Caso o seu cliente estiver acessando um EJB stateful, você deve anexar " ?stateful" ao final da
pesquisa do contexto como abaixo:
71
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator)
context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + viewClassName + "?stateful")
Uma amostra de trabalho completa, incluindo ambos código do cliente e servidor pode ser
encontrada nas Inicializações Rápidas. Para maiores informações, consulte Review the Quickstart
Tutorials no capítulo Get Started Developing Applications do Development Guide para o JBoss Enterprise
Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Para maiores informações sobre as invocações remotas usando o JND I, refira-se ao Invoke a
Session Bean Remotely using JNDI no capítulo Enterprise JavaBeans do Development Guide para o
JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar um erro
3.2 .9 .2 . Invo que o Be an de Se ssão Re m o t am e nt e usando o JNDI
Essa tarefa descreve como adicionar e suportar um cliente remoto para a invocação dos beans de
sessão usando o JND I. Essa tarefa assume que o projeto está sendo construído usando o Maven.
A inicialização rápida ejb-remo te contém os projetos Maven operantes que demostram essa
funcionalidade. A inicialização rápida contém projetos para ambos beans de sessão para
implantação e ao cliente remoto.
Essa tarefa assume que os beans de sessão não requerem autenticação.
Pré- req u isit o s
Os seguintes pré-requisitos devem satisfazer o seguinte antes da inicialização:
Você deve possuir um projeto Maven criado e pronto para uso.
Configuração para o repositório Maven do JBoss Enterprise Application Plataform 6 já ter sido
adicionada.
Os beans de sessão que você deseja invocar já terem sido implantados.
Os beans de sessão implantados devem implantar interfaces comerciais.
As interfaces comerciais remotas dos beans de sessão estão disponíveis como uma dependência
Maven. Caso as interfaces comerciais remotas estiverem ainda disponíveis como um arquivo
JAR, é recomendável adicionar o JAR ao seu repositório como um artefato. Refira-se à
documentação Maven para as metas i nstal l : i nstal l -fi l e como orientação,
http://maven.apache.org/plugins/maven-install-plugin/usage.html
Você precisa saber do hostname e a porta JND I do servidor hosting dos beans de sessão.
Você deverá configurar o projeto corretamente com o objetivo de invocar um bean de sessão de um
cliente remoto.
Pro ced imen t o 3.24 . Ad ição d a C o n f ig u ração d o Pro jet o Maven p ara a In vo cação R emo t a
d o s B ean s d e Sessão
1. Ad icio n e as d ep en d ên cias d o p ro jet o so licit ad as
72
⁠Capít ulo 3. Migre seu Aplicat ivo
O po m. xml para o projeto deve ser atualizado para incluir as dependências necessárias.
2. Ad icio n e o arq u ivo jbo ss-ejb-cl i ent. pro perti es
O API do cliente JBoss EJB espera encontrar um arquivo na raiz do projeto nomeado
jbo ss-ejb-cl i ent. pro perti es que contém a informação da conexão para o serviço
JND I. Adicione este arquivo ao diretório src/mai n/reso urces/ de seu projeto com o
seguinte conteúdo.
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABL
ED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POL
ICY_NOANONYMOUS=false
Altere o portal e o nome do host para coincidir com o seu servidor. O 4 4 4 7 é o número de
porta default. Configure a linha SSL_ENABLED para true e descomente as linhas
SSL_ST AR T T LS. A interface remota no contêiner suporta as conexões com e sem segurança
usando a mesma porta.
3. Ad icio n e d ep en d ên cias p ara as in t erf aces co merciais
Adicione as dependências Maven ao po m. xml para interfaces comerciais remotas dos
beans de sessão.
​< dependency>
​
<groupId>org.jboss.as.quickstarts</groupId>
​
<artifactId>jboss-as-ejb-remote-server-side</artifactId>
​
<type>ejb-client</type>
​
<version>${project.version}</version>
​< /dependency>
Agora que o projeto já foi configurado corretamente, você pode adicionar o código de acesso e
invocar os beans de sessão.
Pro ced imen t o 3.25. O b t en ção d e u m Pro xy B ean u san d o o JN D I e Mét o d o s d e In vo cação
d o B ean
1. Man u seia as exceçõ es ch ecad as
Os métodos usados no seguinte código (Ini ti al C o ntext() e l o o kup()) possuem uma
exceção de checagem do tipo javax. nami ng . Nami ng Excepti o n. Essas chamadas de
método devem tanto ser inseridas num bloco de tentativa/captura que captura o
Nami ng Excepti o n ou num método que é declarado ao lançar o Nami ng Excepti o n. A
inicialização rápida ejb-remo te usa a segunda técnica.
2. C riação d o C o n t ext o JN D I
O objetivo do Contexto JND I fornece o mecanismo de solicitação de recursos a partir do
servidor. Crie um contexto JND I usando o seguinte código:
73
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​final Hashtable jndiProperties = new Hashtable();
​j ndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
​final Context context = new InitialContext(jndiProperties);
As propriedades de conexão para o serviço JND I são lidas a partir do arquivo jbo ss-ejbcl i ent. pro perti es.
3. U se o mét o d o lo o ku p ( ) d o C o n t ext p JN D I p ara o b t er u m p ro xy d e b ean
Invoque o método l o o kup() do proxy do bean e passe-o ao nome JND I do bean de sessão
que você requer. Isto retornará um objeto que deve ser convertido ao tipo de interface
comercial remota que contém os métodos que você deseje invocar.
​final RemoteCalculator statelessRemoteCalculator =
(RemoteCalculator) context.lookup(
​
"ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" +
​
RemoteCalculator.class.getName());
Os nomes do JND I do bean de sessão são definidos usando a síntese especial.
4. Mét o d o s d e In vo cação
Agora que você possui um objeto de bean de proxy você pode invocar qualquer um dos
métodos contidos na interface comercial remota.
​i nt a = 204;
​i nt b = 340;
​S ystem.out.println("Adding " + a + " and " + b + " via the remote
stateless calculator deployed on the server");
​i nt sum = statelessRemoteCalculator.add(a, b);
​S ystem.out.println("Remote calculator returned sum = " + sum);
O bean passa a solicitação de invocação do método ao bean de sessão no servidor, onde
isto é executado. O resultado é retornado ao bean do proxy que então o retorna ao
chamador. A comunicação entre o bean de proxy e o bean de sessão remota é transparente
ao chamador.
Agora você deve estar apto a configurar o projeto Maven para suportar a invocação dos beans de
sessão num servidor remoto e escrever a invocação do código nos métodos de beans de sessão
usando o bean proxy restaurado a partir do servidor usando o JND I.
Reportar um erro
3.2.10. Alt erações EJB 2.x
3.2 .1 0 .1 . At ualização do s Aplicat ivo s que usam o EJB 2 .x
O JBoss Enterprise Apllication Plataform 6 fornece suporte para o EJB 2.x. No entanto, você precisa
realizar algumas modificações no código e iniciar o servidor com o perfil completo.
Pro ced imen t o 3.26 . Execu t e o EJB 2.x n o JB o ss En t erp rise Ap p licat io n Plat af o rm 6
74
⁠Capít ulo 3. Migre seu Aplicat ivo
1. Mo d if iq u e o C ó d ig o em u so p ara as N o vas R eg ras d o JN D I N amesp ace
A partir do EJB 3.0, você deverá usar o prefixo completo do JND I com o EJB 2.x. Consulte a
Seção 3.1.8.1, “ Atualização dos Nomes JND I Namespace do Aplicativo” para maiores
informações sobre as amostras de regras e códigos do JND I.
As amostras que apresentam como atualizar os JND I namespaces a partir das liberações
antigas podem ser encontradas na Seção 3.1.8.5, “ Amostras do JND I Namespaces nas
Versões Anteriores e como elas são especificadas no JBoss Enterprise Application
Plataform.” .
2. Su b st it u a o s In t ercep t o res d o JB o ss AO P
O JBoss AOP (Aspect Oriented Programming - Programação Orientada do Aspecto) não está
mais incluído no JBoss Enterprise Application Plataform 6. Nas liberações anteriores, o
JBoss AOP era usado pelo contêiner EJB. No entanto, no JBoss Enterprise Application
Plataform 6, o contêiner EJB usa um novo mecanismo. Caso o seu aplicativo usar o JBoss
AOP, você precisará modificar o seu código do aplicativo como abaixo.
As configurações EJB3 padrões que eram realizadas no arquivo ejb3-i ntercepto rsao p. xml são agora realizadas no arquivo de configuração. Isto é um arquivo
stand al o ne/co nfi g urati o n/stand al o ne-ful l . xml para o servidor autônomo.
Caso você esteja executando o seu servidor num storage domain, este é o arquivo
d o mai n/co nfi g urati o n/d o mai n. xml .
Os aplicativos que integram os interceptores na camada EJB devem ser redesignados
para uso dos interceptores EJB3 e CD I. Os interceptores ao lado do servidor podem ser
alterados para os interceptores EJB3.
3. Mo d if icação d o D escrit o r d o Arq u ivo jbo ss-web. xml
Modifique o <jnd i -name> para cada <ejb-ref> usar o novo formato de observação
inteiramente qualificado JND I.
4. Su b st it u a o arq u ivo d o d escrit o r d a imp lan t ação jbo ss. xml
O descritor da implantação jbo ss-ejb3. xml substitui o descritor da implantação
jbo ss. xml para substituição e adição à recursos fornecidos pelo Java Enterprise Edition
(EE - Edição do Java Enterprise) definidos no descritor da implantação ejb-jar. xml . O
novo arquivo é incompatível com o jbo ss. xml e o jbo ss. xml é agora ignorado nas
implantações.
5. In icie o Servid o r co m o s Perf is C o mp let o s
O EJB 2.x requer o Perfil Completo da Edição do Java Enterprise 6. Passe o argumento -c
stand al o ne-ful l . xml à linha de comando quando iniciando o servidor, com o objetivo
de iniciar o JBoss Enterprise Application Plataform 6 com o perfil completo.
Reportar um erro
3.2.11. Aplicat ivos Seam 2.2 de Migração
3.2 .1 1 .1 . Migração do s Arquivo s Se am 2 .2 para o JBo ss Ent e rprise Applicat io n
Plat afo rm 6
75
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Visão G eral
Quando você migrar um aplicativo Seam 2.2, você precisa configurar a fonte de dados e especificar
quaisquer dependências de módulo. Você precisa determinar também se o aplicativo possui
quaisquer dependências em arquivos que não lançam o JBoss Enterprise Application Plataform 6 e
copiar quaisquer JARs dependentes no diretório l i b/ do aplicativo.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 3.27. Mig ração d o s Arq u ivo s Seam 2.2
1. At u aliz ação d a co n f ig u ração d a f o n t e d e d ad o s
Algumas das amostras Seam 2.2 usam a fonte de dados JD BC default nomeada
java: /Exampl eD S. A fonte de dados default foi alterada no JBoss Enterprise Application
Plataform 6 para java: jbo ss/d ataso urces/Exampl eD S. Caso seu aplicativo usar a
fonte de dados da amostra, você pode realizar o seguinte:
Caso você deseje usar um banco de dados de amostra que lança o JBoss Enterprise
Application Plataform 6, modifique o arquivo MET A-INF/persi stence. xml para
substituir o elemento jta-d ata-so urce existente com o nome JND I da fonte de dados
do banco de dados de amostra:
​< !-- <jta-data-source>java:/ExampleDS</jta-data-source> -->
​< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
Caso você preferir manter um banco de dados existente, você pode adicionar a definição
da fonte de dados ao arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do
servidor para a sua alteração ser persistente na iniciação do servidor.
A seguinte definição é uma cópia da fonte de dados HSQL default definida no JBoss
Enterprise Application Plataform 6:
​< datasource name="ExampleDS" jndi-name="java:/ExampleDS"
enabled="true" jta="true" use-java-context="true" useccm="true">
76
⁠Capít ulo 3. Migre seu Aplicat ivo
​
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=1</connection-url>
​
<driver>h2</driver>
​
<security>
​
<user-name>sa</user-name>
​
<password>sa</password>
​
</security>
​< /datasource>
Você pode também adicionar a definição da fonte de dados usando a interface da linha
de comando jbossadmin. Segue abaixo uma amostra da sintaxe que você deve usar
para adicionar a fonte de dados. O " \" no final da linha indica a continuação do
comando na linha seguinte.
Exemp lo 3.1. Amo st ra d a sin t axe p ara ad ição d a d ef in ição d a f o n t e d e d ad o s
$ EAP_HOME/bin/jboss-cli --connect
[standalone@ localhost:9999 /] data-source add --name=ExampleDS
--jndi-name=java:/ExampleDS \
--connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 -driver-name=h2 \
--user-name=sa --password=sa
Para maiores informações de como configurar a fonte de dados, consulte a Seção 3.1.6.2,
“ Atualização da Configuração da Fonte de D ados” .
2. Ad ição d e q u aisq u er d ep en d ên cias req u erid as
Uma vez que os aplicativos Seam 2.2 usam o JSF 1.2, você precisa adicionar dependências
para os módulos JSF 1.2 e excluir os módulos JSF 2.0. Para completar este procedimento,
você precisa criar um arquivo jbo ss-d epl o yment-structure. xml no diretório MET AINF/ do EAR que contém os seguintes dados:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
77
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Caso seu aplicativo usar frameworks de registro em log de terceiros, você precisa adicionar
as dependências descritas na: Seção 3.1.4.1, “ Modificação das D ependências de Registro
em Log” .
3. C aso o seu ap licat ivo u sar o H ib ern at e 3.x, p rimeiro t en t e execu t ar o ap licat ivo
u san d o as b ib lio t ecas d o H ib ern at e 4
Caso o seu aplicativo não usar o Contexto Persistente Gerenciado Seam, busca Hibernate,
validação ou quaisquer outros recursos com o Hibernate 4, você pode estar apto a executar
com as bibliotecas do Hibernate 4. No entanto, caso você observar o
C l assNo tFo und Excepti o ns ou C l assC astExcepti o ns que direcionam às classes
Hibernate ou verificar erros similares aos seguintes, você terá que seguir as instruções da
próxima etapa e modificar o seu aplicativo para uso das bibliotecas do Hibernate 3.3.
Caused by: java.lang.LinkageError: loader constraint
violation in interface itable initialization: when resolving method
"org.jboss.seam.persistence.HibernateSessionProxy.getSession(Lorg/hi
bernate/EntityMode;)Lorg/hibernate/Session;" the class loader
(instance of org/jboss/modules/ModuleClassLoader) of the current
class, org/jboss/seam/persistence/HibernateSessionProxy, and the
class loader (instance of org/jboss/modules/ModuleClassLoader) for
interface org/hibernate/Session have different Class objects for the
type org/hibernate/Session used in the signature
4. C ó p ia d o s arq u ivo s d ep en d en t es a p art ir d o s f ramewo rks ext ern o s o u d e o u t ras
lo caliz açõ es
Caso o seu aplicativo usar o Hibernate 3.x e você não estiver apto a usar o Hibernate 4 com
sucesso no seu aplicativo, você precisará usar uma cópia do Hibernate 3-x JARs no
diretório /l i b e excluir o módulo Hibernate na seção de implantações do MET AINF/jbo ss-d epl o yment-structure. xml , conforme o seguinte:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<exclusions>
​
<module name="org.hibernate"/>
​
</exclusions>
​ <deployment>
​< /jboss-deployment-structure>
Não existe nenhuma etapa adicional que você deve realizar quando você aplicar o bundle
no seu aplicativo. Consulte a Seção 3.2.2.2, “ Configuração das Alterações para Aplicativos
que usam o Hibernate e o JPA” para maiores informações.
5. D ep u ração e reso lu ção d o s erro s Seam 2.2 JN D I
Quando você migrar o aplicativo Seam 2.2, você poderá ver erros
javax. nami ng . NameNo tFo und Excepti o n no log conforme o seguinte:
javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not
found in context ''
78
⁠Capít ulo 3. Migre seu Aplicat ivo
Caso você não deseje modificar as pesquisas JND I através do código, você pode modificar
o arquivo co mpo nents. xml do aplicativo, conforme abaixo:
a. Su b st it u ição d o elemen t o co re- in it exist en t e
Primeiro, você pode substituir o elemento core-init existente, conforme abaixo:
​< !-- <core:init jndi-pattern="jboss-seam-booking/#
{ejbName}/local" debug="true" distributable="false"/>
​< core:init debug="true" distributable="false"/>
-->
b. En co n t re as men sag en s IN FO JN D I b in d in g IN FO n o lo g d o servid o r
A seguir, encontre as mensagens INFO binding JND I que são emitidas no log do
servidor quando o aplicativo é implantado. As mensages binding JNID I devem
parecer-se com o seguinte:
INFO
org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploym
entUnitProcessor (MSC service thread 1-1) JNDI bindings for
session bean
named AuthenticatorAction in deployment unit subdeployment
"jboss-seam-booking.jar" of deployment "jboss-seambooking.ear" are as follows:
java:global/jboss-seam-booking/jboss-seambooking.jar/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:app/jboss-seambooking.jar/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:module/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:global/jboss-seam-booking/jboss-seambooking.jar/AuthenticatorAction
java:app/jboss-seam-booking.jar/AuthenticatorAction
java:module/AuthenticatorAction
c. Ad ição d o s elemen t o s d o co mp o n en t e
Para cada mensagem INFO binding JNID I, adicione um elemento co mpo nent
correspondente ao arquivo co mpo nents. xml :
​< component
class="org.jboss.seam.example.booking.AuthenticatorAction"
jndi-name="java:app/jboss-seambooking.jar/AuthenticatorAction" />
Para maiores informações sobre como depurar e resolver os problemas de migração,
consulte a Seção 4.2.1, “ D epuração e Solução dos Problemas de Migração” .
Para uma lista de problemas de migração conhecidos com os arquivos, consulte a
Seção 3.2.11.2, “ Problemas de Migração do Seam 2.2 Archive” .
R esu lt ad o
79
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
O arquivo Seam 2.2 é implantado e executado com êxito no JBoss Enterprise Application Plataform
6.
Reportar um erro
3.2 .1 1 .2 . Pro ble m as de Migração do Se am 2 .2 Archive
O Seam 2.2 D ro o ls e Java 7 n ão são co mp at íveis
O Seam 2.2 D rools e Java 7 são incompatíveis e falham com um
org.drools.RuntimeD roolsException: o valor '1.7' não é um erro de nível de linguagem
válido.
O Seam 2.2.5 d et ermin ad o co mo cg l i b. jar n ão p ermit e o f u n cio n amen t o d a
amo st ra Sp rin g
Quando a amostra Spring estiver executando usando o cg l i b. jar assinado que lançou
o Seam 2.2.5 no JBoss Enterprise Application Plataform 5, ocorre uma falha com a
seguinte causa:
java.lang.SecurityException: class
"org.jboss.seam.example.spring.UserService$$EnhancerByCGLIB$$7d6c3
d12"'s signer information does not match signer information of
other classes in the same package
A solução para este problema é sair do cg l i b. jar, conforme abaixo:
zi p -d $SEAM_D IR /l i b/cg l i b. jar MET A-INF/JBO SSC O D \*
A amo st ra Seamb ay f alh a co m o No tLo g g ed InExcepti o n
A causa deste problema é o cabeçalho da mensagem estar nulo enquanto processando a
mensagem no SOAPRequestHandler e, consequentemente, a ID de conversação não ser
enviada.
Para resolver esse problema substitua o
o rg . jbo ss. seam. webservi ce. SO AP R eq uestHand l er. hand l eO utbo und ,
conforme descrito no https://issues.jboss.org/browse/JBPAPP-8376.
A amo st ra Seamb ay f alh a co m o Unsuppo rted O perati o nExcepti o n: n en h u ma
t ran sação
Este problema é causado pelas alterações no nome JND I do UserTransaction no JBoss
Enterprise Application Plataform 6.
A solução para este problema é substituir o
o rg . jbo ss. seam. transacti o n. T ransacti o n. g etUserT ransacti o n, conforme
descrito no https://issues.jboss.org/browse/JBPAPP-8322.
A amo st ra Seamb ay f alh a co m o No tLo g g ed InExcepti o n
A causa deste problema é o cabeçalho da mensagem estar nulo enquanto processando a
mensagem no SOAPRequestHandler e, consequentemente, a ID de conversação não ser
enviada.
Para resolver esse problema substitua o
o rg . jbo ss. seam. webservi ce. SO AP R eq uestHand l er. hand l eO utbo und ,
conforme descrito no https://issues.jboss.org/browse/JBPAPP-8376.
80
⁠Capít ulo 3. Migre seu Aplicat ivo
A amo st ra d e t aref as lan ça o o rg . jbo ss. resteasy. spi . Unhand l ed Excepti o n: n ão
f o i p o ssível can celar o marsh all d a men sag em so licit ad a
Este problema é causado pelo incompatibilidade entre o seam-resteasy-2.2.5 incluído no
JBoss Enterprise Application Plataform 5.1.2) e o RESTEasy 2.3.1.GA incluído no JBoss
Enterprise Application Plataform 6.
Para solucionar este problema use jbo ss-d epl o yment-structure. xml para excluir
resteasy-jaxrs, resteasy-jettison-provider e resteasy-jaxb-provider da implantação principal
e resteasy-jaxrs, resteasy-jettison-provider, resteasy-jaxb-provider e resteasy-yaml-provider
do jbo ss-seam-tasks. war, conforme descrito no
https://issues.jboss.org/browse/JBPAPP-8315. Então, é necessário incluir as bibliotecas
RESTEasy empacotadas com o Seam 2.2 no EAR.
D ead lo ck en t re o o rg . jbo ss. seam. co re. Synchro ni zati o nIntercepto r e b lo q u eio
EJB d a in st ân cia d e co mp o n en t e st at ef u l d u ran t e u ma so licit ação AJAX
Uma página de erro " Causado pelo javax.servlet.ServletException" é exibida com a
mensagem: " javax.el.ELException: /main.xhtml @36,71 value=" #{hotelSearch.pageSize}" :
org.jboss.seam.core.LockTimeoutException: não foi possível adquirir o bloqueio no
componente @Synchronized hotelSearch" ou com mensagem de erro similar.
O problema é que o Seam 2 realiza o próprio bloqueio fora do bloqueio bean de sessão
stateful (SFSB) e com escopo diferente. Isto significa que se um thread acessar um EJB
duas vezes na mesma transação, após a primeira invocação isto terá o SFSB bloqueado,
mas o seam não será bloqueado. Um segundo thread pode adquirir o bloqueio seam, que
então atingirá o bloqueio EJB e entrará em espera. Quando o primeiro thread tentar sua
segunda invocação, ele bloqueará no deadlock e interceptor seam 2. No Java EE 5, os
EJBs lançariam uma exceção imediatamente no acesso atual. Esse comportamento foi
alterado no Java EE 6.
Para solucionar este problema, adicione o @AccessTimeout(0) ao EJB. Isto fará com que o
C o ncurrentAccessExcepti o n seja lançado imediatamente quando esta situação
ocorrer.
A amo st ra D vd st o re cria f alh as o rd en ad as co m o
javax. ejb. EJBT ransacti o nR o l l ed backExcepti o n
A amostra do dvdstore display o seguinte erro:
JBAS011437: Found extended persistence context in SFSB invocation
call stack but that cannot be used because the transaction already
has a transactional context associated with it. This can be
avoided by changing application code, either eliminate the
extended persistence context or the transactional context. See
JPA spec 2.0 section 7.6.3.1.
Este problema é devido às alterações na especificação JPA.
A solução para este problema é alterar o contexto de persistência para transacti o nal
no C hecko utActi o n e classes Sho wO rd ersActi o n e usar a operação de mesclagem do
gerenciador de entidade nos métodos cancel O rd er e d etai l O rd er.
O p ro ved o r d o JB o ss C ach e Seam C ach e n ão p o d e ser u sad o n o JB o ss En t erp rise
Ap p licat io n Plat af o rm 6
O JBoss Cache não é suportado no JBoss Enteprise Application Plataform 6. Isto leva o
provedor do JBoss Cache Seam a falhar no aplicativo Seam do servidor do aplicativo
com:
81
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
com:
java.lang.NoClassDefFoundError:
org/jboss/util/xml/JBossEntityResolver
.
O H ib ern at e 3.3.x Au t o scan p ara o p ro b lema d as en t id ad es JPA co m a JB o ss
En t erp rise Ap licat io n Plat af o rm 6
A correção para este problema é listar todas as classes no arquivo persistence.xml
manualmente. Por exemplo:
​< ?xml version="1.0" encoding="UTF-8"?>
​< persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">
​
<persistence-unit name="example_pu">
​
<description>Hibernate 3 Persistence Unit.</description>
​
<jta-data-source>java:jboss/datasources/ExampleDS</jtadata-source>
​
<properties>
​
<property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />
​
</properties>
​
<class>com.acme.Foo</class>
​
<class>com.acme.Bar</class>
​
</persistence-unit>
​< /persistence>
Reportar um erro
3.2.12. Aplicat ivos Spring de Migração
3.2 .1 2 .1 . Aplicat ivo s Spring de Migração
A informação a respeito da migração dos aplicativos Spring pode ser encontrada na documentação
JBoss Web Framework Kit. Você pode baixar este documento a partir do Portal do Cliente no
https://access.redhat.com. Clique em K n o wled g e → Pro d u ct D o cu men t at io n , encontre o JBoss
Enterprise Middleware e clique no link JBoss Web Framework Kit.
Reportar um erro
3.2.13. Out ras Alt erações que Afet am a Migração
3.2 .1 3.1 . Out ras alt e raçõ e s que po de m afe t ar sua Migração
Segue abaixo uma lista de alterações do JBoss Enterprise Application Plataform 6 que podem afetar
suas etapas de migração.
Seção 3.2.13.2, “ Alteração do Nome Maven Plug-in”
Seção 3.2.13.3, “ Modificação dos Aplicativos do Cliente”
Reportar um erro
82
⁠Capít ulo 3. Migre seu Aplicat ivo
3.2 .1 3.2 . Alt e ração do No m e Mave n Plug-in
O jbo ss-maven-pl ug i n não foi atualizado e não funciona no JBoss Enterprise Application
Plataform 6. Você deve usar o o rg . jbo ss. as. pl ug i ns: jbo ss-as-maven-pl ug i n para
implantar ao diretório correto.
Reportar um erro
3.2 .1 3.3. Mo dificação do s Aplicat ivo s do Clie nt e
Caso deseje migrar um aplicativo de cliente que conectará ao JBoss Enterprise Application
Plataform 6, você deve estar ciente que o nome e a localização do JAR que agrupam as bibliotecas
dos clientes foram alterados. Esse JAR é agora nomeado jbo ss-cl i ent. jar e está localizado no
diretório JBOSS_HOME/bi n/cl i ent/. Isto substitui o JBOSS_HOME/cl i ent/jbo ssal l cl i ent. jar e contém todas as dependências requeridas ao conectar ao JBoss Enterprise
Application Plataform 6 a partir do cliente remoto.
Reportar um erro
83
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Capítulo 4. Ferramentas e Dicas
4 .1. Recursos para Assist i-lo com a Migração
4 .1.1. Recursos que podem assist i-lo em sua Migração
Segue abaixo uma lista de recursos que podem orientá-lo na migração de um aplicativo para o
JBoss Enterprise Application Plataform 6.
Ferramen t as
Existem diversas ferramentas que ajudam automaticamente algumas das alterações da
configuração. Consulte a Seção 4.1.2, “ Familiarize-se com as Ferramentas que podem
assisti-lo na Migração” para maiores informações.
D icas d e D ep u ração
Para uma lista das causas e resoluções de problemas e erros você poderá encontrar
enquanto migrando o seu aplicativo, consulte a Seção 4.2.1, “ D epuração e Solução dos
Problemas de Migração” .
Amo st ra d e Mig ração
Para amostras de aplicativos que foram migrados ao JBoss Enterprise Application
Plataform, consulte a Seção 4.3.1, “ Revise a Migração dos Aplicativos da Amostra” .
Reportar um erro
4 .1.2. Familiariz e-se com as Ferrament as que podem assist i-lo na Migração
Su mário
Existem algumas ferramentas que podem assisti-lo no processo de sua migração. Segue abaixo
uma lista dessas ferramentas juntamente com a descrição do que elas fazem.
T at t let ale
Você precisa encontrar e retificar as dependências do aplicativo com a mudança no
carregamento de classe modular. O Tattletale pode ajudá-lo a identificar os nomes do
módulo de dependência e gerar o XML da configuração para seu aplicativo.
Seção 4.1.3, “ Uso do Tattle para encontrar D ependências do Aplicativo”
Ferramen t a d e Mig ração Iro n Jacamar
No JBoss Enterprise Application Plataform 6, as fontes de dados e adaptadores de recurso
não são mais configurados em um arquivo separado. Eles estão apenas definidos no
arquivo de configuração do servidor e usam novos esquemas. A Ferramenta de Migração
IronJacamar pode ajudar a converter a configuração antiga em um formato esperado pelo
JBoss Enterprise Application Plataform 6.
Seção 4.1.6, “ Uso da Ferramenta IronJacamar para Migração da Fonte de D ados e
Configurações do Adaptador de Recurso”
Reportar um erro
84
⁠Capít ulo 4 . Ferrament as e Dicas
4 .1.3. Uso do T at t le para encont rar Dependências do Aplicat ivo
Su mário
D evido às alterações de carregamento de classe no JBoss Enterprise Application Plataform 6, você
poderá ver os traços do C l assNo tFo und Excepti o n ou C l assC astExcepti o n no log do Jboss
quando você migrar o seu aplicativo. Para resolver esses erros, você precisa encontrar os JARs que
contém as classes especificadas pelas exceções.
O Tattletale é uma excelente ferramenta de terceiros que escaneia recursivamente o seu aplicativo e
fornece relatórios detalhados sobre seu conteúdo. O Tattletale 1.2.0.Beta2 ou mais avançado
contém suporte adicional para orientação com o novo carregamento da classe de Módulos do
JBoss usados no JBoss Enterprise Application Plataform 6. O relatório do " JBoss EAP 6" do
Tattletale pode ser usado para identificar automaticamente e gerar os nomes do módulo de
dependência para inclusão de seu arquivo jbo ss-d epl o yment-structure. xml do aplicativo.
Pro ced imen t o 4 .1. In st alação e execu ção d o T at t let ale p ara en co n t rar d ep en d ên cias d o
ap licat ivo
1. Seção 4.1.4, “ D ownload e Instalação do Tattletale”
2. Seção 4.1.5, “ Criação e Revisão do Relatório Tattletale”
Nota
O Tattletale é uma ferramenta de terceiros e não é suportada como parte do JBoss Enterprise
Application Plataform 6. Leia o website http://www.jboss.org/tattletale para a documentação
mais recente de como instalar e usar o Tattletale.
Reportar um erro
4 .1.4 . Download e Inst alação do T at t let ale
Pro ced imen t o 4 .2.
1. Realize o download do Tattletale de versão 1.2.0.Beta2 ou mais recente a partir do
http://sourceforge.net/projects/jboss/files/JBoss% 20Tattletale.
2. D escomprima o arquivo ao diretório de sua escolha.
3. Modifique o arquivo T AT T LET ALE_HO ME/jbo ss-tattl etal e. pro perti es realizando o
seguinte:
a. Adicione o ee6 e as7 à propriedade pro fi l es.
profiles=java5, java6, ee6, as7
b. D escomente as propriedades scan e repo rts.
85
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Nota
O Tattletale é uma ferramenta de terceiros e não é suportada como parte do JBoss Enterprise
Application Plataform 6. Leia o website http://www.jboss.org/tattletale para a documentação
mais recente de como instalar e usar o Tattletale.
Reportar um erro
4 .1.5. Criação e Revisão do Relat ório T at t let ale
Pro ced imen t o 4 .3.
1. Crie um relatório Tattletale emitindo o comando: java -jar
TATTLETALE_HOME/tattl etal e. jarAPPLICATION_ARCHIVEOUTPUT_DIRECTORY
Por exemplo: java -jar tattl etal e-1. 2. 0 . Beta2/tattl etal e. jar
appl i cati o ns/jbo ss-seam-bo o ki ng . ear o utput-resul ts/
2. Num navegador, abra o arquivo OUTPUT_DIRECTORY/i nd ex. html e clique em " JBoss
EAP 6" na seção " Reports" .
a. A coluna na esquerda lista os arquivos usados pelo aplicativo. Clique no link
ARCHIVE_NAME para detalhes de visualização sobre o arquivo, tal como sua
localização, informação de manifesto e classes que isto contém.
b. O link jbo ss-d epl o yment-structure. xml na coluna da direita apresenta como
especificar a dependência do módulo para o arquivo nomeado na coluna da
esquerda. Clique neste link para verificar como definir a informação do módulo de
dependência da implantação para este arquivo.
Nota
O Tattletale é uma ferramenta de terceiros e não é suportado como parte do EAP 6. Para a
maioria da documentação sobre como instalar e usar o Tattletale, visite o website Tattletale
no http://www.jboss.org/tattletale.
Reportar um erro
4 .1.6. Uso da Ferrament a IronJacamar para Migração da Font e de Dados e
Configurações do Adapt ador de Recurso
Su mário
Nas versões anteriores do servidor do aplicativo, as fontes de dados e adaptadores de recurso eram
configurados e implantados usando um arquivo com sufixo *-d s. xml . A distribuição IronJacamar
1.1 contém uma ferramenta de migração que pode ser usada para converter esses arquivos de
configuração ao formato esperado pelo JBoss Enterprise Application Plataform 6. As ferramentas
analisam o arquivo de configuração da fonte a partir do lançamento anterior, e cria e grava a
configuração XML a um arquivo resultante num novo formato. Esse XML pode ser copiado e colado
86
⁠Capít ulo 4 . Ferrament as e Dicas
sob o subsistema no arquivo de configuração do servidor do JBoss Enterprise Application
Plataform 6. Essas ferramentas fazem o seu melhor trabalho para converter atributos e elementos
antigos em novo formato. No entanto, pode ser necessário realizar modificações adicionais ao
arquivo gerado.
Pro ced imen t o 4 .4 . In st alação e execu ção d a f erramen t a d e Mig ração Iro n Jacamar
1. Seção 4.1.7, “ D ownload e Instalação da Ferramenta de Migração IronJacamar”
2. Seção 4.1.8, “ Uso da Ferramenta de Migração IronJacamar para converter um Arquivo de
Configuração da Fonte de D ados”
3. Seção 4.1.9, “ Uso da Ferramenta IronJacamar para Converter um Arquivo de Configuração
do Adaptador de Recurso”
Nota
A ferramenta de Migração IronJacamar é uma ferramenta de terceiros e não é suportada como
parte do JBoss Enterprise Application Plataform 6. Para maiores informações sobre o
IronJacamar, consulte http://www.jboss.org/ironjacamar. Para maiores informações da
documentação mais recente de como instalar e usar essa ferramenta, consulte
http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration.
Reportar um erro
4 .1.7. Download e Inst alação da Ferrament a de Migração IronJacamar
Nota
A ferramenta de migração está apenas disponível na versão IronJacamar 1.1 ou superior.
Pro ced imen t o 4 .5.
1. Baixe o IronJacamar 1.1 ou distribuição ampla a partir do:
http://www.jboss.org/ironjacamar/downloads/
2. D escomprime o arquivo baixado num diretório de sua escolha.
3. Encontre o script conversor na distribuição IronJacamar.
O script Linux está localizado no: IRONJACAMAR_HOME/d o c/as/co nverter. sh
O arquivo em lote do Windows está localizado no:
IRONJACAMAR_HOME/d o c/as/co nverter. bat
87
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Nota
A ferramenta de Migração IronJacamar é uma ferramenta de terceiros e não é suportada como
parte do JBoss Enterprise Application Plataform 6. Para maiores informações sobre o
IronJacamar, consulte http://www.jboss.org/ironjacamar. Para maiores informações da
documentação mais recente de como instalar e usar essa ferramenta, consulte
http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration.
Reportar um erro
4 .1.8. Uso da Ferrament a de Migração IronJacamar para convert er um
Arquivo de Configuração da Font e de Dados
Pro ced imen t o 4 .6 .
1. Abra uma linha de comando e navegue ao diretório IRONJACAMAR_HOME/d o cs/as/.
2. Execute o script conversor digitando o seguinte comando:
No Linux: . /co nverter. sh -d s SOURCE_FILE TARGET_FILE
No Microsoft Windows: . /co nverter. bat -d s SOURCE_FILE TARGET_FILE
O SOURCE_FILE é o arquivo -ds.xml da fonte de dados do lançamento anterior. O
TARGET_FILE contém uma nova configuração.
Por exemplo, para converter o arquivo de configuração da fonte de dados jbo ss-seambo o ki ng -d s. xml localizado no diretório atual, você digitaria:
No Linux: . /co nverter. sh -d s jbo ss-seam-bo o ki ng -d s. xml newd ataso urce-co nfi g . xml
No Microsoft Windows: . /co nverter. bat -d s jbo ss-seam-bo o ki ng -d s. xml
new-d ataso urce-co nfi g . xml
Perceba que o parâmetro para a conversão da fonte de dados é -d s.
3. Copie o elemento <d ataso urce> a partir do arquivo de destino e cole-o no arquivo de
configuração do servidor sob o elemento <subsystem
xml ns= "urn: jbo ss: d o mai n: d ataso urces: 1. 0 "><d ataso urces>.
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do
servidor para que sua alteração seja persistida na inicialização do servidor.
Caso você esteja executando num storage domain, copie o XML no arquivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml .
Caso você esteja executando num servidor autônomo, copie o XML no arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .
4. Modificação do XML gerado ao novo arquivo de configuração.
88
⁠Capít ulo 4 . Ferrament as e Dicas
Segue abaixo uma amostra do arquivo de configuração da fonte de dados jbo ss-seambo o ki ng -d s. xml para a amostra do Seam 2.2 Booking que foi lançado com o JBoss
Enterprise Application Plataform 5.x:
​< ?xml version="1.0" encoding="UTF-8"?>
​< datasources>
​ <local-tx-datasource>
​
<jndi-name>bookingDatasource</jndi-name>
​
<connection-url>jdbc:hsqldb:.</connection-url>
​
<driver-class>org.hsqldb.jdbcDriver</driver-class>
​
<user-name>sa</user-name>
​
<password></password>
​ </local-tx-datasource>
​< /datasources>
Segue abaixo o arquivo de configuração que foi gerado pela execução do script conversor.
O arquivo gerado contém um elemento <d ri ver-cl ass>. A maneira preferida de definir a
classe do driver no JBoss Enterprise Application Plataform 6 é usar um elemento <d ri ver>.
Segue abaixo o XML resultando no arquivo de configuração do JBoss Enterprise
Application Plataform 6 com modificações para comentar o elemento <d ri ver-cl ass> e
adicionar o elemento <d ri ver>:
​< subsystem xmlns="urn:jboss:domain:datasources:1.0">
​ <datasources>
​
<datasource enabled="true" jndiname="java:jboss/datasources/bookingDatasource" jta="true"
​
pool-name="bookingDatasource" use-ccm="true" use-javacontext="true">
​
<connection-url>jdbc:hsqldb:.</connection-url>
​
<!-- Comment out the following driver-class element
​
since it is not the preferred way to define this.
​
<driver-class>org.hsqldb.jdbcDriver</driver-class>
->
​
<transaction-isolation>TRANSACTION_NONE</transactionisolation>
​
<pool>
​
<prefill>false</prefill>
​
<use-strict-min>false</use-strict-min>
​
<flush-strategy>FailingConnectionOnly</flush-strategy>
​
</pool>
​
<security>
​
<user-name>sa</user-name>
​
<password/>
​
</security>
​
<validation>
​
<validate-on-match>false</validate-on-match>
​
<background-validation>false</background-validation>
​
<use-fast-fail>false</use-fast-fail>
​
</validation>
​
<timeout/>
​
<statement>
​
<track-statements>false</track-statements>
​
</statement>
​
</datasource>
​
<drivers>
​
<!-- The following driver element was not in the
89
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
XML target file. It was created manually. -->
<driver name="h2" module="com.h2database.h2">
​
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xadatasource-class>
​
</driver>
​
</drivers>
​ </datasources>
​< /subsystem>
​
Nota
A ferramenta de Migração IronJacamar é uma ferramenta de terceiros e não é suportada como
parte do JBoss Enterprise Application Plataform 6. Para maiores informações a respeito do
IronJacamar, dirija-se ao http://www.jboss.org/ironjacamar. Para maiores informações de
como instalar e usar essa ferramenta, consulte
http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration.
Reportar um erro
4 .1.9. Uso da Ferrament a IronJacamar para Convert er um Arquivo de
Configuração do Adapt ador de Recurso
Pro ced imen t o 4 .7.
1. Abra uma linha de comando e navegue ao diretório IRONJACAMAR_HOME/d o cs/as/.
2. Execute o script conversor digitando o seguinte comando:
No Linux: . /co nverter. sh -ra SOURCE_FILE TARGET_FILE
No Microsoft Windows: . /co nverter. bat -ra SOURCE_FILE TARGET_FILE
O SOURCE_FILE é um arquivo -ds.xml adaptador de recurso do lançamento anterior. O
TARGET_FILE contém uma nova configuração.
Por exemplo, para converter o arquivo de configuração do adaptador de recurso
mttestad apter-d s. xml localizado no diretório atual, você digitaria:
No Linux: . /co nverter. sh -ra mttestad apter-d s. xml new-ad apterco nfi g . xml
No Microsoft Windows: . /co nverter. bat -ra mttestad apter-d s. xml newad apter-co nfi g . xml
Perceba que o parâmetro para a conversão do adaptador de recurso é -ra.
3. Copie todo o elemento <reso urce-ad apters> do arquivo de destino e cole-o no arquivo
de configuração sob o elemento <subsystem xml ns= "urn: jbo ss: d o mai n: reso urcead apters: 1. 0 ">
90
⁠Capít ulo 4 . Ferrament as e Dicas
Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do
servidor para sua alteração ser persistida na inicialização do servidor.
Caso você esteja executando um storage domain, copie o XML ao arquivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml .
Caso você esteja executando um servidor autônomo, copie o XML ao arquivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .
4. Modificação do XML gerado ao novo arquivo de configuração.
Segue abaixo um exemplo do arquivo de configuração do adaptador de recurso a partir do
JBoss Enterprise Application Plataform 5.x TestSuite:
​< ?xml version="1.0" encoding="UTF-8"?>
​ <!-==================================================================
== -->
​ <!-- ConnectionManager setup for jboss test adapter
-->
​ <!-- Build jmx-api (build/build.sh all) and view for config
documentation -->
​ <!-==================================================================
== -->
​< connection-factories>
​ <tx-connection-factory>
​
<jndi-name>JBossTestCF</jndi-name>
​
<xa-transaction/>
​
<rar-name>jbosstestadapter.rar</rar-name>
​
<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>
​
<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>
​
<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>
​
<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>
​
<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>
​
<config-property name="sleepInStart" type="long">200</configproperty>
​
<config-property name="sleepInStop" type="long">200</configproperty>
​ </tx-connection-factory>
​ <tx-connection-factory>
​
<jndi-name>JBossTestCF2</jndi-name>
​
<xa-transaction/>
​
<rar-name>jbosstestadapter.rar</rar-name>
​
<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>
91
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>
​
<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>
​
<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>
​
<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>
​
<config-property name="sleepInStart" type="long">200</configproperty>
​
<config-property name="sleepInStop" type="long">200</configproperty>
​ </tx-connection-factory>
​ <tx-connection-factory>
​
<jndi-name>JBossTestCFByTx</jndi-name>
​
<xa-transaction/>
​
<track-connection-by-tx>true</track-connection-by-tx>
​
<rar-name>jbosstestadapter.rar</rar-name>
​
<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>
​
<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>
​
<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>
​
<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>
​
<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>
​
<config-property name="sleepInStart" type="long">200</configproperty>
​
<config-property name="sleepInStop" type="long">200</configproperty>
​ </tx-connection-factory>
​< /connection-factories>
Segue abaixo o arquivo de configuração que foi gerado pela execução do script conversor.
Substitua o valor do atributo do nome da classe " FIXME_MCF_CLASS_NAME" no XML
gerado com o nome de classe correto da alocação de conexão gerenciada, neste caso o
" org.jboss.test.jca.adapter.TestManagedConnectionFactory" . Segue abaixo o XML resultante
no arquivo de configuração do JBoss Enterprise Application Plataform 6 com modificações
ao valor do elemento <cl ass-name>.
​< subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
​ <resource-adapters>
​
<resource-adapter>
​
<archive>jbosstestadapter.rar</archive>
​
<transaction-support>XATransaction</transaction-support>
​
<connection-definitions>
​ <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the
correct class name
​ <connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"
​
jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF"
​
use-ccm="true" use-java-context="true"> -->
​ <connection-definition
92
⁠Capít ulo 4 . Ferrament as e Dicas
​
classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"
​
enabled="true"
​
jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF"
​
use-ccm="true" use-java-context="true">
​
<config-property name="IntegerProperty">2</config-property>
​
<config-property name="sleepInStart">200</config-property>
​
<config-property name="sleepInStop">200</config-property>
​
<config-property name="BooleanProperty">false</config-property>
​
<config-property
name="UrlProperty">http://www.jboss.org</config-property>
​
<config-property name="DoubleProperty">5.5</config-property>
​
<pool>
​
<prefill>false</prefill>
​
<use-strict-min>false</use-strict-min>
​
<flush-strategy>FailingConnectionOnly</flush-strategy>
​
</pool>
​
<security>
​
<application/>
​
</security>
​
<timeout/>
​
<validation>
​
<background-validation>false</background-validation>
​
<use-fast-fail>false</use-fast-fail>
​
</validation>
​ </connection-definition>
​
</connection-definitions>
​
</resource-adapter>
​
<resource-adapter>
​
<archive>jbosstestadapter.rar</archive>
​
<transaction-support>XATransaction</transaction-support>
​
<connection-definitions>
​ <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the
correct class name
​
<connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"
​
jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2"
​
use-ccm="true" use-java-context="true"> -->
​ <connection-definition
​
classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"
​
enabled="true"
​
jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2"
​
use-ccm="true" use-java-context="true">
​
<config-property name="IntegerProperty">2</config-property>
​
<config-property name="sleepInStart">200</config-property>
​
<config-property name="sleepInStop">200</config-property>
​
<config-property name="BooleanProperty">false</config-property>
​
<config-property
name="UrlProperty">http://www.jboss.org</config-property>
​
<config-property name="DoubleProperty">5.5</config-property>
​
<pool>
​
<prefill>false</prefill>
​
<use-strict-min>false</use-strict-min>
​
<flush-strategy>FailingConnectionOnly</flush-strategy>
​
</pool>
93
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<security>
<application/>
​
</security>
​
<timeout/>
​
<validation>
​
<background-validation>false</background-validation>
​
<use-fast-fail>false</use-fast-fail>
​
</validation>
​ </connection-definition>
​
</connection-definitions>
​
</resource-adapter>
​
<resource-adapter>
​
<archive>jbosstestadapter.rar</archive>
​
<transaction-support>XATransaction</transaction-support>
​
<connection-definitions>
​ <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the
correct class name
​ <connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"
​
jndi-name="java:jboss/JBossTestCFByTx" poolname="JBossTestCFByTx"
​
use-ccm="true" use-java-context="true"> -->
​ <connection-definition
​
classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"
​
enabled="true"
​
jndi-name="java:jboss/JBossTestCFByTx" poolname="JBossTestCFByTx"
​
use-ccm="true" use-java-context="true">
​
<config-property name="IntegerProperty">2</config-property>
​
<config-property name="sleepInStart">200</config-property>
​
<config-property name="sleepInStop">200</config-property>
​
<config-property name="BooleanProperty">false</config-property>
​
<config-property
name="UrlProperty">http://www.jboss.org</config-property>
​
<config-property name="DoubleProperty">5.5</config-property>
​
<pool>
​
<prefill>false</prefill>
​
<use-strict-min>false</use-strict-min>
​
<flush-strategy>FailingConnectionOnly</flush-strategy>
​
</pool>
​
<security>
​
<application/>
​
</security>
​
<timeout/>
​
<validation>
​
<background-validation>false</background-validation>
​
<use-fast-fail>false</use-fast-fail>
​
</validation>
​ </connection-definition>
​
</connection-definitions>
​
</resource-adapter>
​ </resource-adapters>
​< /subsystem>
​
94
⁠Capít ulo 4 . Ferrament as e Dicas
Nota
A ferramenta de Migração IronJacamar é uma ferramenta de terceiros e não é suportada como
parte do JBoss Enterprise Application Plataform 6. Para maiores informações a respeito do
IronJacamar, dirija-se ao http://www.jboss.org/ironjacamar. Para maiores informações de
como instalar e usar essa ferramenta, consulte
http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration.
Reportar um erro
4 .2. Problemas da Migração de Depuração
4 .2.1. Depuração e Solução dos Problemas de Migração
D evido ao carregamento de classe, regras de nomeação JND I e outras alterações no servidor do
aplicativo, você poderá encontrar exceções ou outros erros caso você tente implantar seu aplicativo
" como-está" . Segue abaixo a descrição de como resolver algumas das exceções mais comuns e
erros que você venha a encontrar.
Seção 4.2.2, “ D epuração e Solução do ClassNotFoundExceptions e NoClassD efFoundErrors”
Seção 4.2.5, “ D epuração e Resolução dos ClassCastExceptions”
Seção 4.2.6, “ D epuração e Solução do D uplicateServiceExceptions”
Seção 4.2.7, “ D epuração e Resolução dos Erros da Página de D epuração do JBoss Seam”
Reportar um erro
4 .2.2. Depuração e Solução do ClassNot FoundExcept ions e
NoClassDefFoundErrors
Su mário
O ClassNotFoundExceptions ocorre normalmente devido a uma dependência não-resolvida. Isto
significa que você deve definir explicitamente as dependências em outros módulos ou copiar os
JARs de fontes externas.
Pro ced imen t o 4 .8.
1. Tente primeiro a Seção 4.2.3, “ Busque a D ependência de Módulo do JBoss”
2. Caso não haja um módulo para a classe ausente, a Seção 4.2.4, “ Busca do JAR na
Instalação Anterior”
Reportar um erro
4 .2.3. Busque a Dependência de Módulo do JBoss
Para resolver a dependência, primeiro tente o módulo que contém a classe especificada pelo
C l assNo tFo und Excepti o n pesquisando no diretório
EAP_HOME/mo d ul es/system/l ayers/base/. Caso você encontrar um módulo para a classe,
você deve adicionar a dependência à entrada do manifesto.
95
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Por exemplo, caso você verificar este rastreamento ClassNotFoundException no log:
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.Log
from [Module "deployment.TopicIndex.war:main" from Service Module
Loader]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:188)
Encontre o módulo do JBoss contendo essa classe efetuando o seguinte:
Pro ced imen t o 4 .9 .
1. D etermine primeiramente se existe um módulo claro para a classe.
a. Navegue ao diretório EAP_HOME/mo d ul es/system/l ayers/base/ e busque pelo
caminho do módulo combinando a classe nomeada no
C l assNo tFo und Excepti o n.
Você pode encontrar o o rg /apache/co mmo ns/l o g g i ng / de caminho modular.
b. Abra o arquivo
EAP_HOME/mo d ul es/system/l ayers/base/o rg /apache/co mmo ns/l o g g i ng
/mai n/mo d ul e. xml e encontre o nome do módulo. Neste caso, isto é
" org.apache.commons.logging" .
c. Adicione o nome do módulo às D ependências no arquivo MANIFEST . MF:
Manifest-Version: 1.0
Dependencies: org.apache.commons.logging
2. Caso não haja caminho de módulo óbvio para a classe, você precisa encontrar a
dependência em outra localização.
a. Busque pela classe nomeada no C l assNo tFo und Excepti o n do Relatório
Tattletale.
b. Busque o módulo contendo o JAR no diretório EAP_HOME/mo d ul es e encontre o
nome do módulo como na etapa anterior.
Reportar um erro
4 .2.4 . Busca do JAR na Inst alação Ant erior
Caso a classe não seja encontrada no JAR empacotado num módulo definido pelo servidor, busque
o JAR em sua instalação EAP5_HOME ou seu diretório l i b/ anterior do servidor.
Por exemplo, caso você veja este traço C l assNo tFo und Excepti o n no log:
Caused by: java.lang.NoClassDefFoundError:
org/hibernate/validator/ClassValidator at
java.lang.Class.getDeclaredMethods0(Native Method)
Busque pelo JAR contendo essa classe efetuando o seguinte:
96
⁠Capít ulo 4 . Ferrament as e Dicas
1. Abra o terminal e navegue ao diretório EAP5_HOME/.
2. Emita o comando:
g rep ' o rg . hi bernate. val i d ato r. C l assVal i d ato r' `fi nd . \-name
' *. jar' `
3. Você poderá encontrar mais de um resultado. Neste caso, o seguinte resultado é o JAR que
precisamos:
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar
matches
4. Copie esse JAR ao diretório l i b/ do aplicativo.
Caso você precisar de um número grande de JARs, será mais fácil definir um módulo para as
classes. Para maiores informações sobre esse assunto, refira-se ao Modules no capítulo Get
Started Developing Applications do Development Guide para o JBoss Enterprise Application
Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
5. Reconstrução e reimplantação do aplicativo.
Reportar um erro
4 .2.5. Depuração e Resolução dos ClassCast Except ions
Os ClassCastExceptions acontecem com frequência uma vez que a classe está sendo carregada por
um carregador de classe que eles estendem. Eles podem também ser o resultado da mesma classe
existente em JARs múltiplos.
Pro ced imen t o 4 .10.
1. Busque pelo aplicativo para encontrar todos os JAR(s) que contém a classe nomeada pelo
C l assNo tFo und Excepti o n. Caso exista um módulo definido para a classe, encontre e
remova os JAR(s) duplicados a partir do WAR ou EAR do aplicativo.
2. Encontre o módulo do JBoss contendo a classe e defina claramente a dependência no
arquivo MANIFEST . MF ou no arquivo jbo ss-d epl o yment-structure. xml . Refira-se ao
Class Loading and Subdeployments no capítulo Class Loading and Modules do Development Guide
para o JBoss Enterprise Application Plataform 6 no
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ para
maiores informações.
3. Caso você não esteja apto a resolver isto usando as etapas acima, você pode normalmente
determinar a causa do problema imprimindo a informação do carregador da classe ao log.
Por exemplo, você observará o seguinte C l assC astExcepti o n no log:
java.lang.ClassCastException: com.example1.CustomClass1 cannot be
cast to com.example2.CustomClass2
a. No seu código, imprima a informação do carregador das classes nomeados pelo
C l assC astExcepti o n ao log, por exemplo:
​l ogger.info("Class loader for CustomClass1: " +
97
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
com.example1.CustomClass1.getClass().getClassLoader().toString
());
​l ogger.info("Class loader for CustomClass2: " +
​
com.example2.CustomClass2.getClass().getClassLoader().toString
());
b. A informação no log apresenta quais módulos são carregados nas classes e,
baseado no seu aplicativo, você precisa remover ou mover os JAR(s) em conflito.
Reportar um erro
4 .2.6. Depuração e Solução do Duplicat eServiceExcept ions
Caso você obter um D uplicateServiceExceptions para uma subimplantação de um JAR ou uma
mensagem que o aplicativo WAR já foi instalado quando você implantar seu JBoss Enterprise
Application Plataform 6, isto pode ter sido uma decorrência de alterações da maneira em que o
JBossWS manuseia a sua implantação.
O lançamento do JBossWS 3.3.0 introduziu um novo novo Algoritmo de Mapeamento Raiz de
Contexto para servlet baseados nos pontos de extremidade que permitem isto tornar-se diretamente
compatível com o TCK6. Caso o arquivo EAR do aplicativo conter um JAR com o mesmo nome, o
JBossWS pode criar um contexto WAR e um contexto da web com o mesmo nome. O contexto da web
conflita com o contexto WAR e isto resulta em erros de implantação. Resolva os problemas de
implantação em uma das seguintes maneiras:
Renomeie o arquivo JAR a um nome que é diferente do que o WAR, de forma que a web gerada e
os contextos WAR sejam únicos.
Forneça um elemento <co ntext-ro o t> ao arquivo jbo ss-web. xml .
Forneça um elemento <co ntext-ro o t> ao arquivo jbo ss-webservi ces. xml .
Personalize o elemento <co ntext-ro o t> para o WAR no arquivo appl i cati o n. xml .
Reportar um erro
4 .2.7. Depuração e Resolução dos Erros da Página de Depuração do JBoss
Seam
Após você migrar e implantar o seu aplicativo com sucesso, você pode encontrar um erro do
período de execução que o redireciona à página " D epuração do JBoss Seam" . O URL para esta
página é " http://localhost:8080/APPLICATION_CONTEXT/debug.seam" . Esta página permite que
você visualize e inspecione os componentes Seam em qualquer dos contextos associados com a
sessão de login atual.
98
⁠Capít ulo 4 . Ferrament as e Dicas
Fig u ra 4 .1. Pág in a d e D ep u ração d o JB o ss Seam
A razão mais provável de você ter sido redirecionado à esta página é devido ao Seam ter pego uma
Exceção que não foi manuseada no código do aplicativo. A causa principal da exceção pode ser
normalmente encontrada em um dos links na " Página de D epuração do JBoss Seam" .
Pro ced imen t o 4 .11.
1. Expanda a seção C o mpo nent na página e procure pelo componente
o rg . jbo ss. seam. caug htExcepti o n.
2. A causa e o rastreamento de pilha deve levá-lo às dependências ausentes.
99
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Fig u ra 4 .2. In f o rmação o rg . jbo ss. seam. caug htExcepti o n d o co mp o n en t e
3. Use a técnica descrita na Seção 4.2.2, “ D epuração e Solução do ClassNotFoundExceptions
e NoClassD efFoundErrors” para resolver as dependências do módulo.
Na amostra acima, a solução mais simples é adicionar o rg . sl f4 j ao MANIFEST . MF
Manifest-Version: 1.0
Dependencies: org.slf4j
Outra opção é adicionar uma dependência para o módulo ao arquivo jbo ssd epl o yment-structure. xml :
​< jboss-deployment-structure>
​
<deployment>
​
<dependencies>
​
<module name="org.slf4j" />
​
</dependencies>
​
</deployment>
​< /jboss-deployment-structure>
Reportar um erro
4 .3. Revise a Migração dos Aplicat ivos da Amost ra
100
⁠Capít ulo 4 . Ferrament as e Dicas
4 .3.1. Revise a Migração dos Aplicat ivos da Amost ra
Visão G eral
Segue abaixo uma lista dos aplicativos de amostra do JBoss Enterprise Application Plataform 5.x
que foram migrados ao JBoss Enterprise Application Plataform 6. Para visualizar os detalhes de
como a alteração aconteceu num aplicativo em particular, clique no link abaixo.
Seção 4.3.2, “ Migração da Amostra Seam 2.2 JPA para o JBoss Enterprise Application Plataform
6”
Seção 4.3.3, “ Migração da Amostra do Seam 2.2 Booking para o JBoss Enterprise Application
Plataform 6”
Seção 4.3.4, “ Migração do Seam 2.2 Booking Archive ao JBoss Enterprise Application Plataform
6: Instruções de Etapa-por-Etapa”
Reportar um erro
4 .3.2. Migração da Amost ra Seam 2.2 JPA para o JBoss Ent erprise
Applicat ion Plat aform 6
Su mário
A seguinte lista de tarefas resume as alterações necessárias para migração com êxito do aplicativo
de amostra Seam 2.2 JPA para o JBoss Enterprise Application Plataform 6. Esse aplicativo de
amostra pode ser encontrado na distribuição do JBoss Enterprise Application Plataform 5.1 sob
EAP5.1_HOME/jbo ss-eap-5. 1/seam/exampl es/jpa/
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 4 .12. Mig ração d a amo st ra Seam 2.2 JPA
1. R emo ção d o arq u ivo jb o ss- web
Remova o arquivo jbo ss-web. xml do diretório jbo ss-seam-jpa. war/WEB-INF/. O
carregamento da classe definido no jbo ss-web. xml é agora o comportamento default.
2. R emo ção d a p ro p ried ad e o b so let a a p art ir d o arq u ivo p ersist en ce.xml
Remova ou comente a propriedade hi bernate. cache. pro vi d er_cl ass no arquivo
jbo ss-seam-jpa. war/WEB-INF/cl asses/MET A-INF/persi stence. xml :
​< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
101
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
3. Ad ição d as d ep en d ên cias Seam 2.2
Copie os seguintes JARs da biblioteca Seam 2.2, SEAM_HO ME/l i b/, ao diretório jbo ssseam-jpa. war/WEB-INF/l i b/:
slf4j-api.jar
slf4j-log4j12.jar
hibernate-entitymanager.jar
hibernate-core.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-validator.jar
4. C riação d e u m arq u ivo jb o ss- d ep lo ymen t - st ru ct u re p ara ad icio n ar as
d ep en d ên cias rest an t es
Crie um arquivo jbo ss-d epl o yment-structure. xml na pasta jbo ss-seamjpa. war/WEB-INF/ contendo os seguintes dados:
​< jboss-deployment-structure>
​
<deployment>
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="org.apache.log4j" />
​
<module name="org.dom4j" />
​
<module name="org.apache.commons.logging" />
​
<module name="org.apache.commons.collections" />
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​
</deployment>
​< /jboss-deployment-structure>
R esu lt ad o :
O aplicativo da amostra Seam 2.2 implanta e executa com êxito no JBoss Enterprise Application
Plataform 6.
Reportar um erro
4 .3.3. Migração da Amost ra do Seam 2.2 Booking para o JBoss Ent erprise
Applicat ion Plat aform 6
Su mário
102
⁠Capít ulo 4 . Ferrament as e Dicas
A migração do Seam 2.2 Booking EAR é mais complicada do que a amostra Seam 2.2 JPA WAR. A
documentação para a migração da amostra Seam 2.2 JPA WAR pode ser encontrada na
Seção 4.3.2, “ Migração da Amostra Seam 2.2 JPA para o JBoss Enterprise Application Plataform 6” .
Para migrar o aplicativo, você deve realizar o seguinte:
1. Inicialize o JSF 1.2 ao invés do JSF 2 default.
2. As versões antigas de bundle do Hibernate JARs
3. Altere os bindings JND I para uso da nova sintaxe portável do Java EE 6 JND I.
As primeiras duas etapas foram feitas na migração da amostra Seam 2.2 JPA WAR. A terceira etapa
é nova e é necessária uma vez que o EAR contém EJBs.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 4 .13. Mig ração d a amo st ra Seam 2.2 B o o kin g
1. C rie o arq u ivo jbo ss-d epl o yment-structure. xml
Crie um novo arquivo nomeado jbo ss-d epl o yment-structure. xml no jbo ss-seambo o ki ng . ear/MET A-INF/ e adicione o seguinte conteúdo:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="org.apache.log4j" export="true"/>
​
<module name="org.dom4j" export="true"/>
​
<module name="org.apache.commons.logging"
export="true"/>
​
<module name="org.apache.commons.collections"
export="true"/>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="booking-web.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
103
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<module name="com.sun.jsf-impl" slot="1.2"/>
</dependencies>
​ </sub-deployment>
​ </jboss-deployment-structure>
​
2. R emo va a p ro p ried ad e hi bernate p ara a classe d o cach e
Remova ou comente a propriedade hibernate para a classe do provedor do cache no
arquivo jbo ss-seam-bo o ki ng . jar/MET A-INF/persi stence. xml :
​< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
3. C o p ie o s JAR s a p art ir d a d ist rib u ição Seam 2.2
Copie os seguintes JARs a partir da distribuição Seam 2.2 EAP5.x_HOME/jbo sseap5. x/seam/l i b/ no diretório jbo ss-seam-bo o ki ng . ear/l i b.
slf4j-api.jar
slf4j-log4j12.jar
hibernate-core.jar
hibernate-entitymanager.jar
hibernate-validator.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
4. Alt ere o s n o mes d e p esq u isa JN D I
Altere os strings de pesquisa JND I no arquivo jbo ss-seam-bo o ki ng . war/WEBINF/co mpo nents. xml . O JBoss Enterprise Application Plataform 6 efetua o binds nos
EJBs usando as regras de sintaxe portável JND I e você não pode usar o jndiPattern que era
usado no JBoss Enterprise Application Plataform 5. Segue abaixo como os strings de
pesquisa EJB JND I do aplicativo devem ser alteradas ao JBoss Enterprise Application
Plataform 6:
java:global/seam-booking/bookingejb/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearch
ing
java:app/bookingejb/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearch
ing
java:module/HotelSearchingAction!org.jboss.seam.example.booking.Hot
elSearching
java:global/seam-booking/booking-ejb/HotelSearchingAction
java:app/booking-ejb/HotelSearchingAction
java:module/HotelSearchingAction
Os strings de pesquisa para os EJBs de framework Seam 2.2 devem ser alteradas conforme
abaixo:
java:global/seam-booking/jbossseam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchro
nizations
java:app/jboss-
104
⁠Capít ulo 4 . Ferrament as e Dicas
seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchro
nizations
java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjb
Synchronizations
java:global/seam-booking/jboss-seam/EjbSynchronizations
java:app/jboss-seam/EjbSynchronizations
java:module/EjbSynchronizations
Você pode usar uma das seguintes abordagens:
a. Ad ição d o s elemen t o s d o co mp o n en t e
Você pode adicionar um jnd i -name para cada EJB ao WEBINF/co mpo nents. xml :
​< component
class="org.jboss.seam.transaction.EjbSynchronizations" jndiname="java:app/jboss-seam/EjbSynchronizations"/>
​< component class="org.jboss.seam.async.TimerServiceDispatcher"
jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
​< component
class="org.jboss.seam.example.booking.AuthenticatorAction"
jndi-name="java:app/booking-ejb/AuthenticatorAction" />
​< component
class="org.jboss.seam.example.booking.BookingListAction"
jndi-name="java:app/booking-ejb/BookingListAction" />
​< component
class="org.jboss.seam.example.booking.RegisterAction" jndiname="java:app/booking-ejb/RegisterAction" />
​< component
class="org.jboss.seam.example.booking.HotelSearchingAction"
jndi-name="java:app/booking-ejb/HotelSearchingAction" />
​< component
class="org.jboss.seam.example.booking.HotelBookingAction"
jndi-name="java:app/booking-ejb/HotelBookingAction" />
​< component
class="org.jboss.seam.example.booking.ChangePasswordAction"
jndi-name="java:app/booking-ejb/ChangePasswordAction" />
b. Você pode modificar o código pela adição da anotação @ JND IName(val ue= "")
especificando o caminho JND I. Segue abaixo uma amostra alterada do código bean
de sessão stateless. Uma descrição detalhada deste processo pode ser encontrada
na documentação de referência Seam 2.2.
​@ Stateless
​@ Name("authenticator")
​@ JndiName(value="java:app/booking-ejb/AuthenticatorAction")
​p ublic class AuthenticatorAction
​
implements Authenticator
​
{
​. ..
​
}
105
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
R esu lt ad o :
O aplicativo Seam 2.2 Booking implanta e executa com êxito no JBoss Enterprise Application
Plataform 6.
Reportar um erro
4 .3.4 . Migração do Seam 2.2 Booking Archive ao JBoss Ent erprise
Applicat ion Plat aform 6: Inst ruções de Et apa-por-Et apa
Este é um guia de etapa-por-etapa de como portar o arquivo do aplicativo Seam 2.2 Booking do
JBoss Enterprise Application Plataform 5.1 ao JBoss Enterprise Application Plataform 6. Embora
existam três abordagens para os aplicativos de migração, muitos desenvolvedores podem estar
inclinados a implantar o arquivo do aplicativo com ele está ao servidor do JBoss Enterprise
Application Plataform 6 para checar o que acontece. O propósito desta documentação é apresentar
os tipos de problemas que você poderá encontrar quando você realizar isto e como você pode
depurar e resolver esses problemas.
Para esta amostra, o aplicativo EAR é implantado ao diretório
EAP6_HOME/stand al o ne/d epl o yments sem nenhuma alteração além da extração dos arquivos.
Isto permite você modificar com facilidade os arquivos XML contidos com os arquivos uma vez que
você se deparar e solucionar os problemas.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo a executar seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 4 .14 . Mig ração d e seu ap licat ivo
1. Seção 4.3.5, “ Construção e D epuração da Versão do JBoss Enterprise Application Plataform
5.1 do Aplicativo Seam 2.2 Booking”
2. Seção 4.3.6, “ D epuração e resolução do erros e exceções do Seam 2.2 Booking Archive
D eployment”
3. Seção 4.3.7, “ D epuração e Resolução de erros e exceções do Seam 2.2 Booking Archive
Runtime”
A partir daqui, você estará apto a acessar com sucesso o aplicativo num navegador usando o URL
http://localhost:8080/seam-booking/. Entre como demo/demo e verifique a página de boas vindas do
Booking.
R evise o su mário d as alt eraçõ es
Seção 4.3.8, “ Revisão do Sumário das Alterações feitas quando Migrando o Aplicativo Seam 2.2
Booking”
Reportar um erro
106
⁠Capít ulo 4 . Ferrament as e Dicas
4 .3.5. Const rução e Depuração da Versão do JBoss Ent erprise Applicat ion
Plat aform 5.1 do Aplicat ivo Seam 2.2 Booking
Antes da migração deste aplicativo, você precisa construir o aplicativo Seam 2.2 Booking do JBoss
Enterprise Application Plataform, extrair o arquivo e copiá-lo a uma pasta de implantação do JBoss
Enterprise Application Plataform 6.
Pro ced imen t o 4 .15. C o n st ru ção e imp lan t ação d o EAR
1. Contrução do EAR:
$ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking
$ ANT_HOME/ant explode
2. Copie o EAR ao diretório de implantações EAP6_HOME:
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jbossseam-booking.ear EAP6_HOME/standalone/deployments/
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jbossseam-booking.war EAP6_HOME/standalone/deployments/jboss-seam.ear
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jbossseam-booking.jar EAP6_HOME/standalone/deployments/jboss-seam.ear
3. Inicie o servidor do JBoss Enterprise Application Plataform e verifique o log. Você verá o
seguinte:
INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1)
Found jboss-seam-booking.ear in deployment directory.
To trigger deployment create a file called jboss-seambooking.ear.dodeploy
4. Crie um arquivo vazio com o nome jbo ss-seam-bo o ki ng . ear. d o d epl o y e copie-o ao
diretório EAP6_HOME/stand al o ne/d epl o yments. Você precisa copiar este arquivo no
diretório de implantações diversas vezes enquanto migrando este aplicativo. Portanto,
mantenha isto numa localização da qual você pode encontrar com facilidade. No log, você
deverá ver agora as seguintes mensagens indicando que a implantação está ocorrendo:
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.ear"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.jar"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam.jar"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.war"
thread 1-1)
thread 1-3)
thread 1-6)
thread 1-2)
A partir daqui, você encontra o primeiro erro de implantação. A próxima etapa, você
verificará cada problema e aprenderá como depurá-lo e resolvê-lo.
Consulte a Seção 4.3.6, “ D epuração e resolução do erros e exceções do Seam 2.2 Booking
Archive D eployment” para maiores informações sobre como depurar e resolver problemas de
implantação.
Clique na Seção 4.3.4, “ Migração do Seam 2.2 Booking Archive ao JBoss Enterprise
Application Plataform 6: Instruções de Etapa-por-Etapa” para retornar ao tópico anterior.
107
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Reportar um erro
4 .3.6. Depuração e resolução do erros e exceções do Seam 2.2 Booking
Archive Deployment
Na etapa anterior,Seção 4.3.5, “ Construção e D epuração da Versão do JBoss Enterprise
Application Plataform 5.1 do Aplicativo Seam 2.2 Booking” , você construiu o aplicativo Seam 2.2
Booking do JBoss Enterprise Application Plataform 5.1 e o implantava na pasta de implantação do
JBoss Enterprise Application Plataform 6. Nessa etapa, você depura e resolve cada erro de
implantação que você encontrou.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 4 .16 . D ep u ração e reso lu ção d o s erro s d e imp lan t ação e exceçõ es
1. Problema - java.lang.ClassNotFoundException: javax.faces.FacesException
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR \[org.jboss.msc.service.fail\] (MSC service thread 1-1)
MSC00001: Failed to start service jboss.deployment.subunit."jbossseam-booking.ear"."jboss-seam-booking.war".POST_MODULE:
org.jboss.msc.service.StartException in service
jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seambooking.war".POST_MODULE:
Failed to process phase POST_MODULE of subdeployment "jboss-seambooking.war" of deployment "jboss-seam-booking.ear"
(.. additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
javax.faces.FacesException from \[Module "deployment.jboss-seambooking.ear:main" from Service Module Loader\]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java
:191)
O q u e sig n if ica:
O ClassNotFoundException indica que falta uma dependência. Neste caso, ele não pode
encontrar a classe javax. faces. FacesExcepti o n e você precisa adicionar a
dependência.
C o mo reso lver ist o :
108
⁠Capít ulo 4 . Ferrament as e Dicas
Busque pelo nome do módulo para aquela classe no diretório
EAP6_HOME/mo d ul es/system/l ayers/base/ apenas observando o caminho que
coincide com a classe faltante. Neste caso, você pode encontrar dois módulos que
coincidem com o caminho:
javax/faces/api/main
javax/faces/api/1.2
Ambos os módulos possuem o mesmo nome de módulo: javax. faces. api , porém um
deles no diretório principal é para JSF 2.0 e outro localizado no diretório 1.2 é para JSF 1.2.
Caso houvesse apenas um módulo disponível, você poderia criar simplesmente um arquivo
MANIFEST . MF e adicionar a dependência do módulo. Neste caso, você deseja usar a
versão JSF 1.2 ao invés da versão 2.0 no principal, de forma que você precisa especificar
uma e excluir a outra. Para isto, crie um arquivo jbo ss-d epl o yment-structure. xml no
diretório do MET A-INF/ do EAR que contém os seguintes dados:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
Na seção d epl o yment, você adiciona a dependência para o javax. faces. api do
módulo JSF 1.2. Você pode adicionar também a dependência do módulo JSF 1.2 na seção
de subimplantação para o WAR e excluir o módulo para o JSF 2.0.
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
2. Problema - java.lang.ClassNotFoundException: org.apache.commons.logging.Log
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8)
MSC00001: Failed to start service jboss.deployment.unit."jbossseam-booking.ear".INSTALL:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."jboss-seam-booking.ear".INSTALL:
Failed to process phase INSTALL of deployment "jboss-seambooking.ear"
(.. additional logs removed ...)
109
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.Log from [Module "deployment.jboss-seambooking.ear.jboss-seam-booking.war:main" from Service Module
Loader]
O q u e sig n if ica:
O C l assNo tFo und Excepti o n indica a falta de uma dependência. Neste caso, ele não
pode buscar a classe o rg . apache. co mmo ns. l o g g i ng . Lo g e você precisa adicionar a
dependência.
C o mo reso lver ist o :
Busque pelo nome do módulo para aquela classe no diretório
EAP6_HOME/mo d ul es/system/l ayers/base/ apenas observando o caminho que
coincide com a classe faltante. Neste caso, você pode encontrar um módulo que coincide o
caminho o rg /apache/co mmo ns/l o g g i ng /. O nome do módulo é
“ org.apache.commons.logging” .
Modifique o arquivo jbo ss-d epl o yment-structure. xml e adicione a dependência do
módulo à seção de implantação do arquivo.
​< module name="org.apache.commons.logging" export="true"/>
O jbo ss-d epl o yment-structure. xml deve parecer-se com o seguinte:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="org.apache.commons.logging" export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
3. Problema - java.lang.ClassNotFoundException: org.dom4j.D ocumentException
Quando você implanta o aplicativo, o log contém o seguinte erro:
110
⁠Capít ulo 4 . Ferrament as e Dicas
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-3) Exception sending
context initialized event to listener instance of class
org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError:
org/dom4j/DocumentException
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.dom4j.DocumentException from [Module "deployment.jboss-seambooking.ear.jboss-seam.jar:main" from Service Module Loader]
O q u e sig n if ica:
O C l assNo tFo und Excepti o n indica que falta uma dependência. Neste caso, ele não
pode buscar pela classe o rg . d o m4 j. D o cumentExcepti o n.
C o mo reso lver ist o :
Encontre o nome do módulo no diretório EAP6_HOME/mo d ul es/system/l ayers/base/
procurando pelo o rg /d o m4 j/D o cumentExcepti o n. O nome do módulo é “ org.dom4j” .
Modifique o arquivo jbo ss-d epl o yment-structure. xml para adicionar a dependência
do módulo à seção de implantação do arquivo.
​< module name="org.dom4j" export="true"/>
O arquivo jboss-deployment-structure.xml deve parecer-se com o seguinte:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="org.apache.commons.logging" export="true"/>
​
<module name="org.dom4j" export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
4. Problema - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue
Quando você implanta o aplicativo, o log contém o seguinte erro:
111
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-6) Exception sending
context initialized event to listener instance of class
org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException:
Could not create Component:
org.jboss.seam.international.statusMessages
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.hibernate.validator.InvalidValue from [Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader]
O q u e sig n if ica:
O C l assNo tFo und Excepti o n indica que falta uma dependência. Neste caso, isto não
pode encontrar a classe o rg . hi bernate. val i d ato r. Inval i d Val ue.
C o mo reso lver ist o :
Existe um módulo “ org.hibernate.validator” , mas o JAR não contém a classe
o rg . hi bernate. val i d ato r. Inval i d Val ue, portanto a adição da dependência do
módulo não resolve este problema. Neste caso, o JAR contendo a classe fazia parte da
implantação do JBoss Enterprise Application Plataform 5.1. Procure pelo JAR que contém a
classe ausente no diretório EAP5_HOME/seam/lib/. D igite o seguinte para abrí-lo:
$ cd EAP5_HOME/seam/lib
$ grep 'org.hibernate.validator.InvalidValue' `find . -name
'*.jar'
O resultado apresenta:
$ Binary file ./hibernate-validator.jar matches
$ Binary file ./test/hibernate-all.jar matches
Neste caso, copie o hi bernate-val i d ato r. jar para o diretório jbo ss-seambo o ki ng . ear/l i b/
$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seambooking.ear/lib
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
5. Problema - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory
Quando você implanta o aplicativo, o log contém o seguinte erro:
INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC
service thread 1-7) Unsanitized stacktrace from failed start...:
com.sun.faces.config.ConfigurationException: Factory
'javax.faces.application.ApplicationFactory' was not configured
properly.
at
112
⁠Capít ulo 4 . Ferrament as e Dicas
com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactorie
sExist(FactoryConfigProcessor.java:296) [jsf-impl-2.0.4-b09jbossorg-4.jar:2.0.4-b09-jbossorg-4]
(... additional logs removed ...)
Caused by: javax.faces.FacesException:
org.jboss.seam.jsf.SeamApplicationFactory
at
javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.ja
va:606) [jsf-api-1.2_13.jar:1.2_13-b01-FCS]
(... additional logs removed ...)
at
com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactorie
sExist(FactoryConfigProcessor.java:294) [jsf-impl-2.0.4-b09jbossorg-4.jar:2.0.4-b09-jbossorg-4]
... 11 more
Caused by: java.lang.InstantiationException:
org.jboss.seam.jsf.SeamApplicationFactory
at java.lang.Class.newInstance0(Class.java:340) [:1.6.0_25]
at java.lang.Class.newInstance(Class.java:308) [:1.6.0_25]
at
javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.ja
va:604) [jsf-api-1.2_13.jar:1.2_13-b01-FCS]
... 16 more
O q u e sig n if ica:
O co m. sun. faces. co nfi g . C o nfi g urati o nExcepti o n e
java. l ang . Instanti ati o nExcepti o n indicam um problema de dependência. Neste
caso, a causa não é óbvia.
C o mo reso lver ist o :
Você precisa encontrar o módulo que contém as classes co m. sun. faces. Enquanto não
há módulo co m. sun. faces, existem dois módulos co m. sun. jsf-i mpl . Uma checagem
rápida do jsf-i mpl -1. 2_13. jar no diretório 1.2 demonstra que isto contém as classes
co m. sun. faces. Assim como realizado com o
javax. faces. FacesExcepti o nC l assNo tFo und Excepti o n, você deseja usar a versão
JSF 1.2 ao invés da versão JSF 2.0 no principal, de forma que você pode especificar um e
excluir o outro. Você precisa modificar o jbo ss-d epl o yment-structure. xml para
adicionar a dependência do módulo à seção da implantação do arquivo. Você precisa
também adicioná-lo à subimplantação WAR e excluir o módulo JSF 2.0. O arquivo deve
parecer-se com o seguinte:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>
​
<module name="org.apache.commons.logging" export="true"/>
​
<module name="org.dom4j" export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
113
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
​
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
​
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
6. Problema - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-1) Exception sending
context initialized event to listener instance of class
com.sun.faces.config.ConfigureListener: java.lang.RuntimeException:
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED!
org.apache.commons.collections.ArrayStack from [Module
"deployment.jboss-seam-booking.ear:main" from Service Module
Loader]
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.collections.ArrayStack from [Module
"deployment.jboss-seam-booking.ear:main" from Service Module
Loader]
O q u e sig n if ica:
O C l assNo tFo und Excepti o n indica que falta uma dependência. Neste caso, ele não
pode buscar a classe o rg . apache. co mmo ns. co l l ecti o ns. ArrayStack.
C o mo reso lver ist o :
Encontre o nome do módulo no diretório EAP6_HOME/mo d ul es/system/l ayers/base/
procurando pelo caminho o rg /apache/co mmo ns/co l l ecti o ns. O nome do módulo é
“ org.apache.commons.collections” . Modifique o jboss-deployment-structure.xml para
adicionar a dependência do módulo à seção de implantação do arquivo.
​< module name="org.apache.commons.collections" export="true"/>
O arquivo jboss-deployment-structure.xml deve parecer-se com o seguinte:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>
114
⁠Capít ulo 4 . Ferrament as e Dicas
​
<module name="org.apache.commons.logging" export="true"/>
<module name="org.dom4j" export="true"/>
​
<module name="org.apache.commons.collections"
export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
​
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
7. Problema - Serviços com dependências indisponíveis/faltantes
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2)
{"Composite operation failed and was rolled back. Steps that
failed:" => {"Operation step-2" => {"Services with
missing/unavailable dependencies" =>
["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seambooking.jar\".component.AuthenticatorAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.book
ing.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jbossseam-booking.ear\".\"jboss-seambooking.jar\".component.HotelSearchingAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.boo
king.HotelSearchingAction/em\" ]","
(... additional logs removed ...)
"jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seambooking.jar\".component.BookingListAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".BookingListAction.\"env/org.jboss.seam.example.bookin
g.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seambooking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [
jboss.naming.context.java.bookingDatasource ]"]}}}
O q u e sig n if ica:
Quando você obter um erro “ Services with missing/unavailable dependencies” , observe o
texto entre parênteses após " falta" . Neste caso você verá:
115
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jbossseambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.book
ing.AuthenticatorAction/em\" ]
O “ /em” indica um Gerenciador de Entidade e problema de fonte de dados.
C o mo reso lver ist o :
No JBoss Enterprise Application Plataform 6, a configuração de fonte de dados foi alterada e
precisa ser definida no arquivo
EAP6_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . Uma vez que o JBoss
Enterprise Application Plataform 6 lança uma fonte de dados de amostra que já está definida
no arquivo stand al o ne. xml , modifique o arquivo persi stence. xml para uso da
amostra da fonte de dados neste aplicativo. Buscando no arquivo stand al o ne. xml , você
pode perceber que o jnd i -name para amostra da fonte de dados é
java: jbo ss/d ataso urces/Exampl eD S. Modifique o arquivo jbo ss-seambo o ki ng . jar/MET A-INF/persi stence. xml para comentar o elemento jta-d ataso urce existente e substituí-lo pelo o seguinte:
​< !-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
​< jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
8. Problema - java.lang.ClassNotFoundException:
org.hibernate.cache.HashtableCacheProvider
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4)
MSC00001: Failed to start service jboss.persistenceunit."jboss-seambooking.ear/jboss-seam-booking.jar#bookingDatabase":
org.jboss.msc.service.StartException in service
jboss.persistenceunit."jboss-seam-booking.ear/jboss-seambooking.jar#bookingDatabase": Failed to start service
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceCo
ntrollerImpl.java:1786)
(... log messages removed ...)
Caused by: java.lang.ClassNotFoundException:
org.hibernate.cache.HashtableCacheProvider from [Module
"org.hibernate:main" from local module loader @ 12a3793 (roots:
/home/sgilda/tools/jboss7/modules)]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java
:191)
(... log messages removed ...)
O q u e sig n if ica:
O C l assNo tFo und Excepti o n indica que falta uma dependência. Neste caso, isto não
pode encontrar a classe o rg . hi bernate. cache. Hashtabl eC acheP ro vi d er.
116
⁠Capít ulo 4 . Ferrament as e Dicas
C o mo reso lver ist o :
Não existe módulo para o “ org.hibernate.cache” . Neste caso, o JAR contendo a classe fazia
parte da implantação do JBoss Enterprise Application Plataform 5.1. Busque pelo JAR que
contém a classe faltante no diretório EAP5_HOME/seam/l i b/. Para isto, abra o console e
digite o seguinte:
$ cd EAP5_HOME/seam/lib
$ grep 'org.hibernate.validator.InvalidValue' `find . -name
'*.jar'`
O resultado apresenta:
Binary file ./hibernate-core.jar matches
Binary file ./test/hibernate-all.jar matches
Neste caso, copie o hi bernate-co re. jar para o diretório jbo ss-seambo o ki ng . ear/l i b/:
cp EAP5_HOME/seam/lib/hibernate-core.jar jboss-seam-booking.ear/lib
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
9. Problema - java.lang.ClassCastException: org.hibernate.cache.HashtableCacheProvider
Quando você implanta o aplicativo, o log contém o seguinte erro:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2)
MSC00001: Failed to start service jboss.persistenceunit."jboss-seambooking.ear/jboss-seam-booking.jar#bookingDatabase":
org.jboss.msc.service.StartException in service
jboss.persistenceunit."jboss-seam-booking.ear/jboss-seambooking.jar#bookingDatabase": Failed to start service
at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceCo
ntrollerImpl.java:1786)
(... log messages removed ...)
Caused by: java.lang.ClassCastException:
org.hibernate.cache.HashtableCacheProvider cannot be cast to
org.hibernate.cache.spi.CacheProvider
at
org.hibernate.cache.internal.bridge.RegionFactoryCacheProviderBrid
ge.init(RegionFactoryCacheProviderBridge.java:65)
... 20 more
O q u e sig n if ica:
O C l assC astExcepti o n pode ser o resultado de muitos problemas. Caso você ver esta
exceção no log, isto parece que a classe
o rg . hi bernate. cache. Hashtabl eC acheP ro vi d er estende o
o rg . hi bernate. cache. spi . C acheP ro vi d er e está sendo carregado por um
carregador de classe diferente ao da classe que isto estende. A classe
o rg . hi bernate. cache. Hashtabl eC acheP ro vi d er está no hi bernate-co re. jar e
117
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
está sendo carregado pelo carregador de classe do aplicativo. A classe que isto estende, ,
o rg . hi bernate. cache. spi . C acheP ro vi d er, está no
o rg /hi bernate/mai n/hi bernate-co re-4 . 0 . 0 . Beta1. jar e é carregado por aquele
módulo. Isto não é óbvio, mas devido às alterações no Hibernate 4, esse problema é
causado por um problema de compatibilidade inversa devido à mudança da classe
Hashtabl eC acheP ro vi d er a outro pacote. Essa classe foi movida do pacote
o rg . hi bernate. cache ao pacote o rg . hi bernate. cache. i nternal . Caso você não
remova a propriedade hi bernate. cache. pro vi d er_cl ass do arquivo
persi stence. xml , isto forçará o aplicativo Seam a empacotar as bibliotecas Hibernate
antiga, resultando no C l assC astExcepti o ns. Você deve preferir o uso do Infinispan ao
invés do HashtableCacheProvider no JBoss Enterprise Application Plataform 6.
C o mo reso lver ist o :
No JBoss Enterprise Application Plataform 6, comente o
hi bernate. cache. pro vi d er_cl ass pro perty no arquivo jbo ss-seambo o ki ng . jar/MET A-INF/persi stence. xml conforme abaixo:
​< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
Reimplante o aplicativo apenas deletando o arquivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed e
criando um arquivo jbo ss-seam-bo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
10. Nessas alturas, o aplicativo implanta sem nenhum erro, mas quando você acessa o URL
http://localhost:8080/seam-booking/ num navegador e tenta " Entrar na Conta" , você obterá
um erro do período de rodagem " A página não está redirecionando a propriedade" . Na
próxima etapa você aprenderá como depurar e solucionar os erros do período de rodagem.
Consulte a Seção 4.3.7, “ D epuração e Resolução de erros e exceções do Seam 2.2 Booking
Archive Runtime” para maiores informações sobre como depurar e resolver problemas do
período de execução.
Clique a Seção 4.3.4, “ Migração do Seam 2.2 Booking Archive ao JBoss Enterprise
Application Plataform 6: Instruções de Etapa-por-Etapa” , para retornar ao tópico anterior.
Reportar um erro
4 .3.7. Depuração e Resolução de erros e exceções do Seam 2.2 Booking
Archive Runt ime
Na Etapa anterior, Seção 4.3.6, “ D epuração e resolução do erros e exceções do Seam 2.2 Booking
Archive D eployment” , você aprendeu como depurar os erros de implantação. Nessa etapa, você
depura e resolve cada erro do período de execução que encontrar.
118
⁠Capít ulo 4 . Ferrament as e Dicas
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
Pro ced imen t o 4 .17. D ep u ração e reso lu ção d as exceçõ es e erro s d o p erío d o d e
ro d ag em
Nessas alturas, quando você implantar o aplicativo você não vê quaisquer erros no log. No entanto,
quando você acessar o U>RL do aplicativo, os erros apareceram no log.
1. Problema - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found
in context ''
Quando você acessa o URL http://localhost:8080/seam-booking/ num navegador, você
obterá uma mensagem " A página não está redirecionando a propriedade" e o log contém o
seguinte erro:
SEVERE [org.jboss.seam.jsf.SeamPhaseListener] (http--127.0.0.1-80801) swallowing exception: java.lang.IllegalStateException: Could not
start transaction
at
org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:59
8) [jboss-seam.jar:]
(... log messages removed ...)
Caused by: org.jboss.seam.InstantiationException: Could not
instantiate Seam component:
org.jboss.seam.transaction.synchronizations
at org.jboss.seam.Component.newInstance(Component.java:2170)
[jboss-seam.jar:]
(... log messages removed ...)
Caused by: javax.naming.NameNotFoundException: Name 'jboss-seambooking' not found in context ''
at
org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUt
ils.java:109)
(... log messages removed ...)
O q u e sig n if ica:
Um NameNo tFo und Excepti o n indica um problema de nomeação JND I. As regras de
nomeação JND I foram alteradas no JBoss Enterprise Application Plataform 6, de forma que
você precisa modificar os nomes de busca para seguir as novas regras.
C o mo reso lver ist o :
Para depurar isto, observe no rastreamento do log servidor antecedente ao que o JND I
binding foi usado. Você poderá observar o seguinte no log do servidor:
119
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
15:01:16,138 INFO
[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUn
itProcessor] (MSC service thread 1-1) JNDI bindings for session bean
named RegisterAction in deployment unit subdeployment "jboss-seambooking.jar" of deployment "jboss-seam-booking.ear" are as follows:
java:global/jboss-seam-booking/jboss-seambooking.jar/RegisterAction!org.jboss.seam.example.booking.Register
java:app/jboss-seambooking.jar/RegisterAction!org.jboss.seam.example.booking.Register
java:module/RegisterAction!org.jboss.seam.example.booking.Register
java:global/jboss-seam-booking/jboss-seambooking.jar/RegisterAction
java:app/jboss-seam-booking.jar/RegisterAction
java:module/RegisterAction
[JNDI bindings continue ...]
Existe o total de oito NFO JND I bindings listados no log, um para cada bean: RegisterAction,
BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction,
HotelSearchingAction, EjbSynchronizations, and TimerServiceD ispatcher. Você precisa
modificar o arquivo l i b/co mpo nents. xml do WAR para usar o novo JND I bindings. No
log, perceba que todos os EJB JND I bindings iniciam com " java:app/jboss-seambooking.jar" . Substitua o elemento co re: i ni t conforme o seguinte:
​< !-<core:init jndi-pattern="jboss-seam-booking/#
{ejbName}/local" debug="true" distributable="false"/> -->
​< core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>
Em seguida, você precisa adicionar o EjbSynchronizations e TimerServiceD ispatcher JND I
bindings. Adicione os seguintes componentes ao arquivo:
​< component class="org.jboss.seam.transaction.EjbSynchronizations"
jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
​< component class="org.jboss.seam.async.TimerServiceDispatcher"
jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
O arquivo components.xml deve parecer-se com o seguinte:
​< ?xml version="1.0" encoding="UTF-8"?>
​< components xmlns="http://jboss.com/products/seam/components"
​ xmlns:core="http://jboss.com/products/seam/core"
​ xmlns:security="http://jboss.com/products/seam/security"
​ xmlns:transaction="http://jboss.com/products/seam/transaction"
​ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
​ xsi:schemaLocation=
​
"http://jboss.com/products/seam/core
http://jboss.com/products/seam/core-2.2.xsd
​
http://jboss.com/products/seam/transaction
http://jboss.com/products/seam/transaction-2.2.xsd
120
⁠Capít ulo 4 . Ferrament as e Dicas
​
http://jboss.com/products/seam/security
http://jboss.com/products/seam/security-2.2.xsd
​
http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">
​
<!-- <core:init jndi-pattern="jboss-seam-booking/#
{ejbName}/local" debug="true" distributable="false"/> -->
​
<core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>
​
<core:manager conversation-timeout="120000"
​
concurrent-request-timeout="500"
​
conversation-id-parameter="cid"/>
​
<transaction:ejb-transaction/>
​
<security:identity authenticate-method="#
{authenticator.authenticate}"/>
​
<component
class="org.jboss.seam.transaction.EjbSynchronizations"
​
jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
​
<component class="org.jboss.seam.async.TimerServiceDispatcher"
​
jndi-name="java:app/jbossseam/TimerServiceDispatcher"/>
​< /components>
Reimplante o aplicativo apenas deletando o arquivo stand al o ne/d epl o yments/jbo ssseam-bo o ki ng . ear. fai l ed e criando um arquivo jbo ss-seambo o ki ng . ear. d o d epl o y vazio no mesmo diretório.
2. Erros do período de execução que devem ser resolvidos.
A partir daqui, o seu aplicativo implanta e executa sem erro. Quando você acessar o URL
http://localhost:8080/seam-booking/ num navegador, você estará apto a entrar com êxito.
Clique na Seção 4.3.4, “ Migração do Seam 2.2 Booking Archive ao JBoss Enterprise
Application Plataform 6: Instruções de Etapa-por-Etapa” para retornar ao tópico anterior.
Reportar um erro
4 .3.8. Revisão do Sumário das Alt erações feit as quando Migrando o
Aplicat ivo Seam 2.2 Booking
Embora seja mais eficiente determinar as dependências com antecedência e adicionar as
dependências em uma única etapa, esse exercício apresenta como os problemas aparecem no log e
fornece alguma informação de como depurá-los e resolvê-los. Segue abaixo um sumário das
alterações realizadas ao aplicativo quando migrando-o ao JBoss Enterprise Application Plataform
6.
121
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do
Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do
módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo
Seam 2.2. Esta amostra possui por intenção ajudá-lo a executar seu aplicativo no JBoss
Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o
empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração
suportada.
1. Você criou um arquivo jbo ss-d epl o yment-structure. xml no diretório MET A-INF/ do
EAR. Você adicionou o <d epend enci es> e <excl usi o ns> para resolver o
C l assNo tFo und Excepti o ns. Este arquivo contém os seguintes dados:
​< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
​ <deployment>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2" export="true"/>
​
<module name="com.sun.jsf-impl" slot="1.2" export="true"/>
​
<module name="org.apache.commons.logging" export="true"/>
​
<module name="org.dom4j" export="true"/>
​
<module name="org.apache.commons.collections"
export="true"/>
​
</dependencies>
​ </deployment>
​ <sub-deployment name="jboss-seam-booking.war">
​
<exclusions>
​
<module name="javax.faces.api" slot="main"/>
​
<module name="com.sun.jsf-impl" slot="main"/>
​
</exclusions>
​
<dependencies>
​
<module name="javax.faces.api" slot="1.2"/>
​
<module name="com.sun.jsf-impl" slot="1.2"/>
​
</dependencies>
​ </sub-deployment>
​< /jboss-deployment-structure>
2. Você copiou os seguintes JARs a partir do diretório EAP5_HOME/jbo ss-eap5. 1/seam/l i b/ ao diretório jbo ss-seam-bo o ki ng . ear/l i b/ para solucionar o
C l assNo tFo und Excepti o ns:
hibernate-core.jar
hibernate-validator.jar
3. Você modificou o arquivo jbo ss-seam-bo o ki ng . jar/MET A-INF/persi stence. xml
conforme o seguinte.
a. Você alterou o elemento jta-d ata-so urce para uso do banco de dados da
Amostra que lança o JBoss Enterprise Application Plataform 6:
122
⁠Capít ulo 4 . Ferrament as e Dicas
​< !-- <jta-data-source>java:/bookingDatasource</jta-datasource> -->
​< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
b. Você comentou a propriedade hibernate.cache.provider_class:
​< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
4. Você modificou o arquivo l i b/co mpo nents. xml do WAR para uso de novos JND I
bindings
a. Você pode substituir o elemento existente co re: i ni t conforme abaixo:
​< !-- <core:init jndi-pattern="jboss-seam-booking/#
{ejbName}/local" debug="true" distributable="false"/> -->
​< core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>
b. Você adicionou elementos do componente para o " EjbSynchronizations" e
" TimerServiceD ispatcher" JND I bindings
​< component
class="org.jboss.seam.transaction.EjbSynchronizations" jndiname="java:app/jboss-seam/EjbSynchronizations"/>
​ <component
class="org.jboss.seam.async.TimerServiceDispatcher" jndiname="java:app/jboss-seam/TimerServiceDispatcher"/>
Reportar um erro
123
JBoss Ent erprise Applicat ion Plat form 6 .1 G uia de Migração
Histórico de Revisão
R evisão 3.0.0- 2
Mo n O ct 13 2014
Built from Content Specification: 11863, Revision: 507564
124
C S B u ild er R o b o t

Documentos relacionados