Datenstruktur und Vererbung in CORBA

Arminator

Grünschnabel
Hallo,

ich verzweifele gerade an einem Studienprojekt.
Es geht dabei um eine Personen/Mitarbeiterverwaltung in JAVA und CORBA.

Lokal hab ich (zum Test in einem einzigen Programm) alles schon am laufen. Es soll eine Klasse "Person" geben, und eine Klasse "Mitarbeiter", die "Name", "Vorname" und "Personalnummer" von "Person" erbt.
Zusätzlich gibt es dann für einen Mitarbeiter noch seine "Abteilung" und "Gehalt".

Wenn man nun mit einer Suchmethode such(int PersNum) eine Personalnummer angibt, wird ein entsprechendes Objekt "Person" bzw. "Mitarbeiter" zurückgegeben.

Die ganze Verwaltung soll jetzt via CORBA auch als Client/Server funktionieren.

Der Client soll also mit "such(int PersNum)" beim Server die Suche lostreten und eine Person bzw. Mitarbeiter zurückbekommen.

Ich habe testweise schon das HelloApp von der Sun Website durchprobiert, und von der eigentlichen Funktionsweise ist mir CORBA auch klar.

ABER!

Wie bringe ich CORBA nun bei, eine komplexere Datenstruktur "Person" und den vererbten "Mitarbeiter" hin und herzuschieben?

Wie erkläre ich also der IDL wie eine Person aussieht und wie der Mitarbeiter davon vererbt wurde?

Alle Tutorials, die ich bisher bezüglich IDL gefunden habe, beschränken sich auf einfache Datenstrukturen wie "string", "long" und Konsorten. Wie schicke ich eigene Klassen über den ORB?

Links zu Seiten, wo komplexere IDLs erklärt werden sind genauso willkommen, wie "fertige" Erklärungen hier im Forum.
 
Hallo,

im JDK gibt es ein Tool namens rmic. Damit kannst du für Java Klassen auch entsprechende IDL-Bindings generieren lassen.

Schau mal hier:
Java:
package de.tutorials.domain;

public class Person {
    String id;
    String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Java:
package de.tutorials.domain;

public class Employee extends Person {
    String empId;

    public String getEmpId() {
        return empId;
    }

    public void setEmpId(String empId) {
        this.empId = empId;
    }
}

rmic:
Code:
tom@ubuntu:~/Desktop/workspace/de.tutorials.training$ rmic -idl -always -d . -classpath ./bin de.tutorials.domain.Person de.tutorials.domain.Employee

Folgende IDL-Definitionen:
Person:
C:
/**
 * de/tutorials/domain/Person.idl
 * Generated by rmic -idl. Do not edit
 * Montag, 26. Januar 2009 19:41 Uhr MEZ
 */

#include "orb.idl"

#ifndef __de_tutorials_domain_Person__
#define __de_tutorials_domain_Person__


module de {
module tutorials {
module domain {

    abstract valuetype Person {
    
        ::CORBA::WStringValue getId( );
        void setId(
            in ::CORBA::WStringValue arg0 );
        ::CORBA::WStringValue getName( );
        void setName(
            in ::CORBA::WStringValue arg0 );
    
    };

};
};
};

#endif

Employee:
C:
/**
 * de/tutorials/domain/Employee.idl
 * Generated by rmic -idl. Do not edit
 * Montag, 26. Januar 2009 19:41 Uhr MEZ
 */

#include "de/tutorials/domain/Person.idl"
#include "orb.idl"

#ifndef __de_tutorials_domain_Employee__
#define __de_tutorials_domain_Employee__


module de {
module tutorials {
module domain {

    abstract valuetype Employee: ::de::tutorials::domain::Person {
    
        ::CORBA::WStringValue getEmpId( );
        void setEmpId(
            in ::CORBA::WStringValue arg0 );
    
    };

};
};
};

#endif

Hier noch ein kleines Beispiel wie man einen Dienst via RMI / IIOP (CORBA) aufrufbar macht.
http://www.tutorials.de/forum/java/206236-kleines-beispiel-zu-rmi-over-iiop.html

Gruß Tom
 
Danke für den Tipp. Irgendwie steige ich immer noch nicht so recht hinter den Maschinengenerten Code, aber ich denke mal, ich beiß mich mal noch etwas weiter durch :)
 
Zurück