CORBA 接口中的属性 - 服务器编译后出现错误

     2023-02-16     17

关键词:

【中文标题】CORBA 接口中的属性 - 服务器编译后出现错误【英文标题】:Attribute in CORBA interface - gave errors after server compilation 【发布时间】:2012-06-25 11:39:08 【问题描述】:

我又遇到了 CORBA 的问题。我只是想在 CORBA 中编写一些示例接口,其中接口将具有一个属性。

这是我的 idl 文件:

interface Interfface

    readonly attribute double number;

    exception myOwnException 
        string reason;
    ;

    void ffunction(in double arg) raises (myOwnException);
    double getNumber();
    void setNumber(in double number);
;

我的 IDL 接口实现:

#include "interface.hh"

class Implementation : public POA_Interfface

    private :
        double number;

    public :
        virtual void ffunction(double arg);
        virtual double getNumber();
        virtual void setNumber(double number);
;

#include "implementation.h"

void Implementation::ffunction(double arg)

    this->number = 0;
    arg++;
    throw Interfface::myOwnException("Sth went terribly wrong!");


void Implementation::setNumber(double number)
    this->number = number;


double Implementation::getNumber()
    return this->number;

当我编译 interface.idl、implementation.h、implementation.cpp 时就可以了。问题是当我想编译我的 server.cpp 时:

#include "implementation.h"
#include <iostream>
#include <omniORB4/CORBA.h>
#include <omniORB4/Naming.hh>

using namespace std;

int main(int argc, char ** argv)

    try 
        // init ORB
        CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv);

        // init POA
        CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA");
        PortableServer::POA_var poa = PortableServer::POA::_narrow(poa_obj);
        PortableServer::POAManager_var manager = poa->the_POAManager();

        // create service
        Implementation * service = new Implementation;

        // register within the naming service
        try 
            CORBA::Object_var ns_obj = orb->resolve_initial_references("NameService");
            if (!CORBA::is_nil(ns_obj)) 
                CosNaming::NamingContext_ptr nc = CosNaming::NamingContext::_narrow(ns_obj);
                CosNaming::Name name;
                name.length(1);
                name[0].id = CORBA::string_dup("TestServer");
                name[0].kind = CORBA::string_dup("");
                nc->rebind(name, service->_this());
                cout << "Server is running ..." << endl;
            
         catch (CosNaming::NamingContext::NotFound &) 
            cerr << "not found" << endl;
         catch (CosNaming::NamingContext::InvalidName &) 
            cerr << "invalid name" << endl;
         catch (CosNaming::NamingContext::CannotProceed &) 
            cerr << "cannot proceed" << endl;
        

        // run
        manager->activate();
        orb->run();

        // clean up
        delete service;

        // quit
        orb->destroy();
     catch (CORBA::UNKNOWN) 
        cerr << "unknown exception" << endl;
     catch (CORBA::SystemException &) 
        cerr << "system exception" << endl;
    
 

它给了我错误:

server.cpp:在函数'int main(int,char**)'中:server.cpp:20:错误: 无法分配抽象类型“实现”的对象 implementation.h:4: 注意:因为下面的虚函数 在“实施”中是纯的:interface.hh:197:注意:虚拟 CORBA::Double _impl_Interfface::number()

似乎 CORBA 将我的“数字”属性视为函数,而不是属性,对吗?如何解决?

【问题讨论】:

【参考方案1】:

通过声明一个属性 number,您将自动获得一个 number() 访问器和设置,您都必须在您的仆人中实现它们。您无需在 IDL 中定义 getNumber() 和 setNumber(),只需从属性中删除 readonly 标记即可拥有 setter。

只需将属性视为自动生成可远程访问的 setter 和 getter 的东西。

【讨论】:

感谢您的回答。我将“数字”定义为只读属性,因为我希望它在我的界面中是私有的(我的界面中的私有字段编号)。是否可以?正如您所写,我删除了“只读”声明,但仍然出现错误:pastie.org/private/ljgn3ekaumcvijj6j3z79w 通过在 IDL 中添加属性可以远程访问。通过删除 readonly 您还必须实现 setter。如果您想让它们完全私有,请从 IDL 中删除属性,然后将它们作为类成员添加到您的实现中。

CORBA 错误:方法中的 ORB 初始化

...间】:2014-11-0720:35:33【问题描述】:我正在从客户端调用服务器端的方法。我有三台服务器,它们需要使用UDP进行通信,所以在方法中我需要再次初始化orb以启动线程进程。但我很确定这是因为ORB初始化中的问题我在服务器端的... 查看详情

mfc中的工程编译后出现一个fakeapp类、属性和输出窗口应该怎么关闭呀?

参考技术A因为你建的是visualstudio风格的mfc程序,wizard自动帮你填充的追问已经填充了就没办法彻底关闭了吗 查看详情

带有omniORB 库的PHP 扩展CORBA 客户端会出现运行时错误,并带有“未定义符号”

...在尝试用C++创建一个PHP扩展,它将作为CORBA客户端运行。服务器端是用Java编 查看详情

java CORBA中的POA破坏问题

...2014-07-1510:17:14【问题描述】:我在CORBA中遇到问题。我的服务器运行良好。但是当我尝试将客户端连接到服务器时出现此错误org.omg.CORBA.OBJECT_NOT_EXIST:POAdestroyed有人知道我们在哪种情况下会收到此错误?【问题讨论】:我认为不需... 查看详情

CORBA:它是啥,为啥会产生“GIOP 魔法错误”?

...布时间】:2014-11-1020:00:11【问题描述】:我在GlassFish3.1.2服务器日志中看到CORBAerrorinGIOPmagic,这会导致以后出现严重错误。由于这不是来 查看详情

头文件编译多次,第一次编译后每次编译都会出现随机错误

...建我的C++项目时,我得到了53个错误。但是,从我的项目中的5个头文件之一中,它连续4次出现相同的错误列表。我检查了输出,发现它试图 查看详情

为啥我的代码在 else 语句后出现编译错误?

...可以返回菜单,它总是以错误结束,例如:线程“main”中的异常java.lan 查看详情

在 JBoss 中实现 CORBA 接口

...的全部内容:http://www.jboss.org/jbossiiop我有一个现有的CORBA服务器(基于java,但非标准),我想让它调用我的JBossMBean 查看详情

谈谈c#中的接口

 接口的相关陈述1.一个接口定义了一个契约。2.接口可以包容方法、C#属性、事件、以及索引器。3.在一个接口声明中,我们可以声明零个或者多个成员。4.所有接口成员的默认访问类型都是public。5.如果在接口... 查看详情

typescript躬行记——接口(代码片段)

  在传统的面向对象语言中,接口(Interface)好比协议,它会列出一系列的规则(即对行为进行抽象),再由类来实现这些规则。而TypeScript中的接口更加灵活,除了包含常规的作用之外,它还能扩展其它的类、为对象的类型... 查看详情

具有多个网络接口的 CORBA 客户端 - 绑定到特定的网络接口

...:14【问题描述】:我开发了java(jdk5)corba客户端来接收来自服务器的NotificationIRP主动事件。我的以下代码在单个网卡上运行良好。如果客户端系统有多个网络接 查看详情

java示例代码_识别CORBA服务器中的各种CORBA客户机

java示例代码_识别CORBA服务器中的各种CORBA客户机 查看详情

编译代码后出现 MS ACCESS 错误

】编译代码后出现MSACCESS错误【英文标题】:MSACCESSerroraftercompilingcode【发布时间】:2017-03-1008:04:50【问题描述】:编译我的访问数据库后,启动数据库时出现错误。当我运行数据库的非编译版本时,它工作正常。错误提示theexpres... 查看详情

如何解决 java 中的错误 org.omg.CORBA.BAD_OPERATION 异常?

】如何解决java中的错误org.omg.CORBA.BAD_OPERATION异常?【英文标题】:HowtoresolveErrororg.omg.CORBA.BAD_OPERATIONexceptioninjava?【发布时间】:2013-12-1918:16:14【问题描述】:当我在客户端调用方法时,对于分布式引用对象,我有这个消息错误... 查看详情

Pod 安装错误后,Swift 3 结果出现编译错误

】Pod安装错误后,Swift3结果出现编译错误【英文标题】:Swift3resultswithcompileerrorsafterPodinstallerror【发布时间】:2016-09-2313:56:32【问题描述】:从Swift2.3迁移到Swift3后,出现以下编译错误:第一:错误:无法从“目标支持文件/Alamofi... 查看详情

在c ++中执行后出现“段错误”错误[关闭]

...:38【问题描述】:我对此代码有疑问。该程序旨在使用C++中的深度优先搜索。我用Dev-Cpp、TurboC++和VisualStudio编译它。它编译并生成了exe文件。但它在执行过程中会导致段错误。问题出在哪里,我该怎么办?# 查看详情

GIOP 错误信息

...是corba的新手,并且正在使用eclipseide来运行它。每当运行服务器时,都会出现以下错误消息Dec15,20129:17:18AMcom.sun.corba.se.impl.protocol.giopmsgheaders.MessageBasereadGIOPHeaderWARNING:"IOP007 查看详情

编译后出现“java HelloWorld”错误

】编译后出现“javaHelloWorld”错误【英文标题】:Errorin"javaHelloWorld"aftercompiling【发布时间】:2020-12-1801:19:37【问题描述】:我是初学者,我正在按照cs61b的指示在Windows10上设置我的javapublicclassHelloWorldpublicstaticvoidmain(String[]... 查看详情