5. diel - Derby DB - pripojenie cez DataSource
V minulej lekcii, Derby DB - Možnosti pripojenia , sme si predstavili rôzne možnosti pripojenia. V dnešnom tutoriále si predvedieme použitie DataSource na pripojenie Derby databázy.
Používaní DriverManager
Až doteraz sme pristupovali k databáze iba cez triedu DriverManager. DriverManager teda spravoval danej pripojenia. Toto je vhodné v prípade ojedinelých nepravidelných spojenia (napr. Desktop aplikácií).
try { connect = DriverManager.getConnection("jdbc:derby://localhost:1527/databaze01;" + "create=true;user=uzivatel1;password=heslo1"); System.out.println("Podarilo se pripojit"); } catch (Exception e) { System.err.println("Nepodarilo se pripojit"); }
Používaní DataSource
Rozhranie DataSource prakticky rozširuje DriverManager a pridáva teda ďalšie funkcie. Umožňuje viac nastavení a ľahšie sa konfiguruje. Je súčasťou JDBC API od 2.0 a je teda novší ako DriverManager. Objekt DataSource sa konfiguruje väčšinou v aplikačnom serveri (v tomto článku je aplikačným serverom myslený každý server umožnujú spúšťať jednu alebo viac služieb z EE, napr. WildFly, JBoss, GlassFish, Payara aj Tomcat, a pod.), Čo umožňuje správcovi (administrátorovi) servera vykonávať nastavenie pripojenia (datasource) bez úpravy programu. Keď je DataSource rozhranie implementované v spolupráci s ConnectionPoolDataSource, všetky spojenia vytvorená inštancií DataSource sú automaticky začlenené do connection poolu (tzv. Skupiny spojenia), čím sa šetrí systémové zdroje. Podobne to funguje v spolupráci XADataSource, kde sú všetky spojenia použité pre distribuované transakcie.
Používanie objektu Datasource je veľmi rozšírené u aplikačným serverov a ojedinele aj u programových klientov. Objekt DataSource za nás rieši (spravuje) pripájanie. Podľa API sa jedná o rozhranie, ktoré si môžu implementovať triedy riešiace danú problematiku. Derby DB takými triedami odvodenými od DataSource disponuje. Doplňujúce informácie k DataSource u Derby DB nájdete v Administrator guide a v API.
- org.apache.derby.jdbc.ClientDataSource - Štandardné DataSource.
- org.apache.derby.jdbc.ClientConnectionPoolDataSource - Vhodné pri používaní dopytovací medzipamäte (statement caching).
Ak budete používať Java Embended profile 2 používajte tieto triedy
- org.apache.derby.jdbc.BasicClientDataSource40 - Štandardné DataSource.
- org.apache.derby.jdbc.BasicClientConnectionPoolDataSource40 - Vhodné pri používaní dopytovací medzipamäte (statement caching).
Štandardné DataSource
Samozrejme možno DataSource nastaviť i bez aplikačného servera. Napríklad týmto spôsobom ak chcete používať DataSource v programovom klientovi.
... org.apache.derby.jdbc.ClientDataSource dataSource = new org.apache.derby.jdbc.ClientDataSource(); dataSource.setDatabaseName("databaze03"); dataSource.setCreateDatabase("create"); dataSource.setUser("Uzivatel3"); dataSource.setPassword("Heslo3"); dataSource.setServerName("localhost"); dataSource.setPortNumber(1527); java.sql.Connection connection = null; try { connection = dataSource.getConnection(); System.out.println("Podarilo se ziskat spojeni"); } catch (SQLException e) { System.out.println("Nepodarilo se ziskat spojeni"); e.printStackTrace(); } ...
V prípade aplikačného servera s JNDI sa získava DataSource týmto spôsobom. Samozrejme je nutné pomenovať (identifikovať) v aplikačnom serveri daný DataSource. (napr. jdbc / mujDataSource). Nemal by byť problém získavať DataSource u aplikačných serverov cez @Resource (lookup = "jdbc / mujDataSource") skrz CDI.
... javax.naming.Context context = new javax.naming.InitialContext (); javax.sql.DataSource dataSource = (javax.sql.DataSource) context.lookup ("jdbc/mujDataSource"); java.sql.Connection connection = null; try { connection = dataSource.getConnection ("Uzivatel3", "Heslo3"); System.out.println("Podarilo se ziskat spojeni"); } catch (SQLException e) { System.out.println("Nepodarilo se ziskat spojeni"); e.printStackTrace(); } ...
Príklad spojenia cez DataSource v SE
Vytvoríme si testovacie príklad ako Java SE projekt v IDE. Pridáme opäť externé knižnice do nášho projektu do CLASSPATH. Sú to:
- derbyclient.jar
- derbytools.jar
- derbyoptionaltools.jar
Vytvorenie projektu a jeho nastavenie viz. "java/jdbc/derbydb/derby-db-pripojitelnost > predchádzajúcej lekcie. Opäť nezabudneme spustiť Derby Databázový server.
Pretože používame Javu SE, musíme si DataSource manuálne nastaviť. Samozrejme možno aj v SE nahrať DataSource cez JNDI a potom daný DataSource využívať v iný programoch na rovnakom JVM, ale tento kód by bol zložitejší ako príklad. V programe vidíme, že z DataSource získame objekt Connection as ním už samozrejme možné s databázou pracovať.
Nižšie je uvedený zdrojový kód. Je úplne primitívne, rieši iba pripojenie cez DataSource a jeho odpojenie.
package sql; import java.sql.*; import org.apache.derby.jdbc.*; public class ProjektDataSource { private static Connection connect = null; private static void pripojeniKDatabazi() { ClientDataSource dataSource = new ClientDataSource(); dataSource.setDatabaseName("databaze03"); dataSource.setCreateDatabase("create"); dataSource.setUser("Uzivatel3"); dataSource.setPassword("Heslo3"); dataSource.setServerName("localhost"); dataSource.setPortNumber(1527); try { connect = dataSource.getConnection(); System.out.println("Podarilo se ziskat spojeni"); } catch (SQLException e) { System.out.println("Nepodarilo se ziskat spojeni"); e.printStackTrace(); } } private static void odpojimeDatabazi() { try { if (connect != null) { connect.close(); } System.out.println("Podarilo se odpojit od databaze"); } catch (SQLException e) { System.out.println("Nepodarilo se odpojit od databaze"); e.printStackTrace(); } } public static void main(String[] args) { System.out.println("Start Programu"); pripojeniKDatabazi(); odpojimeDatabazi(); System.out.println("Konec Programu"); } }
V budúcej lekcii, Derby DB - Pripojenie k databaze IN-MEMORY , si predvedieme nastavenie pre in-memory databázu.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 441x (3.41 kB)