5. díl - Derby DB - připojení přes DataSource

Java Databáze Apache Derby Derby DB - připojení přes DataSource

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Derby DB - Možnosti připojení, jsme si představili různé možnosti připojení. V dnešním tutoriálu si předvedeme použití DataSource k připojení Derby databáze.

Používaní DriverManager

Až doposud jsme přistupovali k databázi pouze přes třídu DriverManager. DriverManager tedy spravoval dané připojení. Toto je vhodné v případě ojedinělých nepravidelných spojení (např. desktop aplikací).

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

Rozhraní DataSource prakticky rozšiřuje DriverManager a přidává tedy další funkce. Umožňuje více nastavení a snáze se konfiguruje. Je součástí JDBC API od 2.0 a je tedy novější než DriverManager. Objekt DataSource se konfiguruje většinou v aplikačním serveru (v tomto článku je aplikačním serverem myšlen každý server umožnující spouštět jednu nebo více služeb z EE, např. WildFly, JBoss, GlassFish, Payara i Tomcat, apod.), což umožňuje správci (administrátorovi) serveru provádět nastavení připojení (datasource) bez úpravy programu. Když je DataSource rozhraní implementováno ve spolupráci s ConnectionPool­DataSource, všechna spojení vytvořená instancí DataSource jsou automaticky začleněna do connection poolu, čímž se šetří systémové zdroje. Podobně to funguje ve spolupráci XADataSource, kde jsou všechna spojení použita pro distribuované transakce.

Používání objektu Datasource je velmi rozšířené u aplikačním serverů a ojediněle i u programových klientů. Objekt DataSource za nás řeší (spravuje) připojování. Dle API se jedná o rozhraní, které si mohou implementovat třídy řešící danou problematiku. Derby DB takovými třídami odvozenými od DataSource disponuje. Dodatečné informace k DataSource u Derby DB naleznete v Administrator guide a v API.

  • org.apache.der­by.jdbc.Clien­tDataSource - Standardní DataSource.
  • org.apache.der­by.jdbc.Clien­tConnectionPo­olDataSource - Vhodné při používání dotazovací mezipaměti(sta­tement caching).

Pokud budete používat Java Embended profile 2 používejte tyto třídy

  • org.apache.der­by.jdbc.Basic­ClientDataSou­rce40 - Standardní DataSource.
  • org.apache.der­by.jdbc.Basic­ClientConnecti­onPoolDataSou­rce40 - Vhodné při používání dotazovací mezipaměti (statement caching).

Standardní DataSource

Samozřejmě lze DataSource nastavit i bez aplikačního serveru. Například tímto způsobem pokud chcete používat DataSource v programovém 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 případě aplikačního serveru s JNDI se získává DataSource tímto způsobem. Samozřejmě je nutné pojmenovat (identifikovat) v aplikačním serveru daný DataSource. (např. jdbc/mujDataSou­rce). Neměl by být problém získávat DataSource u aplikačních serverů přes @Resource(loo­kup="jdbc/muj­DataSource") 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();
}
...

Příklad spojení přes DataSource v SE

Vytvoříme si testovací příklad jako Java SE projekt v IDE. Přidáme opět externí knihovny do našeho projektu do CLASSPATH. Jsou to:

  • derbyclient.jar
  • derbytools.jar
  • derbyoptional­tools.jar

Vytvoření projektu a jeho nastavení viz. předchozí lekce. Opět nezapomeneme spustit Derby Databázový server.

Protože používáme Javu SE, musíme si DataSource manuálně nastavit. Samozřejmě lze i v SE nahrát DataSource přes JNDI a pak daný DataSource využívat v jiný programech na stejném JVM, ale tento kód by byl složitější jako příklad. V programu vidíme, že z DataSource získáme objekt Connection a s ním již samozřejmě lze s databází pracovat.

Projekt Derby přes DatSource

Níže je uveden zdrojový kód. Je naprosto primitivní, řeší pouze připojení přes DataSource a jeho odpojení.

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 příští lekci, Derby DB - Připojení k databazi IN-MEMORY, si předvedeme nastavení pro in-memory databázi.


 

Stáhnout

Staženo 48x (3.41 kB)

 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovi%C4%8D-8a9b9498
Miniatura
Předchozí článek
Derby DB - Možnosti připojení
Miniatura
Všechny články v sekci
DerbyDb
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!