ActiveX クライアント・アプリケーション・コードの開発

WebSphere® ActiveX to EJB ブリッジを使用してエンタープライズ Bean にアクセスするために、Visual Basic、VBScript、Active Server Pages などの ActiveX Windows プログラムを開発します。

事前処理

重要: このトピックでは、読者が ActiveX プログラミングおよび Windows プラットフォームでの開発に精通していることを前提としています。 ActiveX アプリケーション・クライアントおよび ActiveX to EJB ブリッジのプログラミング概念については、『ActiveX to Enterprise JavaBeans™ (EJB) ブリッジ』トピックとその関連トピックを参照してください。

適切なプログラミングのガイドラインとして、ActiveX to EJB ブリッジに提供されている情報も参考にしてください。

このタスクの概要

ActiveX to EJB ブリッジを使用して Java™ クラスにアクセスするには、 ActiveX プログラムを開発して以下のステップを実行します。

手順

  1. XJB.JClassFactory オブジェクトのインスタンスを作成します。
  2. XJB.JClassFactory オブジェクトの XJBInit() メソッドを呼び出すことによって 、ActiveX プログラム・プロセスに Java 仮想マシン (JVM) コードを作成します。
    ActiveX プログラムが XJB.JClassFactory オブジェクトを作成して、 XJBInit() メソッドを呼び出すと、JVM コードが初期化されていつでも使用できるようになります。
  3. XJB.JClassFactory FindClass() メソッドおよび NewInstance() メソッドを使用して、 Java クラスのプロキシー・オブジェクトを作成します。
    ActiveX プログラムは、プロキシー・オブジェクトを使用して、 Java クラス、オブジェクト・フィールド、およびメソッドにアクセスできます。
  4. Java メソッド呼び出し構文を使用して Java クラスのメソッドを呼び出し、 必要に応じて Java フィールドにアクセスします。
  5. 自動変換できない場合は、ヘルパー関数を使用して変換を行います。 変換は、以下のデータ型の間で行うことができます。
    • Java バイトと Visual Basic バイト
    • Visual Basic 通貨型と Java 64 ビット
  6. Java クラスから戻されたエラーを処理するメソッドを実装します。 Visual Basic または VBScript では、 Err.Number フィールドと Err.Description フィールドを使用して、 実際の Java エラーを判別します。

System.out メッセージの表示: ActiveX to Enterprise JavaBeans (EJB) ブリッジには、Java System.out メッセージを表示するために使用できるコンソールがありません。 スタンドアロン・クライアント・プログラム (Visual Basic など) の実行中 にこれらのメッセージを見るには、出力をファイルに転送してください。

出力をファイルに転送するには、次の例のようにします。
launchClientXJB.bat MyProgram.exe > output.txt
  • Active Server Pages などのサービス・プログラムの実行時に System.out メッセージを表示するには、Java System.out OutputStream オブジェクトを FileOutputストリームにオーバーライドします。 例えば、VBScript では以下のようになります。
    'Redirect system.out to a file
    ' Assume that oXJB is an initialized XJB.JClassFactory object
     Dim clsSystem
     Dim oOS
     Dim oPS
     Dim oArgs
    
    ' Get the System class
      Set clsSystem = oXJB.FindClass("java.lang.System")
    
    ' Create a FileOutputStream object
    ' Create a PrintStream object and assign to it our FileOutputStream
      Set oArgs = oXJB.GetArgsContainer  oArgs.AddObject "java.io.OutputStream", oOS
      Set oPS = oXJB.NewInstance(oXJB.FindClass("java.io.PrintStream"), oArgs)
    
    ' Set our System OutputStream to our file
      clsSystem.setOut oPS

データ型変換のためのヘルパー・メソッドを 使用する ActiveX クライアント・アプリケーション。 通常、 ActiveX (Visual Basic および VBScript) と Java メソッドとの間のデータ型変換は、 ActiveX to EJB ブリッジで説明されているように、自動的に行われ、データ型が変換されます。 ただし、自動変換が不可能な場合に備えて、バイト・ヘルパー関数と通貨ヘルパー 関数が用意されています。

  • バイト Helper 関数
    Java バイト・データ型は符号付き (-127 から 128) であり、 Visual Basic バイト・データ型は符号なし (0 から 255) であるため、 符号なしのバイトを Visual Basic 整数に変換します。 これは、外観が Java の符号付バイトに似ています。 この変換を行うには、以下の Helper 関数を使用することができます。
    Private Function GetIntFromJavaByte(Byte jByte) as Integer
    	     GetIntFromJavaByte = (CInt(jByte) + 128) Mod 256 - 128
    End Function
  • 通貨 Helper 関数
    Visual Basic 6.0 は、Java メソッドのように (Long データ型として) 64 ビット整数を適切に処理できません。 したがって、Visual Basic は、本来は 64 ビット・データ型の通貨型を使用します。 通貨型 (バリアント型 VT_CY) を使用する場合の唯一の副次作用は、小数点が型に挿入されることです。 Visual Basic の 64 ビットの Long 値を抽出し、取り扱うには、次の例のようなコードを使用します。 通貨データ型を変換するためのこの手法について詳しくは、Microsoft Knowledge Base の Q189862「 HOWTO: Do 64-bit Arithmetic in VBA」を参照してください。
    
    ' Currency Helper Types
    Private Type MungeCurr
        Value As Currency
    End Type
    Private Type Munge2Long
        LoValue As Long
        HiValue As Long
    End Type
    
    ' Currency Helper Functions
    Private Function CurrToText(ByVal Value As Currency) As String
        Dim Temp As String, L As Long
        Temp = Format$(Value, "#.0000")
        L = Len(Temp)
        Temp = Left$(Temp, L - 5) & Right$(Temp, 4)
        Do While Len(Temp) > 1 And Left$(Temp, 1) = "0"
            Temp = Mid$(Temp, 2)
        Loop
        Do While Len(Temp) > 2 And Left$(Temp, 2) = "-0"
            Temp = "-" & Mid$(Temp, 3)
        Loop
        CurrToText = Temp
    End Function
    
    Private Function TextToCurr(ByVal Value As String) As Currency
        Dim L As Long, Negative As Boolean
        Value = Trim$(Value)
        If Left$(Value, 1) = "-" Then
            Negative = True
            Value = Mid$(Value, 2)
        End If
        L = Len(Value)
        If L < 4 Then
            TextToCurr = CCur(IIf(Negative, "-0.", "0.") & _
                              Right$("0000" & Value, 4))
        Else
            TextToCurr = CCur(IIf(Negative, "-", "") & _
                              Left$(Value, L - 4) & "." & Right$(Value, 4))
        End If
    End Function
    
    ' Java Long as Currency Usage Example
    Dim LC As MungeCurr
    Dim L2 As Munge2Long
    
    ' Assign a Currency Value (really a Java Long)
    ' to the MungeCurr type variable
    LC.Value = cyTestIn
    
    ' Coerce the value to the Munge2Long type variable
    LSet L2 = LC
    
    ' Perform some operation on the value, now that we
    ' have it available in two 32-bit chunks
    L2.LoValue = L2.LoValue + 1
    
    ' Coerce the Munge value back into a currency value
    LSet LC = L2
    cyTestIn = LC.Value

次の作業

ActiveX クライアント・アプリケーション・コードを開発したら、ActiveX アプリケーションをデプロイおよび実行します。