正确使用JDBC连接池(Glassfish) [英] Proper usage of JDBC Connection Pool (Glassfish)

查看:393
本文介绍了正确使用JDBC连接池(Glassfish)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将Java Web服务中的数据库连接作为会话bean实现,并且我不确定是否正确。



我创建了一个类

  public final class SQLUtils {
// .....
private static DataSource m_ds = null;

static
{
try
{
InitialContext ic = new InitialContext();
m_ds =(DataSource)ic.lookup(dbName); //以前在Glassfish中创建的连接池和jdbc资源,dbName包含正确的JNDI资源名称

$ b catch(Exception e)
{
e.printStackTrace );
m_ds = null;



$ b public static Connection getSQLConnection()throws SQLException
{
return m_ds.getConnection();


每当我需要连接时,我都会这样做

  Connection cn = null; 
尝试
{
cn = SQLUtils.getSQLConnection();
//使用连接
}
finally
{
if(null!= cn)
{
try
{
cn.close();
}
catch(SQLException e)
{

}
}
}

可以这样使用它,或者我的DataSource必须是bean的成员?

  @Stateless 
@WebService
public class TestBean {
private @Resource(name = dbName)DataSource m_ds;

$ / code $ / pre

我很抱歉,如果它是一个nube问题,但我很漂亮Java新手。

解决方案

除了C风格的格式化,一些不必要的行和有点差的异常处理,你可以

 

以下是我的做法:

  public final class SQLUtil {
private static DataSource dataSource;
// ..

static {
try {
dataSource =(DataSource)new InitialContext()。lookup(name);
} catch(NamingException e){
抛出新的ExceptionInInitializerError(e);



public static Connection getConnection()throws SQLException {
return dataSource.getConnection();
}
}

我在这里 ExceptionInInitializerError ,这样应用程序将立即停止,以便您在尝试获取连接时无需面对无法解释 NullPointerException


I need a database connection in Java Web service implemented as a session bean, and I'm not sure if I do it right.

I created a class

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();             
    }
}

Whenever I need a connection I do

 Connection cn = null;  
 try  
 {
     cn = SQLUtils.getSQLConnection();
     // use connection
 }
 finally 
 {
     if (null != cn)
     {
         try
         {
             cn.close();
         }
         catch (SQLException e)
         {

         }
     }
 }

Is it ok to use it this way, or I DataSource must be a member of the bean ?

  @Stateless  
  @WebService  
  public class TestBean  {  
   private @Resource(name=dbName) DataSource m_ds;   
  }  

I'm sorry if it is a nube question, but I'm pretty new to Java. Thanks in advance.

解决方案

Apart from the C-style formatting, a few unnecessary lines and a bit poor exception handling, you can just do so.

Here's how I'd do it:

public final class SQLUtil {
    private static DataSource dataSource;
    // ..

    static {
        try {
            dataSource = (DataSource) new InitialContext().lookup(name);
        } catch (NamingException e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection() throws SQLException {  
        return dataSource.getConnection();             
    }
}

I throw here ExceptionInInitializerError so that the application will immediately stop so that you don't need to face "unexplainable" NullPointerException when trying to obtain a connection.

这篇关于正确使用JDBC连接池(Glassfish)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆