Utilisation correcte du pool de connexions JDBC (Glassfish)
J'ai besoin d'une connexion de base de données en Java Web service mis en place comme un bean de session, et je ne suis pas sûr si je le fais bien.
J'ai créé une classe
public final class SQLUtils {
//.....
private static DataSource m_ds=null;
static
{
try
{
InitialContext ic = new InitialContext();
m_ds = (DataSource) ic.lookup(dbName); //Connection pool and jdbc resource previously created in Glassfish , dbName contains the proper JNDI resource name
}
catch (Exception e)
{
e.printStackTrace();
m_ds = null;
}
}
public static Connection getSQLConnection() throws SQLException
{
return m_ds.getConnection();
}
}
Chaque fois que j'ai besoin d'une connexion que je ne
Connection cn = null;
try
{
cn = SQLUtils.getSQLConnection();
//use connection
}
finally
{
if (null != cn)
{
try
{
cn.close();
}
catch (SQLException e)
{
}
}
}
Est-il ok pour l'utiliser de cette façon, ou j'ai de la source de données doit être un membre de la fève ?
@Stateless
@WebService
public class TestBean {
private @Resource(name=dbName) DataSource m_ds;
}
Je suis désolé si c'est un nube question, mais je suis assez nouveau à Java. Merci à l'avance.
source d'informationauteur a1ex07
Vous devez vous connecter pour publier un commentaire.
En dehors de la C-mise en forme de style, quelques lignes inutiles et un peu mauvaise gestion des exceptions, vous pouvez simplement le faire.
Voici comment je ferais:
Je jette ici
ExceptionInInitializerError
de sorte que la demande sera immédiatement arrêter de sorte que vous n'avez pas besoin de visage "inexplicable"NullPointerException
lorsque vous essayez d'obtenir une connexion.Dans l'ancienne J2EE monde, la traditionnelle façon de gérer cela est d'utiliser un
ServiceLocator
. Ci-dessous, un exemple de mise en œuvre (non optimisé, leDataSource
pourrait être mis en cache):À utiliser, il suffit de l'appeler comme ceci:
Mais c'était avant l'EJB3 et l'Injection de Dépendance ère. Maintenant, lors de l'utilisation de EJB3, si vous avez configuré votre
DataSource
dans votre conteneur d'EJB, tout ce que vous avez à faire pour injecter automatiquement laDataSource
dans votre Stateless Bean est d'écrire (oùmydatabase
est le nom de la source de données):Utiliser le nom de l'attribut si vous voulez explicitement, bien, définissez le nom:
EJB3 fait faire les
ServiceLocator
modèle obsolète et vous devriez vraiment préfèrent injection lorsque l'on travaille avec eux.De messagerie unifiée, n'est-ce pas un exemple pour un source des données JDBCpas un Glassfish Pool de Connexion?