CORBA C++ Java

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CORBA C++ Java

    Ich möchte Daten zwischen C++ und Java mit CORBA austauschen. Ich habe einen Java Server geschrieben, doch habe ich Probleme mit dem C++ Client. Die Kommunikation zwischen einem Java Client und Server funktioniert, ....

    Hat jemand schon einmal probiert aus C++ den SUN ORB (orbd) zu benutzen? Welchen IDL-Compiler habt Ihr benutzt? Kann jemand Beispielcode posten?

    Mir ist unklar wie ich mich aus C++ mit dem ORB verbinde. Wie kann ich den folgenden Java-Code in C++ schreiben?


    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.jndi.cosnaming.CNCtxFactory");
    env.put(Context.PROVIDER_URL,
    "iiop://192.168.0.2:666");

    ic = new InitialContext(env);


    Danke für die Hilfe!

    Kennt jemand eine gute Seite für die Problematik?
  • Corba C++ Java

    Hallo,

    Es gibt bei CORBA 2 Möglichkeiten bei unterschiedlichen ORB's die Verbindung
    herzustellen. Die beiden Möglichkeiten gehören zum Standard und daher kann
    die jeder ORB.

    Der Server schreibt eine IOR-Datei. In der stehen die Objektreferenzen, der
    Server u.s.w.

    Der Client benötigt dann für die Verbindung diese Datei. Die muss er einlesen
    und bekommt so die Informtionen, welches Objekt auf welchem Server läuft.

    Problem: Die Datei muss irgendwie zum Client (FTP) falls Client und Server
    nicht auf einem Rechner laufen. Für einen Test der Verbindung aber ausreichend.

    Die 2 Möglichkeit ist der Naming Service.
    Der Naming Service muss zuerst gestartet werden.
    Beim Start des Servers werden unter einer ID die Informationen über die Objekte,
    (ähnlich wie bei der IOR-Datei) im Naming Service Daemon abgelegt.

    Der Client greift dann über die IP-Adresse des Servers und der ID auf Naming Service zu und kann die Objektinformationen lesen und anschließend aufrufen.

    Beim Mico ORB ist der Aufruf für den Naming Service Daemon nsd wie folgt.
    nsd -ORBNoResolve -ORBDebug All -ORBIIOPAddr inet:192.168.2.20:12456
    wobei 192.168.2.20 die IP des Servers ist und 12456 die Portnummer.

    Client und Server müssen natürlich wissen auf welchem Server der nsd läuft.
  • Hier ist noch ein Beispiel, wie man in C++ beim Mico ORB
    die IOR aus der Datei verarbeitet. Die Funktionen gehören
    zum Standard und funktionieren auch bei anderen ORB's.
    Am besten den ORB herunterladen und dann viel lesen.
    Für den Naming Service könnte ich auch Beispiel liefern, wenn
    ich Zeit habe.

    Das Beispiel ist aus der Hilfe des Mico.

    Quellcode

    1. #include "hello.h"
    2. #ifdef HAVE_UNISTD_H
    3. #include <unistd.h>
    4. #endif
    5. #ifdef _WIN32
    6. #include <direct.h>
    7. #endif
    8. using namespace std;
    9. int
    10. main (int argc, char *argv[])
    11. {
    12. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
    13. /*
    14. * IOR is in hello.ref in the local directory
    15. */
    16. char pwd[256], uri[300];
    17. sprintf (uri, "file://%s/hello.ref", getcwd(pwd, 256));
    18. /*
    19. * Bind to Hello World server
    20. */
    21. CORBA::Object_var obj = orb->string_to_object (uri);
    22. HelloWorld_var hello = HelloWorld::_narrow (obj);
    23. if (CORBA::is_nil (hello)) {
    24. printf ("oops: could not locate HelloWorld server\n");
    25. exit (1);
    26. }
    27. hello->hello ();
    28. // sleep(1);
    29. // hello->hello();
    30. return 0;
    31. }
    Alles anzeigen