Avatar billede landmanden Nybegynder
20. oktober 2001 - 17:15 Der er 9 kommentarer

JSP, Servlets og Resin

Følgende lookup efter en ejb fungerer I en servlet, men ikke I en jsp – hvorfor??

Context ejb =  (Context) new InitialContext().lookup(\"java:comp/env/cmp\");
TestHome home = (TestHome) ejb.lookup(\"sko_test\");

Sidste linie giver en NullPointerException i jsp\'en.
Avatar billede landmanden Nybegynder
21. oktober 2001 - 10:39 #1
Samme problem melder sig iøvrigt når jeg prøver at etablere forbindelse til en database via lookup. Servletten fungerer fint, men jsp\'en giver en NullPointerException!?!?!
Avatar billede landmanden Nybegynder
21. oktober 2001 - 11:29 #2
Spørgsmålet udspringer iøvrigt af, at jeg startede med i min servlet at etablere forbindelse til en ejb. Dens objekter placerede jeg så i et Session objekt, hvorefter jeg forwardede requesten til en jsp. Men jsp\'en kunne ikke se sessionens attributter, selvom servletten og jsp\'ens session objekt havde samme id. Man burde så formode at der var tale om det samme Session objekt, ikke?. Anyway, jeg prøvede så istedet lookup direkte fra jsp\'en, hvilket jo så altså ikke virker.
Avatar billede zoner Nybegynder
21. oktober 2001 - 11:33 #3
hej! nu bruger jeg ikke lige Resin .. men
prøv følgende

InitialContext ctx=new InitialContext();
Object ref= ctx.lookup(\"java:comp/env/ejb/cmp\");
TestHome home=(TestHome)
Avatar billede zoner Nybegynder
21. oktober 2001 - 11:58 #4
ehem .. jeg fortsætter lige

..TestHome home=(TestHome)
PortableRemoteObject.narrow(ref,TestHome.class);

Husk at der er noget lusket i ejb 1.1, der gør at du ikke bare kan caste ligesom i ejb 1.0.
(det er noget CORBA afhængigt noget -- alle sprog har jo ikke casting ligesom java)


Avatar billede landmanden Nybegynder
21. oktober 2001 - 12:41 #5
No luck. Dybt underligt at det kan lade sig gøre fra en servlet, men ikke fra en jsp!
Avatar billede zoner Nybegynder
21. oktober 2001 - 13:14 #6
mon ikke Resin skulle have nogle jsp + ejb eksempler du kunne kigge på?

Jeg benytter selv jboss + tomcat - og de fungerer fint. Faktisk vidste jeg ikke at Resin også er blevet en j2ee container? (jeg troede at den kun var en servlet container)

husk på at jsp oversættes til servlets under runtime. Så det giver ingen mening at sige at noget virker \'som en servlet men ikke som jsp\'.
Avatar billede landmanden Nybegynder
21. oktober 2001 - 13:31 #7
Jeg har ikke kunnet finde noget brugbart mht. til lookup fra jsp filer i Resins eksempler.

Jeg er godt klar over at jsp bliver lavet til servlet - det er jo netop derfor jeg undrer mig over at over at koden opfører sig forskelligt, afhængig af om den står i en servlets service() metode, eller om den står i en jsp fil.

Avatar billede zoner Nybegynder
21. oktober 2001 - 15:47 #8
Jeg har lige kigget på resins cmp implementation.

Det er måske ikke så smart at du bruger ejb fra resins servlet container - de bruge noget de kalder \"Burland\" protokollen - der vist er noget værre hjemmebryg.
Øvrige ejb1.1 implementationer bruger rmi/iiop (det CORBA-afhængige halløj der med PortableRemoteObject.

Jeg ville tænke mig om to gange før jeg gik igang med at bruge caucho resin\'s Burland protokol, da den ikke er brugt i de øvrige implementationer.
Det ville være at fravige j2ee standarden.

Jeg kan se at du må have fulgt eksemplet på:
http://www.caucho.com/products/resin-ejb/ejb-tut/entity-home.xtp

hvis du kombinerer init() og service() i eksemplet og putter dem ind i en gang <% .. %> i din jsp og samtidigt inkluderer de nødvendige filer så burde det funke. Det vil dog blive langsommere ..ehehe

Der er iøvrigt flere mangler i resins j2ee implementation som jeg kan få øje på, så måske skulle du holde dig til jdbc hvis du er fanget på resin :o)

resin er udmærket som servlet container -- den er dog knapt så god som j2ee container lader det til.

Du skulle måske snakke med nogen, der har erfaring med brug af Resin -- det lader til at den kræver en ikkestandard initialisering af home interfaces til entity beans.

Avatar billede landmanden Nybegynder
22. oktober 2001 - 10:34 #9
Jeg HAR prøvet at samle init() og service() koden i én scriplet. Jeg har også prøvet at placere dem separat, med init() koden placeret i et declaration tag eller som jspInit(). Lige lidt hjælper det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester