2010-09-15 6 views
0

J'ai une interface avec une méthode qui devrait renvoyer une liste d'éléments, et chaque élément devrait avoir certaines méthodes qui y sont associées. Par exemple, je veux définir une méthode listAllItems() qui renvoie un tas d'objets "item" auxquels sont attachées des méthodes (ainsi je peux demander au processus client de choisir l'un des items et dire itemone.buy() par exemple, qui exécuterait la méthode correspondante sur le serveur).Séquences CORBA: puis-je définir des séquences d'objets avec des méthodes?

Puis-je faire cela dans CORBA? Il semble que je ne peux pas définir "Item d'interface" et puis dans une autre interface dites "séquence".

Je vais compiler mon idl à Java, si cela fait une différence.

Merci!

Répondre

0

Bien sûr, vous pouvez.

Vous devrez donner plus de détails sur les raisons pour lesquelles vous dites que cela ne fonctionne pas pour vous. Mais je travaille régulièrement avec IDL qui contient une séquence d'interfaces.

1

Les informations Peyton avait besoin, la cartographie conceptuelle entre une séquence IDL et un type de jeu Java, se trouve à la page physique 42, page indexée 23, de ce manuel:

http://www.omg.org/spec/I2JAV/1.3/

Et pour répondre sa question: apparemment, java ne spécifie pas réellement un objet séquence même si vous typedef. Vous êtes bien sûr invités à le faire manuellement. Mais si vous voulez compter sur ce qui est fait automatiquement pour vous par idlj, vous devrez utiliser les méthodes <ObjectType> Helper.java. Ceux-ci fonctionnent avec des tableaux simples du type <ObjectType> [], et incluent des getters et des setters.

En bref: Si votre IDL contenait

struct MyObject 
{ 
    long my_int; 
}; 
typedef sequence<MyObject> MyObjects; 
interface HasArray 
{ 
    attribute MyObjects some_stuff; 
}; 

Ensuite, votre implémentation java aurait besoin:

public class HasArrayImpl extends HasArrayPOA 
{ 
    private List<MyObject> local_storage; 

    /** getter */ 
    MyObject[] some_stuff() 
    { 
    /* ... */ 
    } 

    /** setter */ 
    void some_stuff(MyObject[] newSome_stuff) 
    { 
    /* ... */ 
    } 
} 

Et sous le capot, Java et créerait MyObjectsHelper MyObjectsHolder pour vous.

Questions connexes