Pergunta

Estou implementando um arquivo EAR no servidor IBM WebSpehre 6.1 - desejo poder acessar o nome do aplicativo EAR que está armazenado no arquivo de implementação em 'nome de exibição'.Examinando postagens de estouro de pilha sobre assuntos relacionados, consegui concluir que isso é possível por meio da API Java MBean - ou da API WAS da IBM - O problema é que não consigo encontrar um local onde essas listas de API estejam resumidas, ou seja,não consegue descobrir qual deles começar a olhar.Eu poderia codificar o local de instalação do WAS e encontrar o arquivo procurando no diretório 'installedApps', mas isso não é dinâmico.

Alguém tem alguma experiência trabalhando com essas APIs?Alguma outra maneira de localizar dinamicamente o nome de exibição do EAR implantado?

EDIT - Devo acrescentar que o motivo pelo qual gostaria dessas informações é para carregar dinamicamente nossos arquivos de propriedades - que são nomeados pela seguinte convenção "EARAppName.properties" - para que você veja que há uma 'razão' razoável por trás do desejo dessas informações em meu aplicativo

EDIT 2 - Devo também observar que este aplicativo sempre será implantado em um WAS - mas caso não seja, uma solução genérica não proprietária seria preferida, mas não é necessária neste momento.

EDITAR 3 - O que eu quero realizar: Existe uma maneira de localizar dinamicamente o nome de exibição do EAR implantado no código do aplicativo?

Foi útil?

Solução

Se o motivo desse objetivo for a leitura de arquivos de propriedades, eu recomendaria uma abordagem diferente.

Utilize a Biblioteca Compartilhada do WebSphere.

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/tcws_sharedlib.html

Para cada EAR implementado, tenha um diretório separado contendo arquivos de propriedades que precisam ser acessados ​​por esse EAR.

Crie uma entrada de biblioteca compartilhada para cada diretório que contém o arquivo de propriedades.

No EAR, crie uma referência de biblioteca compartilhada para a biblioteca compartilhada necessária.

.

No entanto, os links abaixo podem ser de alguma ajuda para você em sua abordagem:

Gerenciando aplicativos por meio de programação

Gerenciamento de aplicativos de interface

Outras dicas

Não é uma resposta direta, mas não seria mais simples usar um nome codificado para o arquivo de propriedades? Afinal, parece fazer sentido para um determinado aplicativo estar ciente de qual arquivo carregar. Escrever código para ler o nome de exibição em um descritor de implantação parece estranho (especialmente porque você, como Provedor de componentes do aplicativo, não deve confiar em algo de propriedade do Assembler de aplicação).

Estou tentando realizar a mesma coisa aqui. Estou tentando localizar em tempo de execução o nome do aplicativo encontrado no meta-inf/application.xml.

Utilizamos esse nome de appName em nosso Appender de arquivo log4j para criar uma base de nome de arquivo de log adequado no registro do aplicativo atualmente. Temos muitos programadores e muito aplicativo e precisamos aplicar alguma convenção em uma estrutura.

Eu preencher eu poderia simplesmente ligar:

InputStream in = new MyObject().getClass().getResourceAsStream(“META-INF/application.xml”);

Eu também tentei alterar o carregador de classe para 'Parent_last/First' e 'Single Classloader', mas não funciona.

Eu poderia localizar o aplicativo.xml no sistema de arquivos em relação ao meu arquivo de guerra, mas não tenho certeza de que funcionaria o tempo todo.

A API JMX é realmente a única maneira?

Isso não é para o seu aplicativo saber como tal, mas para ferramentas de manipulação de ouvidos, incluindo o servidor de aplicativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top