Glassfish: modifique os descritores de implementação para EAR durante a implementação

Depois de vários dias pesquisando, tentando e batendo cabeça, eu coloco essa pergunta no SO, embora pareça ser respondida já.

Aqui está o cenário: Eu tenho um aplicativo EAR contendo (no momento) um módulo WAR e um módulo EJB. O módulo EJB usa JPA (persistence.xml) e alguns Stateless Session Beans são expostos via Web Services. Os serviços da Web usam a autenticação básica com um território jdbc. O módulo da web usa autenticação de formulário com o mesmo domínio.

O requisito : Eu preciso ser capaz de implantar esse aplicativo em servidores diferentes (dev / test / prod) ou no mesmo servidor (ou cluster) com diferentes descritores de implantação. As configurações de implantação que precisam ser diferentes em cada instância do aplicativo são:

  • A fonte de dados jta em persistence.xml
  • O nome do território no web.xml
  • O javax.faces.PROJECT_STAGE no web.xml
  • O ponto de extremidade do serviço da Web \ endpoint-address-uri e login-config \ realm no glassfish-ejb-jar.xml
  • A raiz de contexto em application.xml (eu poderia movê-lo para web.xml se fizesse alguma diferença, veja abaixo)
  • O reino em glassfish-application.xml

Durante minha pesquisa, consegui o seguinte:

  • Eu posso sobrescrever o javax.faces.PROJECT_STAGE usando asadmin set-web-context-param
  • Eu posso replace todas as configurações no glassfish-ejb-jar.xml usando um plano de implementação durante asadmin deploy
  • O mesmo se aplica para glassfish-application.xml
  • Eu provavelmente posso replace a raiz de contexto durante a asadmin deploy (não sei como isso funcionaria com mais de um módulo da Web no EAR)

Por enquanto, tudo bem. Isso me deixa com os seguintes problemas:

  • Como posso modificar facilmente o nome da região no web.xml?
  • Como posso modificar facilmente a fonte de dados jta em persistence.xml?

Por facilmente quero dizer durante a implantação ou usando algo semelhante a um flask de plano de implantação. Manter várias cópias do ejb.jar ou war apenas com um arquivo .xml modificado não é uma opção.

Só para ficar claro, a necessidade é ter bancos de dados diferentes (seja em diferentes estágios de desenvolvimento ou para clientes diferentes) usando o mesmo aplicativo. O aplicativo usa uma unidade de persistência, mas precisa apontar para bancos de dados diferentes (daí a fonte de dados jta). O território é um domínio jdbc (no mesmo database) que também precisa ser diferente por instância do aplicativo .

Qualquer ajuda ou ponteiro seria muito apreciado.