Tenho um aplicativo web (war - somente servlets e jsps) e preciso utilizar alguns recursos de aplicativos enterprise (ear - ejb, jms, wars…) então quero passar a distribuí-lo no JBoss, porém hoje fazemos deploy de várias instancias deste mesmo aplicativo no mesmo servidor (tomcat), porque temos um produto que mantemos para vários clientes (a única diferença entre as instancias é o banco de dados que cada uma acessa, e algumas configurações em properties).
Seria possível ter várias instancias do mesmo aplicativo (ear) no mesmo jboss?
E enquanto ao jndi dos ejbs, e namespaces do ejbs e datasources que compartilham o mesmo namespace?
Alguém faz esse tipo de coisa, ou sabe se é possível?
Exatamente o mesmo não, mas acho que você poderia chegar a algo próximo disto usando o seguinte artifício:
Refatore seu código de forma que o código nos componentes do EAR façam referência apenas a nomes JNDI no namespace local (“comp”).
Use o mecanismo de “alt-dd” para injetar descritores específicos de cada cliente no ear básico, onde vc. fará as associações dos nomes lógicos de datasources utilizados com os nomes fisicos, resultando em um ear parametrizado para o cliente.
O passo 2 deve ser automatizado via ant ou algo semelhante, simplificando assim o processo de implantação.
andrefariagomes
Este recurso de alt-dd funciona com JBoss?
Na documentação não consta nada…
P
psevestre
andrefariagomes:
Este recurso de alt-dd funciona com JBoss?
Na documentação não costa nada…
Faz parte da spec e o JBoss diz que está em conformidade, portanto assumo que sim. Note que alguns dos mapeamentos podem ser controlados via descritores específicos do JBoss (jboss-app, jboss-web). O princípio seria o mesmo: um ear “genérico” que seria customizado via adição de descritores, gerando assim um ear específico para o cliente.
andrefariagomes
Ótimo!!! Muito obrigdo pela dica!
Porém estou com um último problema…
No persistent unit eu tenho que definir um datasource (persistence.xml):
e este datasource é criado através de um arquivo *-ds.xml que é colocado no JBoss e o JBoss sempre o cria em dominio publico no JNDI…
Sabe como eu poderia resolver este problema sem ter que criar um arquivo persistence.xml para cada cliente?
Troque o “java:/tecDS” por um nome local à aplicação, p.ex java:comp/env/jdbc/tecDS.
No arquivo jboss.xml vc. faz o bind deste nome para o nome do datasource específico do cliente.
Dê uma olhada na documentação do JBoss sobre “ENC names”, onde há informação detalhada sobre o assunto.
O seguinte erro me é apresentado:
— MBeans waiting for other MBeans —
ObjectName: persistence.units:ear=tec-importer-ear.ear,jar=tec-ejb-finanImporter.jar,unitName=tecPU
State: NOTYETINSTALLED
I Depend On:
jboss.jca:name=comp/env/tecDS,service=DataSourceBinding
Depends On Me:
jboss.j2ee:ear=tec-importer-ear.ear,jar=tec-ejb-finanImporter.jar,name=TecFinanImporterBean,service=EJB3
O que pode estar faltando?
P
psevestre
Tente colocar o “nome completo” (java:/comp/env…) no persistence.xml
andrefariagomes
hummm. …
não resolve…
A
apalmeira
Olá amigo,
você conseguiu resolver? estou com o mesmo problema!