38 コンポジット・サービスの起動に直接バインディングを使用

この章では、直接バインディング起動APIおよびSOAコンポジット・アプリケーションの起動方法について説明します。ここでは、インバウンド直接バインディング・サービスの作成方法、アウトバウンド直接バインディング参照の作成方法および直接バインディングを起動するJava 2 Platform Standard Edition (J2SE)クライアントのアイデンティティの設定方法について説明します。直接バインディング起動APIの使用のサンプルについても示します。

この章の内容は次のとおりです。

38.1 直接バインディングの概要

通常、コンポジットの起動にはSOAP over HTTPを使用します。このためには、Webサービス・バインディングを使用してコンポジットのSOAPサービスを作成する必要があります。これに対して、直接バインディングを使用すると、より緊密な統合を作成できます。Javaクライアントは、直接バインディングを使用してコンポジット・サービスを直接起動できるため、Webサービス・バインディングで必要なXMLへの中間変換が不要になります。

直接バインディングでは、次の2種類の起動スタイルがあります。

  • インバウンド直接バインディング

    直接サービス・バインディング・コンポーネントを使用すると、外部クライアントは直接バインディング起動APIを使用してメッセージを送信できます。この場合、直接バインディング起動APIでは、JNDI接続パラメータを使用し、クライアントにかわって接続オブジェクトが作成されます。

  • アウトバウンド直接バインディング(直接参照バインディング)

    直接参照バインディング・コンポーネントでは、Remote Method Invocation (RMI)を介した外部サービスへのSOAメッセージの直接送信がサポートされています。直接インバウンド起動APIと同様に、外部サービスではSOA起動APIを実装する必要があります。

    直接アウトバウンド・バインディングの場合、接続オブジェクトは、バインディングに対して構成された外部サービスBeanのJNDI名を使用して作成されます。

直接バインディングは、interface句、およびcallbackInterface句(オプション)を提供するinterface.wsdlに関連付けられている必要があります。また、コンポジットには、関連するWSDLがインポートされている必要があります。

サービス・バインディング・コンポーネントは、直接バインディングを通知するWSDLの変更済バージョンも公開します。

38.1.1 直接サービス・バインディング・コンポーネント

次の例は、直接サービス・バインディング・コンポーネントを使用するサンプル構成を示しています。

<service name="direct2">
      <interface.wsdl
interface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(asyncNonConvD
ocLit)"
callbackInterface="http://xmlns.oracle.com/asyncNonConvDocLit#wsdl.interface(async
NonConvDocLitCallback)" xmlns:ns="http://xmlns.oracle.com/sca/1.0"/>
      <binding.direct/>
</service>

38.1.2 直接参照バインディング・コンポーネント

直接参照バインディング・コンポーネントでは、ユーザー指定のSOAインボーカに接続するために次の情報が必要です。

  • プロパティ:

    エンド・サービスのDirectConnectionを定義する一連のプロパティ(oracle.soa.management.facade.Locatorを参照)。

  • ConnectionFactoryクラス名(oracle.soa.management.facade.Locatorを参照)。

    ConnectionFactoryクラスはoracle.soa.api.invocation.DirectConnectFactoryインタフェースを実装する必要があります。

    ConnectionFactoryクラス名を指定しない場合は、デフォルトのoracle.soa.api.JNDIDirectConnectionFactoryが使用されます。デフォルトのコネクション・ファクトリを使用するには、EJBのルックアップ名を指定する必要があります。

  • 外部サービスで使用されるアドレス

    このアドレス値は、バインディング・コンポーネントでは処理されませんが、起動時にサービスBeanに渡されます。

  • addressingVersion (オプション):

    デフォルトで使用されるアドレッシング・バージョンは2005/08.です。

  • useSSLForCallback:

    コールバックJNDI接続にSecure Socket Layer (SSL)を使用します。このフラグをtrueに設定すると、WS-AddressingのreplyToヘッダーは、サービスにSSL JNDIポートでのコールバックを指示します。

次の例にサンプルの構成を示します。

<reference name="HelloReference" ui:wsdlLocation="HelloService.wsdl">
  <interface.wsdl
 interface="http://hello.demo.oracle/#wsdl.interface(HelloInterface)"/>
  <binding.direct connection-factory="oracle.soa.api.JNDIDirectConnectionFactory"
   addressingVersion="http://www.w3.org/2005/08/addressing"
   address="soadirect://syncOut"
   useSSLForCallback="false">
  <property
 name="oracle.soa.api.invocation.direct.bean">MyDirectTestServiceBean#directEjb.Tes
tInvoker</property>
  <property
 name="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</property
>
 <property name="java.naming.provider.url">t3://@host:@port</property>
 </binding.direct>
</reference>

直接バインディング・コンポーネントでは、同期および非同期の両方の起動パターンがサポートされています。図38-1で同期起動パターンのサンプルを、図38-2で非同期起動パターンのサンプルを説明します。

図38-1 同期起動パターンのサンプル

図38-1の説明が続きます
「図38-1 同期起動パターンのサンプル」の説明

図38-2 非同期起動パターンのサンプル

図38-2の説明が続きます
「図38-2 非同期起動パターンのサンプル」の説明

38.2 直接バインディング起動APIの概要

次に、直接バインディング起動APIで使用する各種パッケージを示します。

  • oracle.soa.management.facade.Locator

    oracle.soa.management.facade.Locatorインタフェースは、直接接続を返すcreateConnectionメソッドを公開します。次の例に示すように、LocatorDirectConnectionを返すためのメソッドを公開します。

    import java.util.Map;
    public interface DirectConnectionFactory {
        DirectConnection createDirectConnection(CompositeDN compositeDN,
     String serviceName) throws Exception;
    

    次の例に示すように、LocatorFactory実装を使用してDirectConnectionを取得できます。

    Hashtable jndiProps = new Hashtable();
    jndiProps.put(Context.PROVIDER_URL, "t3://" + hostname + ':' + portname + "/soa-infra");
    jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    jndiProps.put(Context.SECURITY_PRINCIPAL,"weblogic");
    jndiProps.put(Context.SECURITY_CREDENTIALS,"welcome1");
    jndiProps.put("dedicated.connection","true");
    Locator locator = LocatorFactory.createLocator(jndiProps);
    CompositeDN compositedn = new CompositeDN(domainName, compositename, version);
    String serviceName = "HelloEntry";
    return locator.createDirectConnection(compositedn, serviceName);
    
  • oracle.soa.api.invocation.DirectConnection

    DirectConnectionインタフェースは、直接バインディングを使用してコンポジット・サービスを起動します。詳細は、Oracle SOA Suiteインフラストラクチャ管理のJava APIリファレンスを参照してください。

  • oracle.soa.api.message.Message

    Messageインタフェースは、交換されたデータをカプセル化します。詳細は、Oracle SOA Suiteインフラストラクチャ管理のJava APIリファレンスを参照してください。

38.2.1 同期直接バインディング起動

直接バインディングでは、次の例に示すメソッドを使用した同期直接起動もサポートされています。

<T> Message<T> request(String operationName, Message<T> message)
 throws InvocationException, FaultException

38.2.2 非同期直接バインディング起動

非同期起動は、メッセージ・インスタンスに設定されているWS-Addressingヘッダーに依存します。すべてのヘッダーはWS-Addressing仕様に準拠している必要があります。

直接バインディング起動APIを使用すると、クライアントはWS-AddressingのReplyTo SOAPヘッダーを指定し、宛先と通信してレスポンスを受信できます。

ノート:

サポートされているアドレッシング・バージョンは次のとおりです。

下に、非同期起動に使用されるWS-Addressingヘッダーの例を示します。

<wsa:MessageID>D6202742-D9D9-4023-8167-EF0AB81042EC</wsa:MessageID>
   <wsa:ReplyTo xmlns:wsa="http://www.w3.org/2005/08/addressing">
     <wsa:Address>sb://testserver:9001/callback</wsa:Address>
      <wsa:ReferenceParameters>
        <soa:callback xmlns:soa="http://xmlns.oracle.com/soa/direct"
           connection-factory="mytest.MyDirectionConnectionFactory">
        <soa:property name="oracle.soa.api.invocation.direct.bean"
           value="myTest.MyDirectConnectionBean"/>
        <soa:property name="java.naming.provider.url" value="t3://test:8001"/>
        <soa:property name="java.naming.factory.initial"
           value="weblogic.jndi.WLInitialContextFactory"/>
        </soa:callback>
      </wsa:ReferenceParameters>
   </wsa:ReplyTo>

ノート:

コールバックとそのプロパティ要素は、SOA直接ネームスペースを使用して正しく修飾する必要があります。

直接バインディング・コンポーネントは、メッセージ・インスタンスに設定されたAddressingヘッダーの解析を担当します。この例には、wsa:MessageIDおよびwsa:ReplyToの2つのヘッダーがあります。サービス・バインディング・コンポーネントでは、内部SOAコンポーネントに対して次のプロパティが使用可能になります。

  • replyToAddress = sb://testserver:9001/callback

  • replyToReferenceParameter: WSAの要素: ReferenceParameters

38.2.3 直接バインディングJavaクライアント・コードをコンパイルおよび実行するために必要なJARファイル

直接バインディングJavaクライアント・コードのコンパイルには、次のJARファイルが必要です。

  • $FMWHOME/soa/soa/modules/oracle.soa.mgmt_11.1.1/soa-infra-mgmt.jar

直接バインディングJavaクライアント・コードの実行には、次のJARファイルが必要です。

  • $FMWHOME/wlserver/server/lib/wlthint3client.jar

  • $FMWHOME/soa/soa/modules/oracle.soa.fabric_11.1.1/oracle-soa-client-api.jar

38.2.4 SOA直接アドレス構文

直接バインディング起動APIで使用するサービス・パスは、SOA直接アドレス・パターンに従います。

  • soadirect:/CompositeDN/serviceName (CompositeDNはコンポジット識別名)

SOA直接アドレスでは、CompositeDNの形式は次のとおりです(labelはオプションです)。

domainName/compositeName[!compositeVersion[*label]]

38.2.5 SOAトランザクション伝播

直接バインディングでは、SOAトランザクション伝播機能がサポートされています。この機能は、次の2つの方法でクライアントから起動できます。

  • クライアントからJavaトランザクションを開始し、すべてのデータベース操作を実行した後にコミットします。データベース操作は、クライアント側からの正常なコミットの後にコミットする必要があります。

  • クライアント側からJavaトランザクションを開始します。SOAコンポジットで操作中にフォルトがスローされた場合は、クライアント側からトランザクションをロールバックします。これで、すべてのデータベース操作がロールバックされます。

38.3 SOA-DIRECTトランスポートを使用した例外処理

Oracle BPELでSOA直接バインディングを使用してスローされたSOAPフォルトを捕捉するには、SOAPフォルトが次のガイドラインに準拠している必要があります。サービスが次のWSDLポートで定義され、http://www.example.org/MyServiceというネームスペースであるとします。

<wsdl:portType name="MyServicePortType">
<wsdl:operation name="Execute">
<wsdl:input message="exp:ExecuteRequestMsg"/>
<wsdl:output message="exp:ExecuteResponseMsg"/>
<wsdl:fault name="executeFault" message="exp:ExecuteFaultMsg"/>
<wsdl:fault name="genericFault" message="exp:GenericFaultMsg"/>
</wsdl:operation>
</wsdl:portType>
SOAPフォルトをスローする際には、WSDLポートで宣言されているフォルトの修飾名を含める必要があります。SOAP 1.1メッセージの場合は、次に示すように、faultcode要素にWSDLポート・フォルトのQNameを含める必要があります。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
	<soapenv:Body>
		<soapenv:Fault xmlns:ns0="http://www.example.org/MyService">
		<faultcode>ns0:genericFault</faultcode>
		<faultstring/>
		<faultactor/>
		<detail>
			<GenericFault xmlns="http://www.example.org/FaultInfo">
			<FaultInfo>
				<ErrorDescription>Error - soap1.1</ErrorDescription>
			</FaultInfo>
			</GenericFault>
		</detail>
		</soapenv:Fault>
	</soapenv:Body>
</soapenv:Envelope> 
SOAP 1.2メッセージの場合は、次に示すように、Code/Subcode/Value要素にWSDLポート・フォルトのQNameを含める必要があります。
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
	<soap:Header xmlns:exem="http://www.example.org/MyService"/>
	<soap:Body xmlns:exem="http://www.example.org/MyService">
		<soap:Fault>
			<soap:Fault>
				<soap:Value>soap:Receiver</soap:Value>
				<soap:Subcode>
					<soap:Value  xmlns:ns1=" soap:value>"="" target="_blank">http://www.example.org/MyService">ns1:genericFault</soap:Value>
				</soap:Subcode>
			</soap:Code>
			<soap:Reason>
				<soap:Text xml:lang="pt">Failure calling partner.</soap:Text>
			</soap:Reason>
			<soap:Node>...</soap:Node>
			<soap:Detail>
				<err:GenericFault xmlns:err="http://www.example.org/FaultInfo">
					<err:FaultInfo>
						<err:ErrorDescription>Error Desc</err:ErrorDescription>
					</err:FaultInfo>
				</err:GenericFault>
			</soap:Detail>
		</soap:Fault>

	</soap:Body>
</soap:Envelope>

38.4 起動APIを使用したOracle JDeveloperでのSOAコンポジット・アプリケーションの起動

Oracle JDeveloperの「コンポーネント」ウィンドウの「直接」アイコン(図38-3を参照)では、RMIでのSOAとのSOAメッセージ交換がサポートされています。

図38-3 「直接バインディング」オプション

図38-3の説明が続きます
「図38-3 「直接バインディング」オプション」の説明

Oracle JDeveloperでは、Oracle Service Busまたは別のSOAコンポジットのいずれかを起動する直接サービス・バインディングと直接参照バインディングの作成がサポートされています。

ノート:

クライアントが直接バインディングを使用してコンポジット・サービスを起動するには、そのクラスパスにsoa-infra-mgmt.jarwlthint3client.jarおよびoracle-soa-client-api.jarが含まれている必要があります。

直接バインディング起動APIの詳細は、「直接バインディング起動APIの概要」を参照してください。

38.4.1 インバウンド直接バインディング・サービスの作成方法

Oracle JDeveloperの「コンポーネント」ウィンドウの「直接」アイコンを使用して、SOAコンポジット・アプリケーションを起動できます。

インバウンド直接バインディング・サービスを作成するには:

  1. Oracle JDeveloperを開きます。
  2. 「コンポーネント」ウィンドウで、「SOA」を選択します。
  3. 「テクノロジ」リストから、「直接」アイコンを「公開されたサービス」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。
  4. 表38-1に記載されている詳細を入力します。

    表38-1 「直接バインディングの作成」ダイアログのフィールドと値

    フィールド

    名前

    名前を入力します。

    タイプ

    リストから「サービス」を選択します。

    参照ターゲット

    このサービスを「公開されたサービス」スイムレーンで定義する場合、このフィールドは無効になります。

    WSDL URL

    WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。それ以外の場合は、「スキーマからWSDLを生成します。」をクリックします。

    ポート・タイプ

    WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。

    コールバック・ポート・タイプ

    非同期プロセスのコールバック・ポート・タイプ。

    コールバックに対するSSLの使用

    コールバックに対してSSLを使用する場合に選択します。

    アドレス

    WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

    プロバイダURL

    WSDLが具体的で少なくとも1つの直接バインディングがある場合、このフィールドは自動的に移入されます。

    ローカルJNDIプロバイダの使用

    ローカルJNDIプロバイダを使用する場合に選択します。

    WSDLとその依存アーティファクトをプロジェクトにコピー。

    このチェック・ボックスを選択解除します。このチェック・ボックスを選択した場合、リモートWSDLが更新されると、WSDLファイルのローカル・コピーに同期の問題が発生する可能性があります。

    完了すると、図38-4に示すように、「直接バインディングの作成」ダイアログが表示されます。

    図38-4 「直接バインディングの作成」ダイアログ

    図38-4の説明が続きます
    「図38-4 「直接バインディングの作成」ダイアログ」の説明
  5. 「OK」をクリックします。

    図38-5に示すように、直接バインディング・サービスがSOAコンポジット・エディタに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング・コンポーネントであることを示します。

    図38-5 直接バインディング・サービス

    図38-5の説明が続きます
    「図38-5 直接バインディング・サービス」の説明

38.4.2 アウトバウンド直接バインディング参照の作成方法

SOAコンポジット・アプリケーションまたはOracle Service Busのいずれかを起動するために、Oracle JDeveloperの「コンポーネント」ウィンドウの「直接」アイコンを使用して、アウトバウンド直接バインディング参照を作成できます。

ノート:

Oracle SOA SuiteOracle Service Busが異なるドメインにある場合、それらのドメイン間の信頼を有効化する必要があります。

アウトバウンド直接バインディング参照を作成するには:

  1. Oracle JDeveloperを開きます。
  2. 「コンポーネント」ウィンドウで、「SOA」を選択します。
  3. 「テクノロジ」リストから、「直接」アイコンを「外部参照」スイムレーンにドラッグします。「直接バインディングの作成」ダイアログが表示されます。
  4. 表38-2に記載されている詳細を入力します。

    表38-2 「直接バインディングの作成」ダイアログのフィールドと値

    フィールド

    名前

    名前を入力します。

    タイプ

    リストから「参照」を選択します。

    参照ターゲット

    直接バインディング・サービスの実行先となる参照ターゲットを選択します。

    • Oracle SOAコンポジット: SOAコンポジット・アプリケーションを参照ターゲットとして直接バインディングを作成します。

    • Oracle Service Bus: Oracle Service Busを参照ターゲットとして直接バインディングを作成します。

    WSDL URL

    WSDLファイルのURLの場所。既存のWSDLがある場合は、「既存のWSDLを検索します。」オプションをクリックします。

    ポート・タイプ

    WSDLファイルのポート・タイプ。リストからポート・タイプを選択する必要があります。

    コールバック・ポート・タイプ

    非同期プロセスのコールバック・ポート・タイプ。

    コールバックに対するSSLの使用

    コールバックに対してSSLを使用する場合に選択します。

    アドレス

    具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

    プロバイダURL

    具体的なWSDL URLとポート・タイプを選択した場合、このフィールドは自動的に移入されます。ただし、具体的でないWSDLが指定されている場合、このフィールドは手動で入力する必要があります。

    ローカルJNDIプロバイダの使用

    ローカルJNDIプロバイダを使用する場合に選択します。

    WSDLとその依存アーティファクトをプロジェクトにコピー。

    このチェック・ボックスを選択解除します。このチェック・ボックスを選択した場合、リモートWSDLが更新されると、WSDLファイルのローカル・コピーに同期の問題が発生する可能性があります。

    完了すると、図38-6に示すように、「直接バインディングの作成」ダイアログが表示されます。Oracle SOA SuiteのサービスをOracle Service Busで使用する方法の詳細は、『Oracle Service Busでのサービスの開発』「Oracle SOA Suiteのトランスポート(SOA-DIRECT)」を参照してください。

    図38-6 「直接バインディングの作成」ダイアログ

    図38-6の説明が続きます
    「図38-6 「直接バインディングの作成」ダイアログ」の説明
  5. 「OK」をクリックします。

    図38-7に示すように、直接バインディング参照がデザイナに表示されます。丸囲みの1本の矢印は、同期する一方向の直接バインディング参照コンポーネントであることを示します。

    図38-7 直接バインディング参照

    図38-7の説明が続きます
    「図38-7 直接バインディング参照」の説明

38.4.3 直接バインディングを起動するJ2SEクライアントのアイデンティティの設定方法

次の例に示すように、JNDIルックアップのプロセス中にサーバーに対してJNDIセキュリティ資格証明を渡すことによる認証時に、ユーザー・アイデンティティを確立できます。

public static void main(String[] args) throws Exception {
    String operation = "process";

    // This is the request message XML
    String ns = "http://xmlns.oracle.com/DirectBinding_jws/EchoBPEL/BPELProcess1";
    String payloadXML = "<ns1:process xmlns:ns1=\"" + ns + "\">\n" +
                        "  <ns1:input>wew</ns1:input>\n" +
                        "</ns1:process>"; 

    String serviceAddress = "soadirect:/default/EchoBPEL!1.0/DService1";

    // Specify the direct binding connection properties
    Map<String, Object> props = new HashMap<String, Object>();
    props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    props.put(Context.PROVIDER_URL, "t3://" + hostname + ':' + portname);
    props.put(Context.SECURITY_PRINCIPAL,username);
    props.put(Context.SECURITY_CREDENTIALS, password);

    // Create the direct binding connection, using those context properties
    DirectConnectionFactory factory = JNDIDirectConnectionFactory.newInstance();

    try {
       DirectConnection dc = factory.createConnection(serviceAddress, props);

        // Parse the XML request message
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        Document doc =
          dbf.newDocumentBuilder().parse(new InputSource(new StringReader(payloadXML)));

        // Prepare the payload for inclusion in the Message object
        Map<String, Element> payload = new HashMap<String, Element>();
        payload.put("payload", doc.getDocumentElement());

        Message<Element> request = XMLMessageFactory.getInstance().createMessage(payload);

        Message<Element> response = dc.request(operation, request);
    } finally {
        dc.close();
    }
}

38.4.4 同一のサーバー名/ドメイン名を持つホスト上でのSOAコンポジットの呼出しに関する必知事項

あるSOAコンポジット・アプリケーションが、異なるホスト上の別のSOAコンポジット・アプリケーションを直接バインディングを介して呼び出し、両コンポジットが同一のサーバー名/ドメイン名を持つホスト上にある場合、呼出しが失敗します。

これは、Oracle WebLogic Serverトランザクション・サブシステムでは、トランザクション管理が正常に機能するためにドメイン名およびサーバー名が異なっている必要があるためです。トランザクション・サブシステムは、これらの名前を使用してトランザクションに関連するサーバーの場所をトラッキングします。呼出し時に2つのサーバーが同一の名前を持つ場合、トランザクション・サブシステムは間違って2つのサーバーを混同してしまいます。

別個のサーバー名およびドメイン名を持つホストを使用するようにしてください。

38.5 直接バインディング起動APIの使用例

この項では、APIの使用方法について説明します。接続パラメータを設定し、直接バインディングによってSOAコンポジット・アプリケーションを起動する方法、および直接バインディング起動を起動するようにメッセージ・オブジェクトを変更する方法を示します。

// The JNDIDirectConnectionFactory can be used to establish SOA instance
// connections for exchanging messages over the direct binding.
DirectConnectionFactory dcFactory = JNDIDirectConnectionFactory.newInstance();

// Connections are created based on the configuration, which is a map of standard
// naming properties, which will be used for the underlying connection lookup.
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Context.INITIAL_CONTEXT_FACTORY, jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://HOST:PORT");
properties.put(Context.SECURITY_PRINCIPAL, USERNAME); 
properties.put(Context.SECURITY_CREDENTIALS, PASSWORD);
DirectConnection conn =
    dcFactory.createConnection("soadirect:/default/MyComposite!1.0/MyService",
                               properties);
// Messages are created using the MessageFactory
// Message objects are subsequently modified to be used for an invocation.
Message<Element> request = XMLMessageFactory.getInstance().createMessage();

// Define a Map of WSDL part names to matching XML Element objects
Map<String, Element> partData;

Payload<Element> payload = PayloadFactory.createXMLPayload(partData);
request.setPayload(payload);

// One-way invocation
conn.post("onewayoperation", request);

// Request-reply invocation
Message<Element> response = conn.request("requestreplyoperation", request);
Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, "t3://" + HOST + ':' + PORT);
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,
              "weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL,USERNAME); 
jndiProps.put(Context.SECURITY_CREDENTIALS, PASSWORD);
Locator locator = LocatorFactory.createLocator(jndiProps);
CompositeDN compositedn = new CompositeDN(domainName, compositename, version);
String serviceName = "HelloEntry";
DirectConnection conn = locator.createDirectConnection(compositedn, serviceName);