Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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
如何在Python和Java中使用CORBA?_Java_Python_Corba - Fatal编程技术网

如何在Python和Java中使用CORBA?

如何在Python和Java中使用CORBA?,java,python,corba,Java,Python,Corba,我正在我大学的分布式系统专业实习。我们必须使用CORBA做一个应用程序,显示当前的时间,其中服务器用一种语言编写,客户端用另一种语言编写 我决定使用Python作为服务器,Java作为客户端。我使用omniORB为Python编译IDL文件 from datetime import * import sys, os import CORBA, CosNaming, Util, Util__POA class Hora_i(Util__POA.Hora): def get_hora(se

我正在我大学的分布式系统专业实习。我们必须使用CORBA做一个应用程序,显示当前的时间,其中服务器用一种语言编写,客户端用另一种语言编写

我决定使用Python作为服务器,Java作为客户端。我使用omniORB为Python编译IDL文件

from datetime import *
import sys, os
import CORBA, CosNaming, Util, Util__POA

class Hora_i(Util__POA.Hora):
    def get_hora(self):
        return datetime.today()

orb = CORBA.ORB_init(sys.argv)
poa = orb.resolve_initial_references("RootPOA")
poa._get_the_POAManager().activate()

servant = Hora_i()
poa.activate_object(servant)
servantObjref = servant._this()

print orb.object_to_string(servant._this())

#horaObjref = servant._this()

nameRoot = orb.resolve_initial_references("NameService")
nameRoot = nameRoot._narrow(CosNaming.NamingContext)
try:
    if nameRoot is None:
        print "NameService narrow failed"
        sys.exit(1)
except CORBA.ORB.InvalidName, ex:
    # This should never happen, since "NameService" is always a
    # valid name, even if it hadn't been configured.

    print "Got an InvalidName exception when resolving NameService!"
    sys.exit(1)

except CORBA.NO_RESOURCES, ex:
    print "No NameService configured!"
    sys.exit(1)

except CORBA.SystemException, ex:
    print "System exception trying to resolve and narrow NameService!"
    print ex
    sys.exit(1)

try:
    name = [CosNaming.NameComponent("hora", "")]
    horaContext = nameRoot.bind_new_context(name)
except CosNaming.NamingContext.AlreadyBound, ex:
        # There is already a context named "hora", so we resolve
        # that.
        print 'Reusing "hora" naming context.'

        horaContext = nameRoot.resolve(name)
        horaContext = horaContext._narrow(CosNaming.NamingContext)

        if horaContext is None:
            # Oh dear -- the thing called "hora" isn't a
            # NamingContext. We could replace it, but it's safer to
            # bail out.
            print 'The name "hora" is already bound in the NameService.'
            sys.exit(1)

horaContext.rebind([CosNaming.NameComponent("DarHora","")], servantObjref)
print "DarHora bound in NameService.    "

orb.run()
实际上,我可以毫无问题地编译和运行服务器端。(我认为)

另一方面,这是我的java代码

import Util.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

     public class Cliente {
        public static void main(String args[]) {
            try{
                ORB orb = ORB.init(args,null);
  // obtener una referencia a NameService
  org.omg.CORBA.Object objRef = orb.resolve_initial_references("DarHora");
  // las siguientes lineas nos permiten obtener una ref a un objeto remoto
  NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
  // nombre del obj remoto
  String nombre = "DarHora";
    Hora impl = HoraHelper.narrow(ncRef.resolve_str(nombre));      
  System.out.println(impl.get_hora());
  }
  catch (Exception e) {
   System.out.println("ERROR : " + e);
   e.printStackTrace(System.out);
  }
 }
}
在java中,我编译我的文件,但当我试图运行它时,出现了一个错误。这是我的追踪

com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl <init>
WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: 127.0.1.1; port: 900"
org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2200)
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2221)
    at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:223)
    at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:236)
    at com.sun.corba.se.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:119)
    at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:185)
    at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:136)
    at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:99)
    at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.resolve(BootstrapResolverImpl.java:132)
    at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
    at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
    at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
    at com.sun.corba.se.impl.orb.ORBImpl.resolve_initial_references(ORBImpl.java:1169)
    at Cliente.main(Cliente.java:10)
Caused by: java.net.ConnectException: Connection refused
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:465)
    at sun.nio.ch.Net.connect(Net.java:457)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:639)
    at java.nio.channels.SocketChannel.open(SocketChannel.java:184)
    at com.sun.corba.se.impl.transport.DefaultSocketFactoryImpl.createSocket(DefaultSocketFactoryImpl.java:78)
    at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:206)
    ... 11 more
com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl
警告:“IOP0041201:(通信故障)连接故障:socketType:IIOP_CLEAR_TEXT;主机名:127.0.1.1;端口:900”
org.omg.CORBA.COMM_故障:vmcid:SUN次要代码:201已完成:否
在com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2200)上
在com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2221)
位于com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:223)
位于com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:236)
位于com.sun.corba.se.impl.transport.socketorchannelcontactinfo.createConnection(socketorchannelcontactinfo.java:119)
位于com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:185)
位于com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:136)
位于com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:99)
位于com.sun.corba.se.impl.resolver.BootstrapResolverImpl.resolve(BootstrapResolverImpl.java:132)
位于com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
位于com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
位于com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:47)
在com.sun.corba.se.impl.orb.orbempl.resolve_initial_references上(orbempl.java:1169)
在Cliente.main(Cliente.java:10)
原因:java.net.ConnectException:连接被拒绝
位于sun.nio.ch.Net.connect0(本机方法)
位于sun.nio.ch.Net.connect(Net.java:465)
位于sun.nio.ch.Net.connect(Net.java:457)
位于sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:639)
位于java.nio.channels.SocketChannel.open(SocketChannel.java:184)
位于com.sun.corba.se.impl.transport.DefaultSocketFactoryImpl.createSocket(DefaultSocketFactoryImpl.java:78)
位于com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:206)
... 还有11个

我怎样才能解决这个问题?请帮帮我,orb。解析初始参考(“DarHora”)

很奇怪。为什么您的客户端不去名称服务查找服务器?看起来您的名称服务没有运行。请查看您的ORB文档,了解如何运行它。看起来它希望它在localhost:900上运行,但它无法打开到它的连接。或者可能是Java客户端配置不正确,认为名称服务运行在与实际不同的端口上。