Toto není správná cesta. Zdroj dat musí být spravován jakýmkoli kontejnerem, ve kterém aplikaci spouštíte. MysqlConnectionPoolDataSource
není bazén připojení. Je to jen konkrétní implementace javax.sql.DataSource
rozhraní. Normálně jej definujete v kontextu JNDI a získáváte jej odtud. Také samotná MySQL to vše výslovně uvádí v jejich dokumentaci
.
Nyní, jak ji používat, závisí na účelu aplikace. Pokud se jedná o webovou aplikaci, musíte se podívat do dokumentace zdrojů JNDI příslušného servletcontainer/appserveru. Pokud je to například Tomcat, pak jej najdete zde . Pokud spouštíte klientskou aplikaci – pro kterou bych velmi zpochybňoval hodnotu fondu připojení –, pak musíte hledat rámec sdružování připojení, který může využívat zdroj dat sdružených připojení poskytovaný MySQL, jako je např. C3P0 .
Dalším problémem s kódem, který jste zveřejnili, je to, že PooledConnection#getConnection()
vrátí podklad připojení, které tedy není sdružené připojení. Zavřít na něj spojení nevrátí, ale opravdu ho uzavře. Fond musí pokaždé vytvořit nové připojení.
Potom příběh o bezpečnosti vláken, který závisí na skutečném dotyčný rámec sdružování připojení. C3P0 prokázal svou robustnost za léta, nemusíte se o to starat, pokud píšete JDBC kód podle standardního idiomu, tedy používejte pouze rozhraní JDBC a získat a zavřete všechny zdroje (Connection
, Statement
a ResultSet
) v nejkratším možném rozsahu.