当一个JVM已经启动时启动第二个JVM时出错

Ali*_*adi 4 jpype

我正在开发一个客户端 - 服务器软件,其中服务器是由python开发的.我想从python中的java程序中调用一组方法.所有java方法都存在于一个jar文件中.这意味着我不需要加载不同的罐子.

为此,我使用了jpype.对于来自客户端的每个请求,我调用python函数,如下所示:

def test(self, userName, password):
    Classpath = "/home/DataSource/DMP.jar"
    jpype.startJVM(
        "/usr/local/java/jdk1.7.0_60/jre/lib/amd64/server/libjvm.so",
        "-ea",
        "-  Xmx512m",
        "-Djava.class.path=%s" % Classpath)

    NCh = jpype.JClass("Common.NChainInterface")
    n = NCh(self._DB_ipAddress, self._DB_Port, self._XML_SCHEMA_PATH, self._DSTDir)
    jpype.shutdownJVM()
Run Code Online (Sandbox Code Playgroud)

对于一个函数它可以工作,但对于第二个调用它不能启动jvm.我看到很多抱怨,但我找不到任何解决方案.如果有任何身体可以帮助我,我很感激.

如果jpype在多个启动jvm中有问题,有没有办法启动和停止jvm一次?服务器部署在Ubuntu虚拟机上,但我没有足够的知识来编写,例如,为此目的的脚本.你能提供一个链接或一个例子吗?

e9t*_*e9t 6

检查isJVMStarted()之前startJVM().
如果JVM正在运行,它将返回True,否则False.

def init_jvm(jvmpath=None):
    if jpype.isJVMStarted():
        return
    jpype.startJVM(jpype.getDefaultJVMPath())
Run Code Online (Sandbox Code Playgroud)

有关一个真实的例子,请看这里.


Gia*_*omo 5

我通过在定义连接时添加这些行解决了这个问题:

if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath, args)
Run Code Online (Sandbox Code Playgroud)