EJB3 JSP oldalról

Fórumok

Sziasztok!

kérlek segítsetek, számtalan leírást követve próbáltam a beanemet elérni jsp oldaról, eddig sikertelenül.
package test;

import javax.ejb.PostActivate;
import javax.ejb.Stateful;
@Stateful(name="TestB")
public class TestBean implements TestLocal {
private int szam;

@PostActivate
void init() {
this.szam = 0;
}

public void setSzam(int szam) {
this.szam = szam;
}

public int getSzam() {
return this.szam;
}
}
-------
<%@ page import="test.TestLocal, javax.naming.*, java.text.*"%>
<%!
private TestLocal tb = null;
public void jspInit () {
try {
InitialContext ctx = new InitialContext();
tb = (TestLocal) ctx.lookup("TestB"); //"test/TestLocal/local" ezzel is próbálkoztam, az ear file neve test
} catch (Exception e) {
e.printStackTrace ();
}
}
%>

Kérlek benneteket segítsetek megoldani ezt a problémát. Előre is köszönöm.

Hozzászólások

jajjjjajjjajj! :)

a JSP a prezentacios reteg eszkoze, ugyebar (MVCben gondolkodva). miert akarsz oda ilyet? :)

servletbe pedig injektalhatod @EJB -vel is, nem kell ez a context lookup marhasag.

Tehát a jsp oldalt minden esetben ahol szeretnék beant használni előzzön meg egy servlet és ott adjam át paraméterként? Amúgy azért gondoltam, hogy az account kezelő bean-t stateful-ra teszem, és van neki egy isLoggedIn függvénye, és akkor akár servletből akár jsp-ből le tudom kérdezni, hogy be van-e jelentkezve, és annak megfelelően tudom irányítani, így most sessionben van tárolva az account, és a sessiont ellenörzöm. Azért gondoltam így mert van olyan jsp oldal, amit nem előz meg servlet (mivel nincs rá szükség a tartalom statikus).
kösz

separation of concerns. :)

tamogatott ugye, hogy elvileg komplett java kodot irhatsz jspbe. namost ennek kovetkezteben regen mindekni a jsp kodba hanyta a vezerlest is (rooooooosz, nagyon rossz, meg ne jegyezzetek, es ne is csinaljatok ilyet!), ami kifejezetten bad practice.

azonban mikor bejott az EE, es igy az uj szabvany, akkor ugy gondoltak, hogy nem terjesztik ki ide is a DI -t. persze, megtehettek volna,
de ok is vissza akartak szoritani az ilyen fajta tervezest, viszont ugyanakkor nem mondhattak a mar meglevo X szazezer kodtulajdonosnak,
hogy "bocs, dobd ki a cuccod, ird ujra, mert ez igy szar".

MVC, ugyebar. amire inkabb a JSP model 2 hasonlit, mint az egy...

itt

Tudom, hogy ez kicsit necroposting, de most talaltam meg.

Van valami leiro howto arrol, hogy lehet servletbol atpasszintani a jsp-nek a bean-t? Egyszeruen nem talalok a google-val ilyen leirast, ahol koddal meg lenne mutatva. A link amugy jo...
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Nem tudom, hogy tervezem hasznalni. Mindossze azt szeretnem megtudni, hogy mi a legjobb megoldas arra a problemara, hogy van egy ejb modellem, amibol szeretnek dolgokat megjeleniteni. Nyilvan nagyon undorito dolog lenne, ha servlet-bol irkalnek ki html elemeket, foleg azert mert se completing, se syntax higlight nincs az ilyenekre, plusz nehezen karbantarthato egy ilyen.

Mondjuk tfh. irok egy blogot, akkor a blogpost body-jat szeretnem megjeleniteni a jsp-ben. Mivel en a MVC modell nagy hive vagyok, ezt ugy gondolom megoldani, hogy egy servlet lekeresi nekem a kert blogpostot (akar id alapjan, akar mashogy), es atpasszintja ezt a megjelenitest vegzo jsp-nek (ez az, amit nem tudok, hogy hogyan). Hogyan lehetne ezt az adott dolgot megoldani ugy, hogy a megoldas se tul gany ne legyen, se sokat ne kelljen szopni vele?

Ruby on Rails-ban ez azert egyszeru, mert a view-ben hozzaferek a controller osztalyban instance valtozokent megadott dolgokhoz (kvazi egy kornyezeten belul vagyok a controllerrel). Gondolom ez nyilvan nem el JSP-Servlet viszonylatban, igy tehat a modell-t magat - mint objektumot - mindenkeppen at kell adni valahogy.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

A legegyszerűbb megoldás a RequestDispatcher használata. Ilyenkor van egy, vagy egy pár servlet-ed és az delegál el a jsp oldalak fele. A model-t még servlet oldalon beleteszed bean-ben, amit beleraksz request-be, ezután a dispatcher delegál valami alapján a megadott jsp oldal fele. Jsp oldalon már a kezedben lesz így a bean .
Ha nagyra nő a blogod, sok funkcionalitással, akkor a saját taglib-ek a legtisztább megoldás, mint ahogy NagyZ is említette.

Szerkesztve:

Front Controller

De. Csakhogy itt _kulon_ servletrol beszelunk, ami a controller funkciot tolti be. Viszont, mivel nem ugyanaz az environment, a kerdes az, hogy ezt hogy tudom atadni servletbol, hogy tudom a kerest tovabbiranyitani a jsp-nek, es vegul hogy tudom jsp-bol elkapni.

privatban irtad, hogy nem ertesz hozza, ide csak azert irom be a kerdest, hogy mas tudjon ra valaszolni
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Van valami leiro howto arrol, hogy lehet servletbol atpasszintani a jsp-nek a bean-t?

request.setAttribute a legegyszerűbb módszer. Aztán a JSP oldalról már csinálhatsz bármit EL használatával:


A bean: ${bean}
A bean egy property-je: ${bean.property}
A bean egy property-jének property-je: ${bean.property.property}

Vagy mi a kérdés? :)
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

servletbe pedig injektalhatod @EJB -vel is, nem kell ez a context lookup marhasag.

Nem marhaság, én például csak EJB-k között használom a @EJB injektálást, a JSP/Servlet oldalról már inkább egy ServiceLocator osztályon át InitialContext.lookup alapján kérem el. Ennek az oka egyszerű: ha esetleg más szerverre vagy JVM-be kerül át a web réteg, akkor lehet szopni a @EJB injektálás visszaírásával, mivel az nem működik más JVM-be való hívásra, illetve aljas és sunyi módon nem szól, ha nincs meg az erőforrás, ezért tele kell tenni a kódot "if null" feltételekkel, hogy le tudd ezt kezelni.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Ha antipattern, akkor antipattern... leszarom.

A való életben sokszor előfordul, hogy amit egybe álmodtál meg, azt mégis külön kell futtatni. Nem okoz semmi fájdalmat, ha mellőzöd a DI-t, viszont sok előnye van, ha jön a csúnya refactor.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

Hasznos az injection, de nem egyedüli üdvözítő megoldás. Túl lelkes vagy azokkal a dolgokkal kapcsolatban, amelyeket megismersz és tetszik illetve amelyekkel (hivatalból) lelkesnek kell lenned. Szerencsére a világ soha nem annyira fekete és fehér, mint amit a Te szemeiden át szeretnél láttatni. :)

Mindig van választási lehetőség... :)
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD

es nem csak en gondolom igy, ott a Guice, Spring.. :)

Amelyek egyike se erős clusterben és abban se, hogy JVM szinten többfelé vágjad az alkalmazást. Egy JVM-en vagy egy alkalmazáson belül tökéletes az injection, de amint ez nem igaz, több a hátránya, mint az előnye. És soha nem tudhatod, hogy mikor kell horizontálisan és mikor vertikálisan clusterezni az alkalmazásod.
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD