[EMAIL PROTECTED] wrote: > Popis problému: > JavaBean, vytváří připojení k DB. > Na stránce JSP je standartní formulář, který odesílá požadavek na servlet, > který ukládá data do DB. > Jak se mohu v servletu dostat na tento JavaBean (třídu), která obsahuje > vytvořený <code> statement </code> k DB. > > Nejspíše bych mohl vytvořit nové připojení k DB, ale to nechci.
Jak se dostat k session uz popsal Pavel Kolesnikov, ja bych
pridal neco o tom DB statementu.
Neni dobry napad mit v JavaBeanu jakykoliv kod tykajici se databaze.
I kdyz nektere kurzy objektoveho programovani vzbuzuji mylny dojem,
ze objekt by se mel starat o vsechno, co se ho tyka, tak
tomu tak neni. JavaBean by se mel starat o svoje data,
a o nic jineho. Tedy *nemel* by se starat o to, jakym zpusobem budou
predlozena uzivateli, a nemel by se starat o to, jakym zpusobem
budou ulozena v databazi. To maji delat jine objekty.
Cili udelejte si interface, nazvete ho treba MujManager,
a tomu udelejte metody jako (pokud se ten JavaBean jmenuje MujBean):
void ulozMujBeanDoDatabaze(MujBean mb) throws MojeVyjimka;
MujBean najdiMujbeanVDatabaziPodleJehoId(long id) throws MojeVyjimka;
List<MujBean> najdiVsechnyMojeBeanyPodleNazvu(String nazev) throws MojeVyjimka;
atd. ktere se budou o ten JavaBean starat z hlediska prace s
permanentnim ulozistem.
A k tomu interface si udelejte jeho implementaci,
ve ktere bude neco jako
class MujManagerRDBMSImpl implements MujManager {
...
void ulozMujBeanDoDatabaze(MujBean mb) throws MojeVyjimka {
Connection con;
PreparedStatement st;
try {
con = dataSource.getConnection();
st = "INSERT INTO neco ...";
...
} catch(SQLException ex) {
throw new MojeVyjimka(ex);
} finally {
if(st!=null) try { st.close(); } ...
if(con!=null) try { con.close(); } ...
}
}
no a v servletu pak udelate
MujManager mm = ...
MujBean mujBean = (MujBean)request.getSession().getAttribute("mujbean");
mm.ulozMujBeanDoDatabaze(mujBean);
Tim padem nebude v JavaBeanu nic o databazi a o servletu,
v servletu nic o databazi, v praci s databazi nic o servletech
a to je celkove minimalizace zbytecnych zavislosti.
Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno Martin Kuba
Institute of Computer Science email: [EMAIL PROTECTED]
Masaryk University http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
--------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
