[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
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem