Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何通过RMI使JPA在远程服务器上工作_Hibernate_Jpa_Rmi - Fatal编程技术网

Hibernate 如何通过RMI使JPA在远程服务器上工作

Hibernate 如何通过RMI使JPA在远程服务器上工作,hibernate,jpa,rmi,Hibernate,Jpa,Rmi,我试图完成一个项目,通过RMI将工作负载发送到多个远程服务器。在工作结束时,每个远程服务器将结果写回数据库。要让JPA(HIBERNATE是提供程序)使用此解决方案,我遇到了一些主要困难 如果我可以使用UpdateDB方法将数据写回本地任何远程服务器上的数据库,那么一切都可以正常工作。但是如果我通过RMI传递jar/code/classes,它就无法做到这一点。它提出了一个例外: Exception in thread "main" javax.persistence.PersistenceEx

我试图完成一个项目,通过RMI将工作负载发送到多个远程服务器。在工作结束时,每个远程服务器将结果写回数据库。要让JPA(HIBERNATE是提供程序)使用此解决方案,我遇到了一些主要困难

如果我可以使用UpdateDB方法将数据写回本地任何远程服务器上的数据库,那么一切都可以正常工作。但是如果我通过RMI传递jar/code/classes,它就无法做到这一点。它提出了一个例外:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named PersistenceUnit
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at cluster.persistence.UpdateDB.execute(UpdateDB.java:148)
at cluster.persistence.UpdateDB.execute(UpdateDB.java:1)
at cms.engine.ComputeEngine.executeTask(ComputeEngine.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at com.sun.proxy.$Proxy0.executeTask(Unknown Source)
at cluster.persistence.UpdateDB.main(UpdateDB.java:93)
如果我尝试访问代码中的persistence.xml,如下所示:

try {
        URL pUrl = UpdateDB.class.getClassLoader().getResource("META-INF/persistence.xml");
        System.out.println(pUrl);

        BufferedReader stream = null;
        InputStream in = UpdateDB.class.getClassLoader().getResourceAsStream(
                "META-INF/persistence.xml");
        stream = new BufferedReader(new InputStreamReader(in));

        String line = null;
        line = stream.readLine();
        while (line != null) {
            line = stream.readLine();
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
可以通过正确的位置(jar:htp://MYCODEBASE.jar!/META-INF/persistence.xml)。整个persistence.xml都可以正确打印出来

有人能告诉我如何使其工作,以便远程服务器可以将数据写入RMI设置中的数据库吗

非常感谢