EJB (EAR) Architektur

Diskutiere EJB (EAR) Architektur im Application Tier Forum; Hallo zusammen, ich habe ein EJB-Modul Projekt mit einem Service: @Stateful @Remote public class HelloWorldImpl implements HelloWorld{...

  1. Gast2
    Gast2 Guest
    Hallo zusammen,

    ich habe ein EJB-Modul Projekt mit einem Service:

    Code (Java):

    @Stateful
    @Remote
    public class HelloWorldImpl implements HelloWorld{


       
        @Override
        public String sayHello(){
        System.out.println("hello world");
        return "hello world";
        }
    }
     
    Dieses Projekt nutzt ein ejb-commons in welchem die ganzen Interfaces drin.
    Code (Java):

    public interface HelloWorld{

        public String sayHello();
    }
     
    Mein Richt Client Projekt nutzt natürlich diese commons auch.
    Code (Java):

    public class Client {

        public static void main(String[] args) throws Exception{

            //RMI
            Hashtable<String,String> environment = new Hashtable<String,String>();
            environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); // remote machine IP
            Context context = new InitialContext(environment);
            try {
                HellorWorld hello = (HellorWorld ) context
                .lookup("HelloWorldImpl/remote");
                hello.sayHello();
            } catch (NamingException e) {
                e.printStackTrace();
            }  
       

        }
    }
     

    Bekomme ich immer die Fehlermeldung
    Code (Java):

    Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to service.PricepilotSession
        at main.Client.main(Client.java:22)
     
    Das passiert nur wenn ich ein Projekt verwende welches der Server und der Client benutzt. Ich habe gelesen die Exception kommt wenn der Server und Client unterschiedeliche jars benutzt, was bei mir ja nicht sein kann weil ich auf die Projekt Referenzen gehe.

    Ist an der Architektur was falsche?
    ejb-commons -->interfaces
    client benutzt ejb-commons
    ejb-module (bu) benutzt ejb-commons
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. FArt
    FArt Neues Mitglied
    Ich bin mir nicht sicher was passiert, wenn man an der Implementierung lediglich die @Remote Annotation hinschreibt, ohne das Businessinterface in dieser Annotation zu konfigurieren.

    Ich würde in dieser Reihenfolge den Fehler suchen:
    1.) Ist der Code sauber? Wohl nicht, denn was ist PricepilotSession, welches in deinem Beispiel nicht vorkommt.
    2.) Nutzt der Client die gleichen Client JARs (auch die Clientressourcen des Applikationsservers). Gehe nicht nach "kann nicht sein" sondern kontrolliere das!
    3.) Annotiere die Implementierung mit @Remote(HelloWorld.class)
     
  4. fastjack
    fastjack Aktives Mitglied
    Wenn Du in der Annotation nix bei Remote angibst, wird in diesem Fall "HelloWorld" als Remote-Interface benutzt.

    Wenn Du in der Annotation ein Interface angibst, wird dieses als Remote-Interface benutzt.
     
  5. Gast2
    Gast2 Guest
    Immer noch gleiches Problem
    Code (Java):

    @Stateful
    @Remote(HelloWorld.class)
    public class HelloWorldImpl implements HelloWorld{


       
        @Override
        public String sayHello(){
        System.out.println("hello world");
        return "hello world";
        }
    }
     
    Code (Java):

    public interface HelloWorld{

        public String sayHello();
    }
     
    Code (Java):

    public class Client {

        public static void main(String[] args) throws Exception{

            //RMI
            Hashtable<String,String> environment = new Hashtable<String,String>();
            environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); // remote machine IP
            Context context = new InitialContext(environment);
            try {
                HellorWorld hello = (HellorWorld ) context
                .lookup("HelloWorldImpl/remote");
                hello.sayHello();
            } catch (NamingException e) {
                e.printStackTrace();
            }  
       

        }
    }
     

    Code (Java):

    Exception in thread "main" java.lang.ClassCastException: javax.naming.Reference cannot be cast to service.HelloWorld
        at main.Client.main(Client.java:22)
     
     
  6. Gast2
    Gast2 Guest
    Ich hab in Eclipse Projekt Referenzen angegeben.
     
  7. Gast2
    Gast2 Guest
    Okay hab jetzt mal alle jboss/client jars(ca. 40 stück) genommen und im client aufgenommen dann hat es getan
     
  8. fastjack
    fastjack Aktives Mitglied
    schön waren die Zeiten, als es einen jboss-allclient gab ...
     
  9. Gast2
    Gast2 Guest
    Allerdings, ich bezweifel auch dass ich alle benötige, aber ist mir auch zu dumm alles raus zu suchen die ich benötige.
     
Die Seite wird geladen...

EJB (EAR) Architektur - Ähnliche Themen

Model2-Architektur Servlets
Model2-Architektur Servlets im Forum Web Tier
Allgemeine Architekturfrage: REST API, Job Queue, Thread Pool unter Spring Kontrolle
Allgemeine Architekturfrage: REST API, Job Queue, Thread Pool unter Spring Kontrolle im Forum Allgemeines EE
Unterschied Tier3-Architektur und MVC-Entwurfsmuster
Unterschied Tier3-Architektur und MVC-Entwurfsmuster im Forum Web Tier
Architektur für Software
Architektur für Software im Forum Allgemeine Java-Themen
Architektur für JPA Hibernate Umstieg
Architektur für JPA Hibernate Umstieg im Forum Datenbankprogrammierung
Thema: EJB (EAR) Architektur