Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)

[es] :: Java :: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)

[ Pregleda: 2257 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

grizzly
Beograd

Član broj: 7978
Poruke: 262



+4 Profil

icon Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)02.05.2007. u 15:24 - pre 205 meseci
Počeli smo na faksu malo da radimo J2EE pa sam zakupio prostor na serveru i domen malo da se zezam i učim...

Ja radim u NetBeans-u a na serveru situacija sledeća: Java 1.5.0, Tomcat 5.5.4, MySQL 4.1

Pravim nešto osnovno, zasad forumčić, mail listu i tako to i naravno za sve mi treba rad sa bazom a tu sam najtanji :). Nešto sam tu gledao i skapirao osnovno i doterao sam do toga da aplikacija radi kod mene lokalno, ali sada je treba podići na server a tamo su neke stvari drugačije nego kad se izvršava na mojoj mašini (tipa putanje do resursa, naravno relativne, nisu iste i tako neke stvarčice).

Da bi se povezao na bazu koristim mysql-connector-java-3.1.11 tako što sam jar file uključio u Libraries aplikacije i taj jar file se uredno postavlja u WEB-INF/lib folder kada odradim build aplikacije.

u kodu da bi se povezao na bazu prvo učitam drajver
Code:

Class.forName("com.mysql.jdbc.Driver").newInstance();

pa potom otvaram konekciju i izvršavam naredbe
Code:

Connection conn = DriverManager.getConnection("dbc:mysql://127.0.0.1/XXX&user=YYY&password=ZZZ");
Statement stat = conn.createStatement();


E sad dolazimo do par pitanja:

Da li je ovo dovoljno da bi se aplikacija tamo na serveru konektovala sa bazom. Znači imam jar konektora u lib folderu WEB-INFa, učitam drajver napravim konekciju i to je to? Ili treba još nešto da se uradi?

Što se tiče učitavanja drajvera, ja sam to shvatio kao učitavanje na mašinu na kojoj se kod izvršava tako da nije potrebno učitavati ga svaki put kad se kreira konekcija. Zbog toga sam napravio servlet koji samo učita drajver da bi drugi delovi aplikacije komunicirali sa bazom. Moja ideja je bila da kad odradim upload aplikacije na server ja pokrenem jednom taj servlet koji učitava drajver da bi drugi delovi aplikacije radili a bez toga da kod svakog kreiranja konekcije učitavaju drajver. Da li je ovo ispravan način razmišljanja i rada, ili treba svaki put kad kreiram objekat tipa Connection da učitavam drajver. A drugi je problem to što administratori servera ne dozvoljavaju nama korisnicima komunikaciju sa tomcatovim menadžerom aplikacija za restart aplikacije nego se mi njima javimo mailom da oni restartuju server. Ako se server restartuje zbog novog uploada ili bilo čega drugog da li to znači da moja aplikacije neće raditi jer drajver nije ponovo učitan?

I još jedno pitanjce: da li je dovoljno samo zameniti 127.0.0.1 sa www.imedomena.com pre uploada da bi to sve radilo na serveru. Možda je moguće ostaviti localhost jer aplikacija i treba da se poveže sa MySQLom na lokalnom računaru?

Proveravao bih ja ovo sve direktno na serveru da Vas ne maltretiram ali glupo mi je da ih svako malo cimam da restartuju server jer kapiram da su tamo i neke poslovne aplikacije a ne samo ove naše za zezanje...

poz
 
Odgovor na temu

rj444
Radomir Jakovljevic
Beograd

Član broj: 48212
Poruke: 354
*.rcub.bg.ac.yu.



Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)03.05.2007. u 14:38 - pre 205 meseci
1. Napravis konfiguracioni fajl iz koga ucitavas parametre, kao sto su host, user, password, itd. U aplikaciji iz tog fajla citas parametre i koristis ih. Kada je potrebno menjas u konfiguracionom fajlu, tako da ne mora nista ponovo da se kompajlira.

2. Kakav je to provajder koji mora da resetuje svoje servere zbog toga sto ti nesto menjas u svojoj aplikaciji/bazi/sta god...
 
Odgovor na temu

grizzly
Beograd

Član broj: 7978
Poruke: 262



+4 Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)03.05.2007. u 23:57 - pre 205 meseci
1. To sam odradio preko posebnog servleta koji moze da primi parametar i postavi ga, ali sam i sam shvatio da je bolje da sve to smestim u jedan fajl, a fajl naravno u web-inf folder, jer kako sam razumeo time cu zastiti fajl da neko slucajno ne napipa putanju (jer je server podesen da ako uneses u address bar putanju do nekog ne html fajla, na primer imam .java fajlove, on ce da otvori...)

2. ne znam, ni meni nije jasno. Kazu da je to iz sigurnosnih razloga, ali svejedno nama studentima koji svako malo nesto cackaju to nikako ne odgovara.

Ima li neko misljenje o tome kada bi trebalo da ucitavam drajver. Da li kod svake konekcije ili nesto globalnije. To me trenutno najvise muci...

poz
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
*.ADSL.neobee.net.



+6 Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)04.05.2007. u 00:16 - pre 205 meseci
Citat:
grizzly:
Ima li neko misljenje o tome kada bi trebalo da ucitavam drajver. Da li kod svake konekcije ili nesto globalnije. To me trenutno najvise muci...

poz


Samo jednom. To se generalno radi negde gde ti se inicijalizuje aplikacija.

Zatim, umesto:
Code:
Class.forName("com.mysql.jdbc.Driver").newInstance();

dovoljno je (i preporucljivo) samo:
Code:
Class.forName("com.mysql.jdbc.Driver");


i na kraju literatura pa procitaj malo ;-)
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

grizzly
Beograd

Član broj: 7978
Poruke: 262



+4 Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)04.05.2007. u 02:07 - pre 205 meseci
Naravno prvo sam pročitao literaturu pa tek postavio pitanje ovde. U tutorialu (samo koristim stariju verziju, a ne ovu što si mi linkovao za 1.6 jer je na serveru java 1.5) zaista piše ovako bez newInstance() da je tako dovoljno, ali ja sam ono pronašao u dokumentaciji MySQL pa mi se učinilo sigurnije, a i u tutorialu kažu da ne može da škodi.

E samo kad bi mogao da mi kažeš kako da postavim da se to radi pri inicijalizovanju aplikacije. Ja sam mislio da to uradim po uploadu aplikacije pozivajući servlet koji samo učitava drajver, ali ako se server restartuje (a restartovaće ga sigurno zbog nekog drugog korisnika) sve pada u vodu jer drajver treba ponovo učitati, a prvo oni ne obaveštavaju ostale kad zbog nekoga restartuju a i da obaveštavaju glupo je da sam u obavezi da to ručno radim.

Uzgred, hvala na odgovorima!

poz
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
*.ns.ac.yu.



+6 Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)04.05.2007. u 08:17 - pre 205 meseci
Ja kada sam pocinjao sa Javom (mislim da je bila verzija 1.2), i tada je bilo samo Class.forName().

Elem, posto radis sa JDBC-om znas da ti treba konekcija (java.sql.Connection) da bi mogao da saljes upite
ka bazi.
Otvaranje konekcije je "skupa" operacija pa se zato praktikuje da imas klasu koja se zove npr. ConnectionPool
i koja ti u sustini vodi racuna da stalno imas otvorenih dovoljan broj konekcija. Recimo ako radis sa
komercijalnim RDBMS-ovima postoje licence na maksimalan broj konekcija.
E znaci to se cesto realizuje ovako nekako:
Code:
public static java.sql.Connection checkIn()
i
public static void checkOut(java.sql.Connection conn);


Kao sto vidis metode su staticke, i nema potrebe da se instancira objekat ConnectionPool klase.
Metoda checkIn() ti dohvata konekciju iz connection pool-a, a checkOut je vraca kada si zavrsio sa upitima.
Sada tu ima stvari ako prekoracis broj konekcija, trebalo bi sacekati da neko checkOut-uje konekciju pa mu
vratis prvu slobodnu i slicno (mada mislim da te ovo sada preterano ne interesuje).

Ono sto te verovatno interesuje jeste inicijalizacija JDBC drajvera (konacno stigoh i do najvaznijeg dela )
To mozes da odradis na sledeci nacin. Na pocetku funkcije checkIn() imas poziv metode loadDriver()
Code:
private static loadDriver(){
    if(!driverLoaded){
       Class.forName("tvoj.jdbc.drajver"); //ovde naravno stavis ucitavanje iz properties fajla ili vec kako si implementirao
    }
    driverLoaded = true;
}


[Ovu poruku je menjao Toxter dana 04.05.2007. u 09:31 GMT+1]
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

grizzly
Beograd

Član broj: 7978
Poruke: 262



+4 Profil

icon Re: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)04.05.2007. u 11:06 - pre 205 meseci
Pominjali su na faksu poolove, čini mi se da ih čak NetBeans sam izgeneriše ali to mi je za sada previse. Što se tiče drajvera mislim da sam to rešio slično kao i ti u gornjem kodu
Code:

Connection conn;
            try {
                conn = null;
                conn = DriverManager.getConnection(url);
            } catch (SQLException ex) {
                Class.forName(className);
                conn = DriverManager.getConnection(url);
            }


mada je elegantnije da se stavi u metodu pa da pred svaku konekciju pozivam samo tu metodu a ne kao što sad radim u svakom servletu koji komunicira sa bazom pre createStatement() imam ovakav kod.

Stringove url i className učitavam iz properties fajla koji sam iz bezbednosnih razloga stavio u web-inf direktorijum. E tu nastaje sledeci problem. Da bih ucitao taj fajl moram da FileInputStream-u dam putanju do tog fajla. Pre toga sam isto imao problema sa putanjama gde relativne putanje koje rade kod mene ne rade na njihovom serveru i to sam resio googlovanjem je izaslo getServletConfig().getServletContext().getRealPath("") na koji dolepim / i putanju gledajući kao de sa nalazim u folderu gde je index.html (i folder web-inf). Međutim kad sad dolepim /web-inf/imefajla.ekstenzija ne može da pronadje fajl zato što se putanja poremeti (ubaci se u putanju /./ pre web-inf). Ne znam da li je to nesto specijalno zbog web-inf a ili sam ja nešto zeznuo...
 
Odgovor na temu

[es] :: Java :: Učitavanje drajvera za DBMS u web aplikaciji (Tomcat, MySQL)

[ Pregleda: 2257 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.