Suporte a Nomes de Pesquisa em Descritores de Implementação e Clientes Thin
Objetos do servidor de aplicativos, como homes enterprise bean (EJB), são ligados relativamente ao contexto raiz do servidor no qual o aplicativo está instalado. Outros objetos, como recursos, também podem ser ligados a uma raiz de servidor específico. Os nomes utilizados para pesquisar esses objetos devem ser qualificados para selecionar a raiz do servidor correto. Este tópico discute o que são nomes relativos e qualificados, onde eles podem ser utilizados e como você pode construí-los.
Iniciando com a Versão 8.0, os EJB homes são limitados por nome, java:global/appName/moduleName/beanName. Os nomes que se formam não são baseados em topologia e já são completamente qualificados. De forma semelhante, todos os recursos de aplicativo que são ligados com nomes java:global, java:app ou java:module não necessitam de qualificação adicional quando o nome de consulta java:global, java:app ou java:module é especificado. Os recursos de aplicativo como, por exemplo, referências EJB, referências de recursos e entradas de ambiente.
Nomes Relativos
Todos os nomes são relativos a um contexto. Portanto, um nome que pode ser resolvido de um contexto no namespace não necessariamente pode ser resolvido de outro contexto no namespace. Este ponto é significativo porque o sistema liga objetos com nomes relativos ao contexto raiz de servidor do servidor no qual o aplicativo está instalado. Cada servidor tem seu próprio contexto raiz de servidor. O contexto JNDI (Java™ Naming and Directory Interface) é por padrão o contexto raiz do servidor iniciado pela URL do provedor utilizada para obter o contexto inicial. (Em geral, a URL consiste em um host e uma porta.) Para aplicativos em execução em um processo de servidor, o contexto JNDI inicial padrão é a raiz de servidor para esse servidor. Um nome relativo será resolvido com êxito quando o contexto inicial for obtido do servidor que contém o objeto de destino, mas ele não será resolvido com êxito de um contexto inicial obtido de outro servidor.
Se todos os clientes de um aplicativo servidor forem executados no mesmo processo de servidor que o aplicativo, todos os objetos associados a esse aplicativo serão ligados ao mesmo contexto inicial que o contexto inicial do cliente. Neste caso, somente nomes relativos ao contexto raiz de servidor do servidor são exigidos para acessar esses objetos do servidor. Freqüentemente, porém, um aplicativo servidor tem clientes que são executados fora do processo de servidor do aplicativo. O contexto inicial para esses clientes pode ser diferente do contexto inicial do aplicativo servidor, e pesquisas nos nomes relativos para objetos do servidor podem falhar. Esses clientes necessitam utilizar o nome qualificado para os objetos do servidor. Esse ponto deve ser considerado ao configurar os valores jndiName em um descritor de implementação do aplicativo cliente Java Platform, Enterprise Edition (Java EE) e ao construir nomes de consulta nos clientes thin. Os nomes qualificados são resolvidos com êxito de qualquer contexto inicial na célula.
Nomes Qualificados
Todos os nomes são relativos a um contexto. Aqui, o termo nome qualificado se refere a nomes que podem ser resolvidos de qualquer contexto inicial em uma célula. Essa ação é cumprida utilizando nomes que navegam para o mesmo contexto, a raiz da célula. O resto do nome qualificado é relativo à raiz da célula e identifica com exclusividade um objeto por toda a célula. Todos os contextos iniciais em um servidor (ou seja, todos os contextos de nomes em um servidor registrado com o ORB como uma referência principal) contêm uma ligação com o nome cell, a qual se liga de volta ao contexto raiz da célula. Todos os nomes qualificados começam com a cadeia cell para navegar do contexto inicial atual de volta ao contexto raiz da célula.
Um nome qualificado para um objeto é o mesmo por toda a célula. O nome pode ser baseado na topologia ou algum nome fixo ligado sob a raiz persistente da célula. Nomes com base em topologia, descritos com mais detalhes posteriormente nesta seção, navegam por meio do namespace do sistema para atingir o objeto de destino. Um nome fixo ligado sob a raiz persistente da célula tem o mesmo nome qualificado por toda a célula e é independente da topologia. A criação de um nome fixo sob a raiz persistente da célula para um objeto de aplicativo servidor exige uma etapa extra quando o aplicativo servidor é instalado, mas essa etapa elimina impactos para clientes quando o aplicativo é movido para uma localização diferente na topologia da célula. O processo para criar um nome fixo também é descrito posteriormente.
Geralmente, você deve usar nomes qualificados para valores de jndiName EJB em um descritor de implementação do aplicativo cliente Java EE e para nomes de consulta EJB nestes clientes. A única exceção é quando o contexto inicial é obtido do servidor no qual o objeto de destino reside. Por exemplo, um bean de sessão que é um cliente para um bean de entidade pode utilizar um nome relativo se os dois beans executarem no mesmo servidor. Se o bean de sessão e os beans de entidade executarem em servidores diferentes, o jndiName para o bean de entidade deve ser qualificado nos descritores de implementação do bean de sessão. A mesma exigência pode ser verdadeira também para recursos, dependendo do escopo do recurso.
- Nomes Baseados na Topologia
A partição de espaço de nomes do sistema no espaço de nomes de uma célula reflete a topologia da célula. Essa estrutura pode ser navegada para acessar qualquer objeto ligado no namespace da célula. Os nomes qualificados baseados na topologia incluem elementos da topologia que refletem a localização do objeto dentro da célula.
Para um objeto ligado ao sistema, como um início EJB, a forma para um nome qualificado baseado na topologia depende de se o objeto está ligado a um único servidor ou a um cluster. Ambas as formas são descritas a seguir:
- Servidor único
- Um objeto ligado em um servidor único tem um nome qualificado
baseado na topologia com a seguinte forma:
em que nodeName e serverName são o nome do nó e o nome do servidor para o servidor onde o objeto está ligado, e relativeJndiName é o nome não qualificado do objeto; ou seja, o nome do objeto relativo ao contexto raiz de servidor do seu servidor.cell/nodes/nodeName/servers/serverName/relativeJndiName
- Cluster de Servidores
- Um objeto ligado em um cluster de servidores tem um nome qualificado
baseado na topologia com a seguinte forma:
em que clusterName é o nome do cluster de servidores onde o objeto está ligado, e relativeJndiName é o nome não qualificado do objeto; ou seja, o nome do objeto relativo ao contexto raiz de servidor de um membro do cluster.cell/clusters/clusterName/relativeJndiName
- Nomes Fixos
É possível criar um nome fixo para um objeto de servidor para que o nome qualificado seja independente da topologia da célula. Esta qualidade é desejável quando clientes do aplicativo são executados em outros processos de servidor ou como clientes puros. Os nomes fixos têm a vantagem de não mudarem se o objeto for movido para outro servidor. Os valores jndiName nos descritores de implementação de um aplicativo cliente Java EE podem referenciar o nome fixo qualificado para um objeto do servidor, independentemente da topologia de célula na qual o aplicativo cliente ou servidor está sendo instalado.
A definição de um nome fixo com abrangência de célula para um objeto de aplicativo servidor exige uma etapa extra depois que o aplicativo servidor é instalado. Isto é, uma ligação para o objeto deve ser criada sob a raiz persistente da célula. Um nome fixo ligado sob a raiz persistente da célula pode ser qualquer nome, mas todos os nomes sob a raiz persistente da célula devem ser exclusivos dentro da célula porque a raiz persistente da célula é global para a célula inteira.
Um nome fixo qualificado tem a forma:
em que fixedName é um nome fixo arbitrário.cell/persistent/fixedName
A ligação pode ser criada programaticamente (por exemplo, utilizando JNDI). Contudo, provavelmente é mais conveniente configurar uma ligação com escopo de célula para o objeto de servidor.
É preciso manter a ligação programática ou configurada atualizada. As ligações EJB configuradas são baseadas no local do enterprise bean na topologia da célula, e mover o aplicativo EJB para outro servidor, por exemplo, exige que a ligação configurada esteja atualizada. Alterações similares afetam uma referência de início EJB ligada programaticamente e, portanto, o nome fixo precisaria ser religado com uma referência atual. Entretanto, para clientes Java EE, o valor jndiName para o objeto, e para clientes thin, o nome de consulta do objeto, permanece o mesmo. Em outras palavras, os clientes que acessam objetos por nomes fixos não são afetados por alterações à configuração de aplicativos servidores que eles acessem.
Usando nomes de consulta nas ligações do descritor de implementação
Os aplicativos Java EE podem conter descritores de implementação, como ejb-ref, resource-ref e resource-env-ref, que são usados para declarar vários tipos de referências. Estas declarações de referência definem nomes de consulta java:comp/env que estão disponíveis para componentes Java EE correspondentes. Cada nome de consulta java:comp/env deve ser mapeado para um nome de consulta no espaço de nome global, relativo ao contexto raiz do servidor, que é o contexto JNDI inicial padrão.
Se uma referência for mapeada para um objeto que está limitado no contexto raiz do servidor para o mesmo servidor do componente que está executando a consulta, poderá usar um nome de consulta relativo. Se uma referência for mapeada para um objeto que está limitado no contexto raiz do servidor de outro servidor, será necessário qualificar o nome de consulta. Por exemplo, é necessário qualificar um nome de consulta se um servlet, que está sendo executado em um servidor, declarar um ejb-ref para um EJB que está sendo executado em outro servidor. Da mesma forma, se a referência for mapeada para um objeto que está limitado a uma partição persistente do espaço de nomes ou para um objeto que está limitado a uma ligação de espaço de nomes configurado por um escopo de célula ou escopo de nó, será necessário usar um nome qualificado.
É possível especificar os valores de ligação de referência do descritor de implementação ao instalar o aplicativo e editá-los depois que o aplicativo for instalado. Se você precisar alterar o nome da consulta do JNDI para o qual uma referência é mapeada, no console administrativo, clique em Nome JNDI de Recurso de Destino.
. Na seção Referências, há links que correspondem aos vários tipos de referência, como as referências EJB e referências de entrada de ambiente de Recursos, que são declaradas por este aplicativo. Clique no link para o tipo de referência que você precisa alterar e especifique um novo valor no campo