!!! Od 1.6.2022 jsem zaměstnán na HPP. Kde? To tady nemůžu napsat (kvůli Compliance). Ale na mém Linkedin účtu (nick: Jirka Pinkas) to určitě najdete. 😁 V současnosti mám volných 10 dní, které mohu alokovat na školení 😊

Automatický start HSQLDB při startu webové aplikace

publikováno: 2013-06-03T00:00:00

Máme několik možností jak spustit HSQLDB při startu webové aplikace. Nejjednodušší je embedded. K takové databázi je ale možné se připojit pouze z jednoho procesu. Pokud ale chcete s Vaší databází pracovat pomocí externích nástrojů - například abyste se podívali co je v tabulkách ... při vývoji docela důležité :), pak musíte HSQLDB databázi spustit v serverovém režimu:

java -classpath hsqldb.jar org.hsqldb.Server 
-database.0 file:target/hsqldb/test -dbname.0 test

Můžete si udělat skript, který spustíte a tím také spustíte celou databázi. Toto jsem donedávna používal na školeních. Nyní ale budu navíc používat i automatický start HSQLDB při startu webové aplikace pomocí listeneru. K tomu je nutné listener nejprve vytvořit:

import java.sql.*;
import javax.servlet.*;
import org.hsqldb.*;
import org.hsqldb.jdbc.*;
import org.slf4j.*; public class HsqldbContextListener implements ServletContextListener { private Logger logger = LoggerFactory
.getLogger(HsqldbContextListener.class); private Server server; @Override
public void contextInitialized(ServletContextEvent sce) {
logger.info("starting HSQLDB database ...");
try {
// vytvori databazi na disku v: [projekt]/target/hsqldb/
String params = "port = 9001; trace = false; database.0 = file:target/hsqldb/test; dbname.0 = test";
server = new Server();
server.putPropertiesFromString(params);
server.start(); } catch (Exception e) {
e.printStackTrace();
}
} @Override
public void contextDestroyed(ServletContextEvent sce) {
logger.info("stopping HSQLDB database ...");
try {
JDBCDataSource dataSource = new JDBCDataSource();
dataSource.setUrl("jdbc:hsqldb:hsql://localhost/test");
dataSource.setUser("sa");
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection
.prepareStatement("SHUTDOWN");
statement.execute();
statement.close();
connection.close();
} catch (Exception e) {
// Muze vyhodit chybu, protoze databaze se po vyvolani prikazu
// SHUTDOWN zacne zavirat. Proto tuto chybu nezobrazuji klientovi.
}
while (server.getState() != 16) {
logger.info("waiting for shutdown ...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

 

A poté ho ve web.xml zapojit:


cz.java.skoleni.hsql.HsqldbContextListener

Pozor! Pokud máte více listenerů, pak v souboru web.xml záleží na jejich pořadí! Tento listener by měl být definován jako první!

Reference

Školení mi pomohlo ujasnit si jak má správně probíhat testování kódu, představilo užitečné knihovny a nástroje. Vše bylo podáno zábavnou formou, takže nebyl problém udržet pozornost. Navíc byl výhodou dostatek času na dotazy ohledně probíraných témat.

Certicon
David

Přestože jsem Cčkař, tak jsem se na školení JUnit dozvěděl nové věci. Zejména co se týče metodiky jednotkového testování a některých odborných termínů.

Retia
Jaromír

Jedno z nejlepších školení za poslední roky. Kromě seznámení se Springem apod. mě velmi příjemně překvapila hluboká znalost probírané látky a schopnost ji srozumitelně vysvětlit v případě ad hoc dotazů. Též oceňuji, že jsme se kromě probírané látky dozvěděli i spoustu dalších zajímavých věcí a trendů z IT. A důležitá byla také přátelská atmosféra školení.

Generali a.s.
Jaroslav


Novinky

2024-09-14T00:00:00: Github Copilot & IntelliJ Idea
Novinky v Github Copilot + IntelliJ Idea

2024-08-31T00:00:00: AI & Copilot

2023-12-25T00:00:00: Kubernetes & Prometheus Documentary