gov.nih.nci.security.system.ApplicationSessionFactory.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.security.system.ApplicationSessionFactory.java

Source

package gov.nih.nci.security.system;

/**
 *
 *<!-- LICENSE_TEXT_START -->
 *
 *The NCICB Common Security Module (CSM) Software License, Version 3.0 Copyright
 *2004-2005 Ekagra Software Technologies Limited ('Ekagra')
 *
 *Copyright Notice.  The software subject to this notice and license includes both
 *human readable source code form and machine readable, binary, object code form
 *(the 'CSM Software').  The CSM Software was developed in conjunction with the
 *National Cancer Institute ('NCI') by NCI employees and employees of Ekagra.  To
 *the extent government employees are authors, any rights in such works shall be
 *subject to Title 17 of the United States Code, section 105.    
 *
 *This CSM Software License (the 'License') is between NCI and You.  'You (or
 *'Your') shall mean a person or an entity, and all other entities that control,
 *are controlled by, or are under common control with the entity.  'Control' for
 *purposes of this definition means (i) the direct or indirect power to cause the
 *direction or management of such entity, whether by contract or otherwise, or
 *(ii) ownership of fifty percent (50%) or more of the outstanding shares, or
 *(iii) beneficial ownership of such entity.  
 *
 *This License is granted provided that You agree to the conditions described
 *below.  NCI grants You a non-exclusive, worldwide, perpetual, fully-paid-up,
 *no-charge, irrevocable, transferable and royalty-free right and license in its
 *rights in the CSM Software to (i) use, install, access, operate, execute, copy,
 *modify, translate, market, publicly display, publicly perform, and prepare
 *derivative works of the CSM Software; (ii) distribute and have distributed to
 *and by third parties the CSM Software and any modifications and derivative works
 *thereof; and (iii) sublicense the foregoing rights set out in (i) and (ii) to
 *third parties, including the right to license such rights to further third
 *parties.  For sake of clarity, and not by way of limitation, NCI shall have no
 *right of accounting or right of payment from You or Your sublicensees for the
 *rights granted under this License.  This License is granted at no charge to You.
 *
 *1.   Your redistributions of the source code for the Software must retain the
 *above copyright notice, this list of conditions and the disclaimer and
 *limitation of liability of Article 6 below.  Your redistributions in object code
 *form must reproduce the above copyright notice, this list of conditions and the
 *disclaimer of Article 6 in the documentation and/or other materials provided
 *with the distribution, if any.
 *2.   Your end-user documentation included with the redistribution, if any, must
 *include the following acknowledgment: 'This product includes software developed
 *by Ekagra and the National Cancer Institute.'  If You do not include such
 *end-user documentation, You shall include this acknowledgment in the Software
 *itself, wherever such third-party acknowledgments normally appear.
 *
 *3.   You may not use the names 'The National Cancer Institute', 'NCI' 'Ekagra
 *Software Technologies Limited' and 'Ekagra' to endorse or promote products
 *derived from this Software.  This License does not authorize You to use any
 *trademarks, service marks, trade names, logos or product names of either NCI or
 *Ekagra, except as required to comply with the terms of this License.
 *
 *4.   For sake of clarity, and not by way of limitation, You may incorporate this
 *Software into Your proprietary programs and into any third party proprietary
 *programs.  However, if You incorporate the Software into third party proprietary
 *programs, You agree that You are solely responsible for obtaining any permission
 *from such third parties required to incorporate the Software into such third
 *party proprietary programs and for informing Your sublicensees, including
 *without limitation Your end-users, of their obligation to secure any required
 *permissions from such third parties before incorporating the Software into such
 *third party proprietary software programs.  In the event that You fail to obtain
 *such permissions, You agree to indemnify NCI for any claims against NCI by such
 *third parties, except to the extent prohibited by law, resulting from Your
 *failure to obtain such permissions.
 *
 *5.   For sake of clarity, and not by way of limitation, You may add Your own
 *copyright statement to Your modifications and to the derivative works, and You
 *may provide additional or different license terms and conditions in Your
 *sublicenses of modifications of the Software, or any derivative works of the
 *Software as a whole, provided Your use, reproduction, and distribution of the
 *Work otherwise complies with the conditions stated in this License.
 *
 *6.   THIS SOFTWARE IS PROVIDED 'AS IS,' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 *(INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
 *NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED.  IN NO
 *EVENT SHALL THE NATIONAL CANCER INSTITUTE, EKAGRA, OR THEIR AFFILIATES BE LIABLE
 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 *DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 *SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 *CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 *THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *<!-- LICENSE_TEXT_END -->
 *
 */

import gov.nih.nci.security.exceptions.CSConfigurationException;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Hashtable;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * @author kumarvi
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 * This class will be used by UserProvisioningManagerImpl to get
 * appropriate sessionFactory handle
 */
public class ApplicationSessionFactory {

    public static Hashtable appSessionFactories = new Hashtable();

    public static SessionFactory getSessionFactory(String applicationContextName) throws CSConfigurationException {
        SessionFactory sf = null;

        sf = (SessionFactory) appSessionFactories.get(applicationContextName);
        if (sf == null) {
            sf = ApplicationSecurityConfigurationParser
                    .getApplicationSessionFactoryFromHotInitialization(applicationContextName);
            appSessionFactories.put(applicationContextName, sf);
        }

        if (sf == null) {
            throw new CSConfigurationException("Could not initialize session factory");
        }
        return sf;
    }

    public static SessionFactory initSessionFactory(String fileName) throws CSConfigurationException {
        SessionFactory sf = null;

        File f = new File(fileName);
        if (!f.exists())
            throw new CSConfigurationException("Error in reading the Hibernate Configuration File");
        sf = new Configuration().configure(f).buildSessionFactory();

        return sf;
    }

    public static SessionFactory getSessionFactory(String applicationContextName, HashMap connectionProperties)
            throws CSConfigurationException {
        SessionFactory sessionFactory = null;

        sessionFactory = (SessionFactory) appSessionFactories.get(applicationContextName);
        if (sessionFactory == null) {
            try {
                Configuration configuration = new Configuration();
                configuration.addResource(
                        "gov/nih/nci/security/authorization/domainobjects/InstanceLevelMappingElement.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/Privilege.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/Application.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/FilterClause.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/Role.hbm.xml");
                configuration.addResource("gov/nih/nci/security/dao/hibernate/RolePrivilege.hbm.xml");
                configuration.addResource("gov/nih/nci/security/dao/hibernate/UserGroup.hbm.xml");
                configuration
                        .addResource("gov/nih/nci/security/dao/hibernate/ProtectionGroupProtectionElement.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/Group.hbm.xml");
                configuration.addResource("gov/nih/nci/security/authorization/domainobjects/User.hbm.xml");
                configuration
                        .addResource("gov/nih/nci/security/authorization/domainobjects/ProtectionGroup.hbm.xml");
                configuration
                        .addResource("gov/nih/nci/security/authorization/domainobjects/ProtectionElement.hbm.xml");
                configuration.addResource(
                        "gov/nih/nci/security/authorization/domainobjects/UserGroupRoleProtectionGroup.hbm.xml");
                configuration.addResource(
                        "gov/nih/nci/security/authorization/domainobjects/UserProtectionElement.hbm.xml");
                configuration.setProperty("hibernate.connection.url",
                        (String) connectionProperties.get("hibernate.connection.url"));
                configuration.setProperty("hibernate.connection.username",
                        (String) connectionProperties.get("hibernate.connection.username"));
                configuration.setProperty("hibernate.connection.password",
                        (String) connectionProperties.get("hibernate.connection.password"));
                configuration.setProperty("hibernate.dialect",
                        (String) connectionProperties.get("hibernate.dialect"));
                configuration.setProperty("hibernate.connection.driver_class",
                        (String) connectionProperties.get("hibernate.connection.driver_class"));
                configuration.setProperty("hibernate.c3p0.min_size", "5");
                configuration.setProperty("hibernate.c3p0.max_size", "20");
                configuration.setProperty("hibernate.c3p0.timeout", "300");
                configuration.setProperty("hibernate.c3p0.max_statements", "50");
                configuration.setProperty("hibernate.c3p0.idle_test_period", "3000");

                sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
                throw new CSConfigurationException(
                        "Error in initializing the hibernate session factory using the provided connection parameters",
                        e);
            }
            appSessionFactories.put(applicationContextName, sessionFactory);
        }
        return sessionFactory;
    }

    public static SessionFactory getSessionFactory(String applicationContextName, URL url)
            throws CSConfigurationException {
        SessionFactory sf = null;

        sf = (SessionFactory) appSessionFactories.get(applicationContextName);
        if (sf == null) {
            sf = new Configuration().configure(url).buildSessionFactory();
            appSessionFactories.put(applicationContextName, sf);
        }
        if (sf == null) {
            throw new CSConfigurationException(
                    "Could not initialize session factory using the configuration file from the classpath");
        }
        return sf;
    }
}