AppConnectionService.java

  1. /*
  2.  * Copyright (c) 2002-2022, City of Paris
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  *  1. Redistributions of source code must retain the above copyright notice
  10.  *     and the following disclaimer.
  11.  *
  12.  *  2. Redistributions in binary form must reproduce the above copyright notice
  13.  *     and the following disclaimer in the documentation and/or other materials
  14.  *     provided with the distribution.
  15.  *
  16.  *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
  17.  *     contributors may be used to endorse or promote products derived from
  18.  *     this software without specific prior written permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
  24.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30.  * POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * License 1.0
  33.  */
  34. package fr.paris.lutece.portal.service.database;

  35. import fr.paris.lutece.portal.service.init.LuteceInitException;
  36. import fr.paris.lutece.portal.service.util.AppException;
  37. import fr.paris.lutece.portal.service.util.AppPathService;
  38. import fr.paris.lutece.util.ReferenceList;
  39. import fr.paris.lutece.util.pool.PoolManager;
  40. import fr.paris.lutece.util.pool.service.ConnectionService;

  41. import java.io.InputStream;

  42. import java.sql.Connection;

  43. /**
  44.  * This class provides a Database Connection Service based on pooled connections.
  45.  */
  46. public final class AppConnectionService
  47. {
  48.     // //////////////////////////////////////////////////////////////////////////
  49.     // Constants
  50.     public static final String NO_POOL_DEFINED = "none";
  51.     public static final String DEFAULT_POOL_NAME = "portal";
  52.     private static PoolManager _poolManager;
  53.     private static PluginConnectionService _connectionService;

  54.     /**
  55.      * Creates a new AppConnectionService object.
  56.      */
  57.     private AppConnectionService( )
  58.     {
  59.     }

  60.     /**
  61.      * Initializes the connection pool and sets the pool manager instance
  62.      *
  63.      * @param strConfigPath
  64.      *            The relative Config path
  65.      * @param strConfigFilename
  66.      *            The config file name
  67.      * @param strPoolName
  68.      *            The pool name
  69.      * @throws LuteceInitException
  70.      *             If an error occured
  71.      */
  72.     public static void init( String strConfigPath, String strConfigFilename, String strPoolName ) throws LuteceInitException
  73.     {
  74.         try
  75.         {
  76.             InputStream is = AppPathService.getResourceAsStream( strConfigPath, strConfigFilename );
  77.             _poolManager = PoolManager.getInstance( is );
  78.             _connectionService = new PluginConnectionService( strPoolName );
  79.             is.close( );
  80.         }
  81.         catch( Exception e )
  82.         {
  83.             throw new LuteceInitException( "Error initializing pool : " + e.getMessage( ), e );
  84.         }
  85.     }

  86.     /**
  87.      * Returns a connection to database from the pool name
  88.      *
  89.      * @return a connection to database from the pool
  90.      */
  91.     public static Connection getConnection( )
  92.     {
  93.         if ( _poolManager == null )
  94.         {
  95.             throw new AppException( "* Erreur * getConnection : Le pool de connexion n'est pas initialise !" );
  96.         }

  97.         return _connectionService.getConnection( );
  98.     }

  99.     /**
  100.      * Releases a connection and replaces it in the pool
  101.      *
  102.      * @param conn
  103.      *            The connection to realease
  104.      */
  105.     public static void freeConnection( Connection conn )
  106.     {
  107.         _connectionService.freeConnection( conn );
  108.     }

  109.     /**
  110.      * Releases all the connections on all the pools
  111.      */
  112.     public static void releasePool( )
  113.     {
  114.         _poolManager.release( );
  115.     }

  116.     /**
  117.      * Gets a reference on the current Pool Manager
  118.      *
  119.      * @return The current Pool Manager
  120.      */
  121.     public static PoolManager getPoolManager( )
  122.     {
  123.         if ( _poolManager == null )
  124.         {
  125.             throw new AppException( "PoolManager was not initialized !" );
  126.         }

  127.         return _poolManager;
  128.     }

  129.     /**
  130.      * Gets the list of all pools defined in the db.properties file
  131.      *
  132.      * @param list
  133.      *            The Reference List
  134.      */
  135.     public static void getPoolList( ReferenceList list )
  136.     {
  137.         for ( ConnectionService cs : _poolManager.getPools( ) )
  138.         {
  139.             list.addItem( cs.getPoolName( ), cs.getPoolName( ) );
  140.         }
  141.     }

  142.     /**
  143.      * Returns a default Plugin Connection Service
  144.      *
  145.      * @return The connection Service
  146.      */
  147.     public static PluginConnectionService getDefaultConnectionService( )
  148.     {
  149.         return _connectionService;
  150.     }
  151. }