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

Java EE Discussion :

Récupération des stubs


Sujet :

Java EE

  1. #21
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    il me fait exactement la meme chose a savoir : affichage de l'usage de la commande java...
    Dois-je ajouter quelque chose de particulier? Cette commande est pour l'instant completement indépendant de mon application non?
    arf je vois pas ce que je fais de mal, et pourtant je suis sure qu'il s'agit d'une connerie...

  2. #22
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    eh ! il faut mettre le nom de la classe où il y a le 'main' après la partie sécurité, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Djava.security.manager -Djava.security.policy="mysec.policy" maClassMain
    L'objectif étant de lancer ton application avec des paramètres de sécurité spécifiques pour la JVM

  3. #23
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Ah oui, j'avais essayé aussi et voila ce que j'obtiens alors que pourtant mon appli au sein de netbeans tourne!
    Exception in thread "main" java.lang.NoClassDefFoundError: L:\Fichiers_JAVA\ejb_tests\EJBManagerProto\build\classes\com\orsyp\ejbmanagerapp\Application

  4. #24
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Bon je vais tester juste avec une simple application comme tu m'as montré et je vous tiens au courant!

  5. #25
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    bon voilà, j'avais des problèmes dans ma ligne de commande et mon classpath... puisque j'y inscrivais le package.
    mais maintenant voila ce que j'obtiens quand j'exécute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Documents and Settings\vab>java -Djava.security.manager -Djava.security.polic
    y="mysec.policy" javaapplication11.ClientClass
    java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)
            at java.security.AccessControlContext.checkPermission(Unknown Source)
            at java.security.AccessController.checkPermission(Unknown Source)
            at java.lang.SecurityManager.checkPermission(Unknown Source)
            at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
            at java.lang.System.getProperties(Unknown Source)
            at javaapplication11.ClientClass.main(ClientClass.java:27)
    donc visiblement des problemes de permissions mais pourtant mon fichier mysec.policy (situé dans le meme repertoire que ma classe que j'exécute) est :
    grant{
    // Allow everything for now
    permission java.security.AllPermission;
    };
    une idée?

  6. #26
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    il faut qu'il soit dans le répertoire où tu lance la commande Java !

  7. #27
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    c'est ce que je fais pourtant... mais que j'inscrive ou non le nom du fichier j'ai la memem erreur

  8. #28
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    :
    un autre point : quand je lance mon appli directement juste avec un
    java NomdeMaClasse
    je n'ai pas d'erreur mais il n'entre pas dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Proxy.isProxyClass(objref.getClass()) )
    : :

  9. #29
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Peux-tu nous donner tout ton code ?

  10. #30
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    c'est celui que tu m'avais fourni ego, je le remets :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package javaapplication11;
     
     
    import javax.naming.Context; 
    import javax.naming.InitialContext; 
    import javax.rmi.PortableRemoteObject; 
    //import CommandHome; 
    //import Command; 
    import java.util.Properties; 
    import java.lang.reflect.Proxy; 
    import java.lang.reflect.Method; 
     
    public class ClientClass { 
        public static void main(String[] argv) { 
            try { 
                Properties props = System.getProperties(); 
                props.put(Context.PROVIDER_URL, URL); 
                props.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); 
                Context initial = new InitialContext(props); 
                Object objref = initial.lookup(JNDI); 
                if (Proxy.isProxyClass(objref.getClass())) { 
                    System.out.println(objref.getClass().getName()); 
                    Class[] interfaces = objref.getClass().getInterfaces(); 
                    for (int i=0;i<interfaces.length;i++) { 
                        System.out.println(">> " + interfaces[i].getName()); 
                        if (!"javax.".equals(interfaces[i].getName().substring(0,6))) { 
                            Method[] ms = interfaces[i].getMethods(); 
                            for (int j=0;j<ms.length;j++) { 
                                System.out.println("     -- " + ms[j]); 
                                if ("create".equals(ms[j].getName())) { 
                                    Class o = ms[j].getReturnType(); 
                                    Method mo[] = o.getMethods(); 
                                    for (int k=0;k<mo.length;k++) { 
                               System.out.println("       ** " + mo[k]); 
                                    } 
                                } 
                            } 
                        } 
                    } 
                } 
                //CommandHome home = (CommandHome)PortableRemoteObject.narrow(objref, CommandHome.class); 
                //Command aCommand = home.create(); 
                // write your test code here 
                //aCommand.method1(); 
                //aCommand.remove(); 
            } catch (Exception ex) { 
                ex.printStackTrace(); 
            } 
        } 
     
        private final static String JNDI_FACTORY = "com.sun.enterprise.naming.SerialInitContextFactory"; 
        private final static String JNDI = "ejb/CartBean"; 
        private final static String URL = "localhost:4848"; 
    }
    voilà

  11. #31
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Je n'y arrive tjrs pas, j'ai des questions encore
    faut-il que je fasse quelque chose de particulier quand je déploie mes EJBs dont je me sers pour exemple?
    J'utilise le SA de sun, y'a t'il quelque chose de particulier?

    merci merci merci

  12. #32
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Côté serveur d'appli, il faut simplement que ton EJB soit bien référencé avec le JNDI_NAME que tu as dans ton client.

    Ensuite, il faut que le codebase soit configuré côté serveur d'appli. Sous JBoss, c'est automatique mais je ne sais pas si c'est qq chose d'automatique sur tous les serveurs d'application (qq chose me dit que cela devrait être ok sur tous les serveurs).

    Peux-tu donner toute la stacktrace de l'exception ?

  13. #33
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Alors quand j'essaie avec la ligne de cmde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L:\Fichiers_JAVA\ejb_tests\JavaApplication11\src>java -Djava.security.manager -Djava.security.policy="mysec.policy" javaapplication11.ClientClass
    j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.security.AccessControlException: access denied (java.util.PropertyPermissio
    n * read,write)
            at java.security.AccessControlContext.checkPermission(Unknown Source)
            at java.security.AccessController.checkPermission(Unknown Source)
            at java.lang.SecurityManager.checkPermission(Unknown Source)
            at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
            at java.lang.System.getProperties(Unknown Source)
            at javaapplication11.ClientClass.main(ClientClass.java:27)
    Si je fais seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L:\Fichiers_JAVA\ejb_tests\JavaApplication11\src>java javaapplication11.ClientClass
    Jen 'ai pas d'erreur mais aucun résultat (il n'entre pas dans la condition if (Proxy.IsProxyClass)
    7 nov. 2005 17:29:01 com.sun.corba.ee.spi.logging.LogWrapperBase doLog
    INFO: "IOP00710299: (INTERNAL) Successfully created IIOP listener on the specified host/port: all interfaces/4198"
    voilà

  14. #34
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Bon alors le lancement avec le fichier .policy est ok maintenant, mon fichier n'était pas dans le bon répertoire je n'avais pas compris...
    Cependant il n'entre tjrs pas dans mon If(Proxy.IsProxyClass)
    Bon cela signifie qu'il ne s'agit pas d'une classe Proxy mais comment faire? Il faut faire quelque chose de particulier lors du déploiement des EJb ?

    merci

  15. #35
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Si la classe n'est pas un proxy, arrives-tu alors à faire la narrow et à appeler une méthode de l'EJB ?
    Peux-tu aussi afficher le type de l'objref ? ( System.out.println(objref.getClass().getName()); )

  16. #36
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Alors :
    Lorsque j'affiche la classe de l'EJB :
    Si j'ai le jar de l'EJB dans le classpath, j'obtiens :
    converter._ConverterRemoteHome_DynamicStub
    Si par contre je n'ai pas l'EJB dans le classpath (et c'est ce que je veux), j'obtiens :
    com.sun.corba.ee.impl.corba.CORBAObjectImpl
    Maintenant lorsque j'ai le jar de l'EJB j'arrive a faire le narrow et a invoquer une méthode oui...
    voici le code dans le cas ou je possède le jar de l'ejb dans le classpath et lorsque j'invoque une méthode :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package javaapplication11;
     
     
    import java.math.BigDecimal;
    import javax.naming.Context; 
    import javax.naming.InitialContext; 
    import javax.rmi.PortableRemoteObject; 
     
    import converter.ConverterRemote;
    import converter.ConverterRemoteHome;
    import java.util.Properties; 
    import java.lang.reflect.Proxy; 
    import java.lang.reflect.Method; 
     
    public class ClientClass { 
        public static void main(String[] argv) { 
            try { 
                Properties props = System.getProperties(); 
                props.put(Context.PROVIDER_URL, URL); 
                props.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); 
                Context initial = new InitialContext(props); 
                Object objref = initial.lookup(JNDI); 
                if (Proxy.isProxyClass(objref.getClass())) { 
                    System.out.println("LA"); 
                    System.out.println(objref.getClass().getName()); 
                    Class[] interfaces = objref.getClass().getInterfaces(); 
                    for (int i=0;i<interfaces.length;i++) { 
                        System.out.println(">> " + interfaces[i].getName()); 
                        if (!"javax.".equals(interfaces[i].getName().substring(0,6))) { 
                            Method[] ms = interfaces[i].getMethods(); 
                            for (int j=0;j<ms.length;j++) { 
                                System.out.println("     -- " + ms[j]); 
                                if ("create".equals(ms[j].getName())) { 
                                    Class o = ms[j].getReturnType(); 
                                    Method mo[] = o.getMethods(); 
                                    for (int k=0;k<mo.length;k++) { 
                               System.out.println("       ** " + mo[k]); 
                                    } 
                                } 
                            } 
                        } 
                    } 
                } 
                ConverterRemoteHome home =
                            (ConverterRemoteHome)PortableRemoteObject.narrow(objref, ConverterRemoteHome.class);
                    System.out.println(objref.getClass().getName());
                   /* Method[] m = objref.getClass().getMethods();
                    int nombreMethode = m.length;
                    int i = 0;
                    while(nombreMethode!=i)
                    {
                        System.out.println(m[i]);
                        i++;
                    }*/
                   ConverterRemote conv = home.create();
                    BigDecimal yenToEuro = new BigDecimal("200.000");
                    yenToEuro = conv.yenToEuro(yenToEuro);            
                    System.out.println("200 yens equivaut à : "+ yenToEuro + "euros");
                    System.exit(0);
            } catch (Exception ex) { 
                ex.printStackTrace(); 
            } 
        } 
     
        private final static String JNDI_FACTORY = "com.sun.enterprise.naming.SerialInitContextFactory"; 
        private final static String JNDI = "ejb/ConverterBean"; 
        private final static String URL = "localhost:4848"; 
    }
    et le résultat :
    9 nov. 2005 13:44:55 com.sun.corba.ee.spi.logging.LogWrapperBase doLog
    INFO: "IOP00710299: (INTERNAL) Successfully created IIOP listener on the specified host/port: all interfaces/1093"
    converter._ConverterRemoteHome_DynamicStub
    200 yens equivaut à : 1.54euros
    voila...

  17. #37
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Ok, donc toi ce qui t'intéresse c'est quand tu n'as pas le jar de l'EJB et donc quand la référence est de type com.sun.corba.ee.impl.corba.CORBAObjectImpl
    Sinon, vu que ce n'est pas un proxy, je doute que les opérations de ton EJB puissent être trouvées en introspectant l'objref.

    Maintenant, je ne vois que la doc de CORBAObjectImpl à regarder pour savoir ce que l'on peut demander à ce type d'objet.

  18. #38
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Je ne comprends pas bien, toi avec le code que tu m'as donné ca fonctionnait non? c'est quoi la différence pour moi?

    merci de ton aide.

  19. #39
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Visiblement, comme on doit avoir quand même des classes propres au serveur d'application pour lancer le client si on ne passe pas par iiop. Notamment les classes permettant de parler à l'annuaire JNDI, il y a un fonctionnement différent entre les serveurs d'application.
    JBoss, lui, crée un dynamic proxy sur le client dont l'interface est celle de l'EJB et donc mon code fonctionne.
    Dans ton cas, le serveur de SUN ne créé par de proxy mais un objet CORBA. Il faut maintenant regarder ce que l'on peut demander à cette objet.

  20. #40
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    C'est quoi exactement le serveur que tu utilises : nom, version ?

    Pour la classe, il semble que cette classe hérite de ObjectImpl dont un doc est ici : http://download.java.net/jdk6/docs/a...bjectImpl.html

    Il y a une méthode _get_interface_def qui permet de récupérer la définitin de l'interface supportée par l'objet. Donc à voir.
    Puis create_request pour créer des requêtes = appels d'opérations et _invoke pour l'appel effectif.
    je n'ai pas encore testé tout cela

Discussions similaires

  1. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  2. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00
  3. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  4. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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