是否可以重用在RPG的另一个OS/400作业中创建的JVM?

Fed*_*ico 1 java jvm rpgle ibm-midrange

我有一个调用Java类的RPG PGM,如果Job中没有JVM,RPG运行时会在调用Java类时添加一个.在此之后,来自同一RPG程序的所有调用或同一作业中的另一个RPG程序使用相同的JVM.

问题是,如果我从另一个Job启动相同的PRG程序,它会启动另一个JVM,基本上我有一个JVM for Job.

我想知道是否可以只有一个JVM并从其他Jobs连接到它.

任何帮助将不胜感激.

这就是我试图通过程序整合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());
    }
}
Run Code Online (Sandbox Code Playgroud)

Buc*_*bro 7

快速回答是否定的.

更长的答案是,如果您有一个永无止境的服务器作业运行接受来自各个客户端的请求,那么所有客户端实际上将重用服务器作业启动的JVM.

创建此服务器作业的一种方法是使用数据队列将数据从客户端传递到服务器作业,然后再返回.当机器IPL(将自动启动作业条目添加到批处理子系统)并让它通过QRCVDTAQ监听数据队列时,启动服务器作业.该作业将启动JVM,调用Java方法并通过QSNDDTAQ返回答案.每个客户端都会做同样的事情,在数百个单独的作业和单个服务器作业之间进行双向通信.