Exemplo: Obtendo um Contexto Inicial com CosNaming
No WebSphere Application Server um contexto inicial é obtido de um servidor de auto-inicialização. O endereço para o servidor de bootstrap consiste em um host e porta. Para obter um contexto inicial, é preciso conhecer o host e a porta para o servidor que é utilizado como o servidor de bootstrap.
A obtenção de um contexto inicial consiste em duas etapas básicas:
- Obter uma referência ORB.
- Utilizar uma referência ORB para obter um contexto adicional. Alternativamente, use um ORB existente e chame string_to_object com uma URL do objeto CORBA com vários endereços de servidor de nomes para obter um contexto inicial.
Obtendo uma Referência de ORB
Clientes CosNaming puros, ou seja, clientes que não estão em execução em um processo de servidor, devem criar e inicializar uma instância de ORB a qual é utilizada para obter o contexto inicial. Os clientes CosNaming que são executados em processos de servidor podem obter uma referência para o ORB do servidor com uma pesquisa JNDI. Os exemplos a seguir ilustram como criar e inicializar um ORB de cliente e como obter uma referência de ORB de servidor.
Criando uma Instância de ORB de Cliente
Para criar uma instância de ORB, chame o método estático org.omg.CORBA.ORB.init. O método init exige uma propriedade definida como o nome da classe de ORB que você deseja instanciar. Uma implementação de ORB com o nome da classe com.ibm.CORBA.iiop.ORB é incluída com o produto. O ORB do WebSphere Application Server reconhece propriedades adicionais com as quais você pode especificar referências iniciais.
As etapas básicas para criar um ORB são as seguintes:
- Crie um objeto Properties.
- Defina a propriedade da classe de ORB como a classe de ORB do produto.
- Defina as propriedades de referência iniciais.
- Chame ORB.init, transmitindo o objeto Properties.
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[Windows]](../images/windows.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass", "com.ibm.CORBA.iiop.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
![[z/OS]](../images/ngzos.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
![[IBM i]](../images/iseries.gif)
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService",
"corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot",
"corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
Obtendo uma Referência para o ORB do Servidor
Os clientes CosNaming que são executados em um processo de servidor podem obter uma referência para o ORB do servidor com uma pesquisa JNDI em um nome java:, mostrada a seguir:
...
import javax.naming.Context;
import javax.naming.InitialContext;
import org.omg.CORBA.ORB;
...
Context initialContext = new InitialContext();
ORB orb = (ORB) initialContext.lookup("java:comp/ORB");
...
Utilizando uma Referência de ORB para Obter uma Referência de Nomes Inicial
Há duas maneiras básicas para obter uma contexto de CosNaming inicial. As duas maneiras envolvem uma chamada de método de ORB. A primeira maneira é chamar o método resolve_initial_references no ORB com uma chave de referência inicial. Para que esta chamada funcione, o ORB deve ser inicializado com uma referência inicial para essa chave. A outra maneira é chamar o método string_to_object no ORB, transmitindo uma URL de objeto CORBA com o host e a porta do servidor de bootstrap. Os exemplos a seguir ilustram ambas as abordagens.
Chamando resolve_initial_references
Depois que uma referência de ORB é obtida, chame o método resolve_initial_references no ORB para obter uma referência para o contexto inicial. O exemplo de código a seguir chama resolve_initial_reference em uma referência de ORB.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obter referência de ORB como mostrado em exemplos anteriores nesta seção
...
org.omg.CORBA.Object obj = _orb.resolve_initial_references("NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...
Observe que a chave NameService é transmitida para o método resolve_initial_references. Outras chaves do contexto inicial são registradas em servidores de produtos. Por exemplo, NameServiceServerRoot pode ser utilizado para obter uma referência ao contexto raiz do servidor no servidor de nomes de bootstrap. Para obter informações adicionais sobre os contextos iniciais registrados nos ORBs de servidor, consulte o tópico sobre suporte de contexto inicial .
Chamando string_to_object com um URL de Objeto CORBA
É possível utilizar um ORB compatível com INS para obter um contexto inicial mesmo se o ORB não estiver inicializado com nenhuma referência inicial ou propriedade de bootstrap, ou se essas definições de propriedades forem para um servidor diferente do servidor de nomes do qual você deseja obter o contexto inicial. Para obter um contexto inicial especificando explicitamente o servidor de nomes de bootstrap, chame o método string_to_object no ORB, transmitindo uma URL de objeto CORBA que contenha o host e a porta do servidor de bootstrap.
O código no exemplo a seguir chama o método string_to_object em uma referência de ORB existente, transmitindo uma URL de objeto CORBA que identifica o contexto inicial desejado.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obter referência de ORB como mostrado em exemplos anteriores nesta seção
...
org.omg.CORBA.Object obj =
orb.string_to_object("corbaloc:iiop:myhost.mycompany.com:2809/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...
Observe que a chave NameService é utilizada na URL corbaloc. Outras chaves do contexto inicial são registradas em servidores de produtos. Por exemplo, NameServiceServerRoot pode ser utilizado para obter uma referência ao contexto raiz do servidor no servidor de nomes de bootstrap.
Usando um ORB Existente e Chamando o string_to_object com uma URL de Objeto CORBA
Os URLs de objeto CORBA podem conter mais de um endereço de servidor de bootstrap. Utilize esse recurso ao tentar obter um contexto inicial de um cluster de servidores. É possível especificar no URL os endereços dos servidores de bootstrap para todos os servidores no cluster. A operação obterá êxito se pelo menos um dos servidores estiver em execução, eliminando um ponto único de falha. Não existe garantia de uma ordem específica na qual a lista de endereços será processada. Por exemplo, o segundo endereço de servidor de bootstrap pode ser utilizado para obter o contexto inicial mesmo que o primeiro servidor de bootstrap na lista esteja disponível. Um exemplo de um URL corbaloc com vários endereços é mostrado a seguir.
...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Suponha que orb é uma instância de ORB existente
org.omg.CORBA.Object obj = orb.string_to_object(
"corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...