6

I am trying to evaluate some technologies for implementing a communication process between some Ada modules with some C++/OpenGL modules. There is an (Windows XP) Ada application which communicates with a C++ application using COM, but I intend to switch the COM to a new technology. Some suggestions came up, such as direct Sockets, DSA, Polyorb, Corba and DSS/Opensplice.

  • DSA appears to be just Ada -implemented (not sure)
  • Polyorb has its last implementation on 2006, according to http://polyorb.ow2.org/
  • Corba someone argumented that it could be not simple enough to justify its complexity for implementing simple applications
  • DSS/Opensplice appears to be just C/C++ implemented, so an Ada binding should be done. It also looks to be not very simple to be implemented too.

Personally I like COM, but due to the migration, I'd rather take the sockets option due to its simplicity, and the interface architecture could be implemented very easily.

So, what you think? Could you please comment about these technologies or even suggest other more?

Thanks very much.

4

5 に答える 5

5

選択の大きな要因は、リエンジニアリングするシステムのサイズと複雑さです。複雑なメッセージがたくさんある、広く分散されたシステムですか?それは、ほんの一握りのありふれたメッセージ交換を伴う比較的小さなシステムですか?

小さなシステムの場合、私は自分のソケットベースの通信モジュールをロールするだけでした。しかし今では、 ZeroMQ(ブローカーレス)またはSTOMP(テキストベース)に傾倒しています。そして、これらにはいくつかのAdaサポートがあります。zeromq-AdaTOMI_4_Ada(両方をサポートします)。

これらは配布メカニズムを処理しますが、メッセージの転送可能な形式へのシリアル化を処理する必要があります。

CORBA / PolyORBおよびDDSソリューションはかなり重いですが、完全なソリューションです。IDLと管理ブローカーを恐れなければ、大規模な分散システムに適しています。ええ、いくつかのAdaバインディングを構築する必要があるかもしれませんが、バインドするCヘッダーまたはC APIを取得できる場合、必要な関数とデータ構造のバインドだけに焦点を当てれば、通常はそれほど悪くはありません。包括的なバインディングを作成するのではなく、内部の内容を気にしない構造体とパラメーターには、不透明ポインターとvoidポインター(void_ptropaque_structure_def_ptr )を自由に使用します。

于 2011-10-20T17:32:13.037 に答える
3

we intend to switch the COM to a new (suported) technology, since COM is not more supported by Microsoft

Whoever told you COM is no longer supported is totally clueless.

While COM has undergone many name changes (OLE, COM, OLE Automation, DCOM, COM+, ActiveX, WinRT) and extensions over the past decades, it is the single most important technology for MS platforms: past, present and future. The .NET runtime uses COM extensively. Much of the Win32 API is written in COM, and the portions that weren't, will be in Win8, since WinRT components are COM objects.

于 2011-10-20T20:14:14.167 に答える
2

Also take a look at AMQP (RabbitMQ for server), there seems to be Ada library available for it http://www.gti-ia.upv.es/sma/tools/AdaBinding/index.php.

If you could find binding for Ada, Apache thrift might also be a lightweight option. Maybe you could even write your own binding, it should not be more difficult that rolling something of your own over the sockets.

If you do go sockets route, than I would suggest ZeroMQ as "supersockets".

于 2011-10-21T06:31:47.897 に答える
1

One more option for your list should be to use Ada's distributed programming support, and write C/C++ wrappers to interface your C++ program into it.

I don't know that its the best option for your needs, but if your Ada compiler supports Annex E, it should be on the list.

于 2011-10-20T17:56:32.760 に答える
0

Since this post, AdaCore published PolyORB on GitHub with regular updates :)

于 2018-09-27T08:58:28.273 に答える