IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

CORBA Discussion :

[Corba/Java] Accès aux objets


Sujet :

CORBA

  1. #1
    soa
    soa est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 26
    Points
    26
    Par défaut [Corba/Java] Accès aux objets
    Bonjour à tous.
    Je débute en Corba et je rencontre quelques difficultés.
    En gros, j'arrive à faire la connexion entre le server et client (orbd de java), quand le client demande un attribut de la classe server nommons le X pas de problème ca marche, par contre quand le client demande un autre objet à partir d'un attribut de la classe X du genre:

    array = X.getY.getArrayZ

    Ben ca me renvoie un array comme convenu, avec le nombre exacte d'éléments mais quand je fait appelle à une méthode d'un objet contenu dans cet array ca ne me donne pas de string.
    Un élement de cet array que je recois à la référence IOR:013.....bref ca semble être du corba, mais son contenu c'est mon objet voulut mais son stub d'après le debug.

    Quelqu'un aurait un avis? Je sais c'est pas claire mais je sais pas trop comment expliquer.
    Merci

  2. #2
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Hello,

    pour être plus clair, poste la partie utile de ton contrat IDL et décrit le comportement que tus as parce que là on ne voit pas où ça plante.

    On t'aidera avec plaisir si tu donnes plus de détails !

  3. #3
    soa
    soa est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 26
    Points
    26
    Par défaut
    Pour l'IDL on va dire que j'ai ca, je l'ai dépouiller de ce qui n'était pas nécessaire pour résoudre le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    module storeManager
    {
    	interface StockItem
    	{
    		attribute string upc;
    	};
    
    	typedef sequence<StockItem> Items;
    
    	interface Stock
    	{
    		attribute Items stockItem;	
    	};
    
    	interface Store
    	{	
    		attribute Stock myStock;
    	};
    };
    Pour l'implémentaion en java j'ai ca pour l'objet stock:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class StockImpl extends _StockImplBase implements Stock{
    	static private Hashtable<String,StockItem> stockItem = new Hashtable<String,StockItem>();
    pour l'objet store:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class StoreImpl extends _StoreImplBase{
    	static private StockImpl myStock = new StockImpl();
    pour l'objet StockItem:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class StockItemImpl extends _StockImplBase implements StockItem{
    	private String upc = new String();
    Précision que j'ai grader implements X pour pourvoir effectuer des cast entre les objets corba exemple StockItem et objet java StockItemImpl.
    Pour ce qui est du fichier IDL je l'ai compiler avec les paramètres -fall -oldimplbase ce qui explique qu'il ait extends _StockImplBase et pas extends StockItemPOA.

    Ce qui pose problème c'est la méthode (un get générée automatiquement par l'idl) qui se trouve dans la classe StockImpl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public StockItem[] stockItem() {
    		StockItem[] result = new StockItem[stockItem.size()];
    		Enumeration<StockItem> i = stockItem.elements();
    		int j = 0;
    		while (i.hasMoreElements()) {
    			StockItem item = i.nextElement();
    			result[j] = item;
    			j++;
    		}		
    		
    		return result;
    	}
    Normalement ca devrait envoyer un array avec les objets dedans que je veut afficher sur le post du client.

    Mais impossible d'afficher un attribut d'un objet StockItem, en l'occurence afficher son upc.
    Donc côté client j'ai mis ca pour vérifié d'ou venait problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		Stock stock = storeDst.getStock();
    		
    		System.out.println("---------------------------------------------------------------------");
    		System.out.println("Adresse Stock       = "+stock);
    		System.out.println("Adresse Array Stock = "+stock.stockItem());
    		System.out.println("Length Array Stock  = "+stock.stockItem().length);
    		System.out.println("Adresse objet array = "+stock.stockItem()[0]);
    		System.out.println("Upc objet           = "+stock.stockItem()[0].upc());
    		System.out.println("---------------------------------------------------------------------");
    		System.out.println("");
    Mais ca m'affiche ca:

    ---------------------------------------------------------------------
    Adresse Stock = IOR:000000000000001b49444c3a73746f72654d616e616765722f53746f636b3a312e30000000000001000000000000006e000102000000000c3139322e3136382e302e320004e2000000000019afabcb00000000022645d40800000008000000020000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
    Adresse Array Stock = [LstoreManager.StockItem;@1b3f829
    Length Array Stock = 2
    Adresse objet array = IOR:000000000000001b49444c3a73746f72654d616e616765722f53746f636b3a312e30000000000001000000000000006e000102000000000c3139322e3136382e302e320004e2000000000019afabcb00000000022645d40800000008000000030000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
    ERROR : org.omg.CORBA.BAD_OPERATION: ----------BEGIN server-side stack trace----------
    org.omg.CORBA.BAD_OPERATION: vmcid: 0x0 minor code: 0 completed: Maybe
    at storeManager._StockImplBase._invoke(_StockImplBase.java:37)
    at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(Unknown Source)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(Unknown Source)
    Pourtant il y a des adresse IOR et un array avec le nombre exacte d'élément qu'il devrait avoir.

    Voilà merci de votre aide

  4. #4
    Membre habitué
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Eh bien je me suis avancé, même avec les traces je ne vois pas

    pour l'objet StockItem, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class StockItemImpl extends _StockImplBase implements StockItem{
    A priori le implements StockItem est inutile, car _StockImplBase l'a déjà.
    En effet, dans _StockImplBase.java, tu trouves:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public abstract class _StockItemImplBase extends org.omg.CORBA.portable.ObjectImpl
                    implements storeManager.StockItem, org.omg.CORBA.portable.InvokeHandler
    {
    Mais je ne pense pas que ça pose de problème.
    L'exception BAD_OPERATION signifie que le serveur ne trouve pas la méthode "upc()".
    Vérifie que l'IDL compilé est le bon de chaque côté (client et serveur). Sinon je ne vois pas.

  5. #5
    soa
    soa est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par menator
    Vérifie que l'IDL compilé est le bon de chaque côté (client et serveur). Sinon je ne vois pas.
    Comment vérifié ça? Je vois pas. L'application est la même pour le client et server il y a seulement d'autre fenter qui sont visible en fonction que ce soit un client ou un server.

    En tout cas merci de m'aider.

Discussions similaires

  1. Acces aux objets dans un sous-formulaire
    Par Destiny dans le forum Access
    Réponses: 3
    Dernier message: 13/02/2007, 09h28
  2. Accés aux objets d'un autre utilisateur
    Par ariesnojf dans le forum Oracle
    Réponses: 2
    Dernier message: 02/02/2007, 19h30
  3. [C++/CLI] Accès aux objets en global
    Par kinouseb dans le forum C++/CLI
    Réponses: 5
    Dernier message: 22/11/2006, 10h08
  4. [c#] Méthode d'accès aux objets de ma form1
    Par SDuh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/03/2006, 12h21
  5. [TGroupBox] Accès aux objets
    Par JediKerian dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/04/2003, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo