Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 5 - Derby DB - Připojení přes DataSource

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 (tzv. skupiny spojení), čí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 - Derby DB

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žením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 397x (3.41 kB)

 

Předchozí článek
Derby DB - Možnosti připojení
Všechny články v sekci
Derby DB
Přeskočit článek
(nedoporučujeme)
Derby DB - Připojení k databazi IN-MEMORY
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
3 hlasů
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity