ejb @Remote macht probleme

Mr.y

Aktives Mitglied
Hallo, ich möchte meine ejb-klasse auch für entfernte Computer erreichbar machen,
daher hab ich der stateless-ejb nen "@remote"-Interface verpasst, sonst hab ich werde was in irgendwelchen .xml´s noch wo anders irgendwas eingestellt.

Beim Zugriff habe ich nen Datentypen von der Schnittstelle definiert:

KlasseA:

Java:
private Schnittstelle meineSchnittstelle

dann rufe ich sie auf:

Java:
meineSchnittstelle.suche(String name)

dann geht er in die entsprechende ejb, sucht, findet und gibt zurück...(was ja auch vor her geklappt hat)
nun aber, passiert beim zurückgeben von einer gefüllten Liste ein komischer Fehler:

description: The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is:
org.omg.CORBA.MARSHAL: Warnung: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe

Hätte da jemand ne Idee, was das sein könnte, irgendwas stimmt mit der aufstellung von so genanntem "remote call header" (laut doku)?
Danke im Voraus
 

JimPanse

Bekanntes Mitglied
Hallo, ich möchte meine ejb-klasse auch für entfernte Computer erreichbar machen,
:autsch:

sonst hab ich werde was in irgendwelchen .xml´s noch wo anders irgendwas eingestellt.
:shock:


Wie greifst du auf die Bean zu? Von einer anderen Bean (aus einem anderem Java EE Projekt) oder über einen Service Locator in einer Java SE Application? JNDI Parameter richtig gesetzt? Was benutzt du? Einen JBoss AS oder Glassfish? Welche version des AS? Welche EJB version 3 oder 3.1...

???:L???:L???:L???:L???:L???:L
 

Mr.y

Aktives Mitglied
sorry, für die wenige info.

Wie greifst du auf die Bean zu?

Ich injeziere die stateless-bean von der logic-schicht in die SessionScoped der "BackingBean" Schicht vom Martin Flower.

Und ich habe das gefühl, dass diese ejb-bean nicht mehr an dem Kontext dranhängt...

JNDI Parameter richtig gesetzt?
Muss man das bei einer Web-Anwendung auch machen? ich hab bisher mit JNDI gar nix gemacht.

Ich nutze Glassfish.
Ich habe eine Webanwendung, d.h. ich gebe die URL einfach im browser ein und es erscheint alles, bis ich das auf @remote umgestellt habe.
Welche ejb-version ich habe....ich weiss das net so recht, vermutlich die neuste, wo kann ich das nachschauen?

Danke schon mal
 

JimPanse

Bekanntes Mitglied
Ich injeziere die stateless-bean von der logic-schicht in die SessionScoped der "BackingBean" Schicht vom Martin Flower.

Martin Flower??? Martin Fowler meinst du oder? Kenne ich jetzt eher aus dem Bereich Refactoring...

EJB FAQ — Java.net
I have a Remote EJB dependency (@EJB or <ejb-ref>) in my Java EE component. How do I control which actual target EJB component it refers to?

If the target EJB component is defined within the same application as your referencing component and there is only one target EJB component within the application that exposes the remote interface associated with your EJB dependency, then the mapping will happen automatically. In this case, there is no need to specify any additional mapping information.

Wenn ich es richtige verstehe erfolgt der Zugriff im gleichen ear und du willst nur mal mit Remote rum testen. Sieht das ganze so aus:

Java:
@SessionScope
@ManagedBean
public class DeineJSFBean implements Serializable {
@EJB
private Schnittstelle meineSchnittstelle
}

Java:
@Stateless // oder @Remote(value = Schnittstelle.class)
public class DeineEJBBean implements Schnittstelle;
@Remote
public interface Schnittstelle;

Ansonsten der Anleitung folgenen zum Thema mapping.

Greetz
 

Mr.y

Aktives Mitglied
joa, den hab ich gemeint :)

ich hab irgendwie gedacht, dass ich nur bei der Schnittstelle selbst die Annotation @remote angeben soll:

Java:
@Remote
public interface IRemoteInterface extends Serializable{

    public void persist(Object object);

wenn ich nun @remote bei der ejb auch angebe:

Java:
@Stateless //ist nun eine EJB
@Remote(value= IRemoteInterface.class)
    
public class ProjektService implements IRemoteInterface {
    
  
    @PersistenceContext(unitName = "ProjektPU")
    private EntityManager em;

dann passiert der selbe Fehler in der internen java-klasse:
Method.java in der Methode invoke
wo er das ganze zurück an die SessionScoped Bean geben will:

Java:
return ma.invoke(obj, args);

Im Error-Stack steht ganz unten auch:
java.lang.NullPointerException
Also nehme ich stark an, dass er den Kontext (SessionScoped) net mehr kennt bzw. nicht mehr injezieren lässt....

Ich hab noch die JNDI in meine web.xml eingebunden, um die Datenbank noch mal explizit unter meiner lokalen IP anzugeben, aber das funktioniert soweit alles, weil er die gefunden Einträge zurückgeben möchte...
 

JimPanse

Bekanntes Mitglied
Ey sorry,

ich bin ja schon kein Goethe aber deine "Sätze" zu lesen und verstehen :shock:

Ich glaube es liegt einige Missverständnis deiner Seits vor. Poste doch einfach mal nur den relavanten Code, weil

1. JNDI-DS in die web.xml einztragen macht bei einer Container gemanagen Anwendung keinen Sinn
2. Aufruf der EJBean in einer internen Klassen -> was meinst du damit?
 

Mr.y

Aktives Mitglied
hehe^^

also:

Interface Code sieht so aus:
Java:
public interface IRemoteInterface extends Serializable{

    public List<Projekt> findProjekt(String strname) throws Exception;

Dann wird in der KontextBean die passende Methode aufgerufen:

Java:
@Named
@SessionScoped
public class EJBVerdrahtung implements Serializable {
@EJB
private IRemoteInterface mIProjekt;  //Typ der Schnittstelle deklarieren
//Hier rufe über mIProjekt die passende "findProjekt"-Methode der EJB auf. Die sucht //wiederrum...findet..will zurückgeben:
//Aufruf:
public List<Projekt> projektPresent(String strProjekt) throws meineException {
      lstProjektListe = mIProjekt.findProjekt(strProjekt);
}

Ejb sieht so aus:
Java:
@Stateless 
@Remote(value= IRemoteInterface.class)
public class ProjektService implements IRemoteInterface {

@Override
public List<Projekt> findProjekt(String strname)  throws Exception {
        List<Projekt> lstResutlList = null;
        try {
            
            TypedQuery<Projekt> createNamedQuery = null;
            if (strname.isEmpty()) {
                createNamedQuery = em.createNamedQuery(Projekt.FIND_PROJEKT, Projekt.class);
            }else
            {
                createNamedQuery = em.createNamedQuery(Projekt.FIND_BY_NAME, Projekt.class);
                //Dann Parameter setzen, wonach ich suche
                createNamedQuery.setParameter("strname", strname).setMaxResults(1);
            }

            //Ergebnis anfordern
            
            if (!createNamedQuery.getResultList().isEmpty()) {
               
                lstResutlList = new ArrayList<Projekt>();
                lstResutlList = createNamedQuery.getResultList();
               
            }

            return lstResutlList;//FEHLER PASSIERT GENAU HIER, ABER ER GEHT IN KEINE EXCEPTION
    }
}
 

JimPanse

Bekanntes Mitglied
BTW: Remote-Interfaces müssen nicht serialisiert werden.

Java:
public List<Projekt> findProjekt(String strname)  throws Exception { // int firstResult, int maxResult
        List<Projekt> lstResutlList = null;
        try {
            
// DAS KANN EINEN NPE AUSLÖSEN strname.isEmpty() -> strname = null

            TypedQuery<Projekt> createNamedQuery = null;
           
 if (strname != null && strname.isEmpty()) { // besser
                createNamedQuery = em.createNamedQuery(Projekt.FIND_PROJEKT, Projekt.class);
            }else
            {
                createNamedQuery = em.createNamedQuery(Projekt.FIND_BY_NAME, Projekt.class);
                //Dann Parameter setzen, wonach ich suche
                createNamedQuery.setParameter("strname", strname); 

// NA WENN ÜBERGIBT MAN EIN FIRSTRESULT UND EIN MAXRESULT
//createNamedQuery.setMaxResults(1);
            }
 
            //Ergebnis anfordern -> RICHTIG ABER
// createNamedQuery.getResultList() -> holt das Ergebnis aus der DB und wandelt es um 
// ABER WARUM x2???
            /*   UNNÖTIG
 if (!createNamedQuery.getResultList().isEmpty()) {
               
                lstResutlList = new ArrayList<Projekt>();
                lstResutlList = createNamedQuery.getResultList();
               
            }*/
 
   lstResutlList = createNamedQuery.getResultList();

            return lstResutlList;//FEHLER PASSIERT GENAU HIER, ABER ER GEHT IN KEINE EXCEPTION

// WAS FÜR EIN FEHLER??? DER NPE (was ich nicht glaube) ODER DER MARSHALLING FEHLER????
    }

Interessant wäre noch wo die Methode -findProjekt("string") in der SessionBean aufgerufen wird.
 

Mr.y

Aktives Mitglied
Der ganze Fehler-Stack:


type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is:
org.omg.CORBA.MARSHAL: Warnung: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe
root cause

javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is:
org.omg.CORBA.MARSHAL: Warnung: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe
root cause

java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is:
org.omg.CORBA.MARSHAL: Warnung: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe
root cause

org.omg.CORBA.MARSHAL: Warnung: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe
root cause

java.lang.NullPointerException


Interessant wäre noch wo die Methode -findProjekt("string") in der SessionBean aufgerufen wird.

äähhmm...in der 9ten Zeile des zweiten Codeabschnittes:

lstProjektListe = mIProjekt.findProjekt(strProjekt);

wie gesagt, das hat local alles funktioniert, nur mit Remote geht da was nicht....:(
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
eskimo328 Macht REST immer sinn? Web Tier 1
ruutaiokwu myfaces macht unbekannte zeichen in output rein... Web Tier 7
P Zurück-Button des Browsers macht Probleme Web Tier 9
W JSTL macht Probleme Web Tier 6
W JavaBeans class="" macht Probleme Web Tier 2
pkm Probleme mit einem AJAX-Call in einem dynamischen Webprojekt Web Tier 15
M JSF Probleme bei Navigation mit Verzeichnisswechsel Web Tier 2
W JSF Probleme mit Data Table Web Tier 8
W JSF Probleme mit Zugriff zur Managed Bean Web Tier 11
G Probleme mit Java + Tomcat | Cannot switch on a value of type String for source level below 1.7 Web Tier 8
F JSF Probleme mit OverlayPanel Web Tier 0
H Frameset durch Tabelle ersetzten - Probleme mit jsp:include Web Tier 3
xehpuk JSF URL-Encoding-Probleme bei <h:link> (Mojarra) Web Tier 4
S JSF SelectOneMenu - Probleme mit AJAX Web Tier 6
W Probleme mit Expression language ? Web Tier 13
P JSF Datenbank Probleme (Limit, Wiederholung) Web Tier 8
J JSF JavaScript Probleme zwischen Tomahawk und Tiles!? Web Tier 2
B Probleme mit h:selectOneRadio Web Tier 2
T DWR - Probleme mit Konfiguration Web Tier 13
W JSF MyFaces Tomahawk Probleme Web Tier 4
G Probleme mit EclipseLink und Java.util.Date Web Tier 3
S JSF Probleme beim redirect im ExceptionHandler Web Tier 2
P JSF 1.2 Navigation probleme Web Tier 2
D Probleme beim installieren von WebBeans Web Tier 2
D Probleme mit Tomcat Web Tier 3
M Tomcat 6 Umlaut Probleme Web Tier 2
D Seam Example Probleme Web Tier 2
C Probleme mit JSPs in Unterverzeichnissen Web Tier 4
A [PrimeFaces] dataTable mit paginator Probleme Web Tier 2
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
0 JSF: css einbinden - Probleme Web Tier 2
M iframe probleme Web Tier 2
K [GWT] Probleme beim asynchronen Methodenaufruf mit GWT-RPC Web Tier 8
B Probleme mit RichFaces Web Tier 2
O struts2 - Probleme mit parametrisierten URLs Web Tier 5
E Probleme mit GWT & MySQL Web Tier 3
G Probleme mit Ajax Login (jsp) Web Tier 5
S Tomcat / Eclipse Probleme Web Tier 2
B Probleme mit <jsp:include page=""/> und Laufzeit Web Tier 7
O Struts2: Probleme mit Links aus Packages raus Web Tier 9
A JSF+Glassfish: Probleme mit Managed Bean Web Tier 2
S Probleme mit den Nav_rules und HTML code Web Tier 2
D Probleme mit ServletRequest Web Tier 14
G Probleme mit Tomcat Web Tier 14
E RichFaces 3.2.1 Probleme Web Tier 4
A Time-Out Probleme Web Tier 21
B Probleme mit Marquee Tag Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben