Hando84 Geschrieben 3. März 2009 Geschrieben 3. März 2009 Ich möchte in NetWeaver von einer JSP(in EAR1) auf ein Session-Bean(in EAR2) zugreifen. Beide EAR's sollen auf dem gleichen Server liegen, einem SAP 7.1 Web-Application-Server. Jedoch funktioniert das ganze nicht so wie es soll. Sobald ein narrow auf das interface erzeugt werden soll bricht die Funktion ab. So sieht mein JSP aus: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="javax.naming.Context, javax.naming.InitialContext, javax.rmi.PortableRemoteObject, com.sap.sdn.ejb.HelloWorldLocal" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello World</title> </head> <body> <% try { Context ctx = new InitialContext(); Object o = ctx.lookup( "com.tsi/MS_HelloWorldEAR/LOCAL/HelloWorldBean/com.sap.sdn.ejb.HelloWorldLocal"); HelloWorldLocal helloRef = (HelloWorldLocal) PortableRemoteObject.narrow(o, HelloWorldLocal.class); <-- Abbruch String msg = helloRef.sayHello("World"); out.println(msg); out.println("Sie befinden sich noch im try-Block"); } catch (Exception e) { out.println("Funktion im try-Block fehlgeschlagen: " + e.getMessage()); } %> </body> </html> Weiss zufällig einer was ich da flasch mache? Denke, dass ich da irgendwo noch ne Class-Loader-Referenz einbauen muss oder sowas, aber habe ehrlich gesagt keine Ahnung wie das funktioniert... Habe dem DynamicWebProject im Java Build Path auch die entsprechende Library(nur mit den Interfaces ohne die eigentliche Bean) zugewiesen. Als ich den Client noch auf meinem Rechner hab laufen lassen, ohne ihn wie die bean auf den server zu deployen hat das ganze einwandfrei über das remote-interface funktioniert. Vielleicht weiß ja einer von euch Rat. Mfg Michael Zitieren
VaNaTiC Geschrieben 3. März 2009 Geschrieben 3. März 2009 ich dachte man muss im Client das HelloWorldRemote und nicht Local nehmen Zitieren
Hando84 Geschrieben 3. März 2009 Autor Geschrieben 3. März 2009 wenn beide auf unterschiedlichen jvm's laufen ja. wenn ich den client auf meinem rechner laufen lasse und nur das ear mit der ejb auf den webserver deploye geht das mit dem remote-aufruf auch problemlos. aber sobald ich beide auf dem server laufen lassen will gehts nimmer, ob remote oder local ist egal...würde es aber schon gerne über local laufen lassen wenn beide auf dem gleichen server liegen. dachte es hat vielleicht damit zu tun, dass ich die interfaces bei den libraries im client als externe jars mit angebe und dann audgrund dessen 2 verschiedene classloader die datei laden. aber weiss net, wie ich die das sonst machen soll...sonst kann ich ja kein object vom typ HelloWorldLocal erzeugen...weil er das dann ja net kennt. Zitieren
kingofbrain Geschrieben 3. März 2009 Geschrieben 3. März 2009 EARs sind laut Spezifikation über den Classloader voneinander getrennt. Deshalb kannst Du nicht direkt auf Instanzen eines anderen EAR zugreifen. Die meisten Application Server können das optimieren, wie es bei SAP aussieht: keine Ahnung. Aber prinzipiell: Du solltest nicht aus einer JSP heraus auf eine EJB zugreifen, und schon gar nicht über Code-Blöcke in der JSP. Trenne Deine Schichten sauber voneinander ab. Stichwort Model2 Architektur. Peter Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.