Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在struts-config.xml中初始化我自己的连接池?_Java_Servlets_Struts_Connection Pooling_Struts Config - Fatal编程技术网

Java 如何在struts-config.xml中初始化我自己的连接池?

Java 如何在struts-config.xml中初始化我自己的连接池?,java,servlets,struts,connection-pooling,struts-config,Java,Servlets,Struts,Connection Pooling,Struts Config,我有自己的连接池类 public class ConnectionPool { private static final Logger log = Logger.getLogger(ConnectionPool.class); public final static String PROPERTIES_FILENAME = "config"; public static final int DEFAULT_POOL_SIZE = 10; //single instance privat

我有自己的连接池类

public class ConnectionPool {


private static final Logger log = Logger.getLogger(ConnectionPool.class);

public final static String PROPERTIES_FILENAME = "config";
public static final int DEFAULT_POOL_SIZE = 10;


//single instance
private static ConnectionPool instatance;
//queue of free connections
private BlockingQueue<Connection> connectionQueue;

public ConnectionPool(String driver, String url, String user,
        String password, int poolSize)
        throws ClassNotFoundException, DAOException{
    try{
        Class.forName(driver);
        connectionQueue = new ArrayBlockingQueue<Connection>(poolSize);
        for(int i = 0; i < poolSize ;i++){
            Connection connection = DriverManager.getConnection(url, user, password);
            connectionQueue.offer(connection);
        }
    }
    catch (SQLException e) {
        log.error(e);
        throw new DAOException(e.getMessage());
    }
}

public static void init() throws DAOException{
    try {
    if(instatance == null){


        String driver  =  ConfigurationManager.
        getInstance().getProperty("DATABASE_DRIVER_NAME");
        String url = ConfigurationManager.
        getInstance().getProperty("DATABASE_URL");
        String user = ConfigurationManager.
        getInstance().getProperty("DATABASE_USER");
        String password = ConfigurationManager.
        getInstance().getProperty("DATABASE_PASSWORD");
        String poolSizeStr = ConfigurationManager.
        getInstance().getProperty("DATABASE_POOLSIZE");
        int poolSize = (poolSizeStr != null) ?
                Integer.parseInt(poolSizeStr) : DEFAULT_POOL_SIZE;

        log.info("Trying to create pool of connections...");

        instatance = new ConnectionPool(driver,url,user,password,poolSize);

        log.info("Connection pool initialized");
    }
    }catch (ClassNotFoundException e) {
        log.error(e);
    } catch (SQLException e) {
        log.error(e);
        throw new DAOException(e.getMessage());
    }
}

public static void dispose() throws DAOException {
    try {
        if(instatance != null){
            instatance.clearConnectionQueue();
            instatance = null;
            log.info("Connection queue is disposed");
        }
    } catch (DAOException e) {
        log.info(e.getMessage());
        throw new DAOException(e.getMessage());
    }
}

public static ConnectionPool getInstance(){
    return instatance;
}

public Connection takeConnection() {
    Connection connection = null;
    try{
        connection = connectionQueue.take();
    }catch (InterruptedException e) {
        log.info("Free connection waiting interrupted.Returned null connection");
        log.error(e);
    }
    return connection;
}

public void releaseConnection(Connection connection) throws DAOException {
    try {

        if(!connection.isClosed()){
            if(!connectionQueue.offer(connection)){
                log.info("Connections is not added.");
            }
        }
        else{
            log.info("Trying to release closed connection.");
        }
    } catch (SQLException e) {
        log.info("SQLException at connection isClosed(). Connection is not added");
        throw new DAOException(e.getMessage());
    }
}

private void clearConnectionQueue() throws DAOException{
    try {
        Connection connection;
        while((connection = connectionQueue.poll()) != null){

            if(!connection.getAutoCommit()){
                connection.commit();
                connection.close();
            }
    }
    } catch (SQLException e) {
        log.info(e.getMessage());
        throw new DAOException(e.getMessage());
    }
}

但是这不适用于Struts操作,所以我决定可以在Struts-config.xml或web.xml中完成。但是怎么做呢?

我认为您应该使用ServletContextListener:

即使在使用另一个框架时,它也是放置数据源初始化代码的好地方。 每次应用程序启动并运行时都会调用此侦听器,以便您可以将数据源放入上下文属性中,并在必要时恢复它

public class LinkAction extends DispatchAction {
private static final String PARAM_NAME_LANGUAGE = "language";

/**
 * This is the Struts action method called on
 * http://.../actionPath?method=myAction1,
 * where "method" is the value specified in <action> element : 
 * ( <action parameter="method" .../> )
 */
private static ConnectionPool connectionPool =
    ConnectionPool.getInstance();

public void init(){
    try {
        if(connectionPool == null){

            ConnectionPool.init();
            connectionPool = ConnectionPool.getInstance();
        }

    } catch (DAOException e) {
        log.error(e);
    }
}


public ActionForward newsList(ActionMapping mapping, ActionForm  form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    return mapping.findForward("newsList");
}

public ActionForward addNews(ActionMapping mapping, ActionForm  form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    return mapping.findForward("addNews");
}

public ActionForward changeLocale(ActionMapping mapping, ActionForm  form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    String localeValue = request.getParameter("localeValue");
    request.getSession().setAttribute(PARAM_NAME_LANGUAGE, localeValue);
    return mapping.findForward("newsList");
}


}