1

Java クラスを呼び出す RPG PGM があります。ジョブに JVM がない場合、Java クラスが呼び出されたときに RPG ランタイムが JVM を追加します。この後、同じ RPG プログラムまたは同じジョブ内にある別の RPG プログラムからのすべての呼び出しは、同じ JVM を使用します。

問題は、別のジョブから同じ PRG プログラムを開始すると、別の JVM が開始されることです。基本的に、ジョブ用に 1 つの JVM があります。

JVM を 1 つだけにして、他のジョブからアタッチできるかどうかを知りたいです。

どんな助けでも大歓迎です。

これが、プロシージャーを通じて RPG/JAVA を統合しようとしている方法です。しかし、何らかの理由でスレッドが起動されません。

========
RPG CODE
========

d DSP_class       c                   'tests.mthreads.RPGProcessDispatcher'
d DSP             s               o   class(*JAVA:DSP_class)           

d DSP_new         pr              o   extproc(*JAVA:                   
d                                     DSP_class:                       
d                                     *CONSTRUCTOR)                    

d DSP_dispatch    pr              n   extproc(*JAVA:                   
d                                     DSP_class:                       
d                                     'dispatch')                      


d dispatcher      s                   like(DSP)
d dispatched      s               n            

d i               s              3i 0          
  /free                                         
     dispatcher = DSP_new();                   
     for i=1 by 1 to 2;                        
        dispatched = DSP_dispatch(dispatcher); 
      endfor;                                   

      *inlr=*on;   
  /end-free        


RPGProcessDispatcher
====================

public boolean dispatch() {
    if (freeThreads == 0) {
        return false;
    }

    System.out.println("Tread @"+freeThreads);
    decThreadsAvailable();

    RPGSimpleProcess p = new RPGSimpleProcess();
    p.registerRunCompleted(this);

    Thread t = new Thread(p);
    t.start();

    return true;
}

RPGSimpleProcess
================

@Override
public void run() {
    try {
        Thread.sleep(100000);

        notifyEnd();        
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}
4

1 に答える 1

7

簡単な答えはノーです。

より長い答えは、個々のクライアントからの要求を受け入れる終わりのないサーバー ジョブが実行されている場合、すべてのクライアントがサーバー ジョブによって開始された JVM を事実上再利用することになります。

このサーバー ジョブを作成する 1 つの方法は、データ キューを使用して、クライアントからサーバー ジョブにデータを渡したり戻したりすることです。マシンの IPL 時にサーバー ジョブを開始し (自動開始ジョブ エントリをバッチ サブシステムに追加)、QRCVDTAQを介してデータ キューをリッスンします。そのジョブは JVM を開始し、Java メソッドを呼び出し、QSNDDTAQを介して応答を返します。各クライアントは同じことを行い、数百の個々のジョブと単一のサーバー ジョブの間で双方向通信を行います。

于 2013-03-27T14:19:05.393 に答える