alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Glassfish example source code file (SQLPersistenceManagerFactory.java)

This example Glassfish source code file (SQLPersistenceManagerFactory.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Glassfish tags/keywords

connection, connectionfactory, io, jdbc, noi18n, noi18n, object, object, persistencemanager, persistencemanagerfactory, persistencemanagerimpl, sql, sqlpersistencemanagerfactory, sqlpersistencemanagerfactory, string, string, util, versionconsistencycache

The Glassfish SQLPersistenceManagerFactory.java source code

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

/*
 * SQLPersistenceManagerFactory.java
 *
 * Created on March 6, 2000
 */

package com.sun.jdo.spi.persistence.support.sqlstore.impl;

import org.glassfish.persistence.common.I18NHelper;
import com.sun.jdo.api.persistence.support.*;
import com.sun.jdo.spi.persistence.support.sqlstore.PersistenceStore;
import com.sun.jdo.spi.persistence.support.sqlstore.SQLStoreManager;
import com.sun.jdo.spi.persistence.support.sqlstore.VersionConsistencyCache;
import com.sun.jdo.spi.persistence.support.sqlstore.ejb.EJBHelper;
import com.sun.jdo.spi.persistence.utility.BucketizedHashtable;
import com.sun.jdo.spi.persistence.utility.logging.Logger;
import com.sun.jdo.spi.persistence.support.sqlstore.LogHelperPersistenceManager;

//Remove this once checkLogger() is removed from initialize

import javax.sql.DataSource;
import java.sql.SQLException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 *
 * @author  Marina Vatkina
 * @version 0.1
 */

public class SQLPersistenceManagerFactory
        implements com.sun.jdo.spi.persistence.support.sqlstore.PersistenceManagerFactory {

    private PersistenceStore _store = null;
    private ConnectionFactory _connectionFactory = null;
    private Object _dataSource = null;
    private PersistenceManagerFactory _persistenceManagerFactory = null;

    /**
     * PersistenceManager and Transaction default flags
     */
    private boolean optimistic = true;
    private boolean retainValues = true;
    private boolean nontransactionalRead = true;
    private boolean ignoreCache = true;

    /**
     * sql Statement timeouts
     */
    private int queryTimeout = 0;
    private int updateTimeout = 0;

    /** Pooling size
     */
    private int minPool = 0;
    private int maxPool = 0;

    /**
     * The logger
     */
    private static Logger logger = LogHelperPersistenceManager.getLogger();

    /**
     * I18N message handler
     */
    private final static ResourceBundle messages = I18NHelper.loadBundle(
            "com.sun.jdo.spi.persistence.support.sqlstore.Bundle", //NOI18N 
            SQLPersistenceManagerFactory.class.getClassLoader());

    /**
     * bucket size for Transactional cache of PersistenceManager instances
     */
    private static int pmCacheBucketSize;

    /**
     * initial capacity for Transactional cache of PersistenceManager instances
     */
    private static int pmCacheInitialCapacity;

    static {
        pmCacheBucketSize = Integer.getInteger(
                "com.sun.jdo.spi.persistence.support.sqlstore.impl.SQLPersistenceManagerFactory.pmCacheBucketSize", // NOI18N
                11).intValue();

        pmCacheInitialCapacity = Integer.getInteger(
                "com.sun.jdo.spi.persistence.support.sqlstore.impl.SQLPersistenceManagerFactory.pmCacheInitialCapacity", // NOI18N
                11 * pmCacheBucketSize).intValue();

        if (logger.isLoggable(Logger.FINEST)) {
            logger.finest(
                "sqlstore.sqlpersistencemgrfactory.pmCacheBucketSize", // NOI18N
                 String.valueOf(pmCacheBucketSize));
            logger.finest(
                "sqlstore.sqlpersistencemgrfactory.pmCacheInitialCapacity", // NOI18N
                 String.valueOf(pmCacheInitialCapacity));
        }
    }

    /**
     * Transactional cache of PersistenceManager instances
     */
    private Map pmCache = new BucketizedHashtable(pmCacheBucketSize,
            pmCacheInitialCapacity);

    /**
     * Cache of StateManager instances that support version consistency
     */
    private VersionConsistencyCache vcCache = null;

    /**
     * Creates new <code>SQLPersistenceManagerFactory without any user info
     */
    public SQLPersistenceManagerFactory() {

    }

    /**
     * Creates new <code>SQLPersistenceManagerFactory with user info
     * @param connectionFactory	Connection Factory as java.lang.Object
     */
    public SQLPersistenceManagerFactory(Object connectionFactory) {
        if (connectionFactory instanceof ConnectionFactory)
            _connectionFactory = (ConnectionFactory) connectionFactory;
        else
            _dataSource = connectionFactory;

        if (this instanceof PersistenceManagerFactory)
            _persistenceManagerFactory = this;

        initialize();
    }

    /**
     * Creates new <code>SQLPersistenceManagerFactory with user parameters
     * @param persistenceManagerFactory	PersistenceManagerFactory instance
     */
    public SQLPersistenceManagerFactory(
            PersistenceManagerFactory persistenceManagerFactory) {
        _persistenceManagerFactory = persistenceManagerFactory;
        Object cf = _persistenceManagerFactory.getConnectionFactory();

        if (cf instanceof ConnectionFactory)
            _connectionFactory = (ConnectionFactory) cf;
        else
            _dataSource = cf;

        initialize();
    }

    /**
     * Sets database user name
     * @param userName	 user name
     */
    public void setConnectionUserName(String userName) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns database user name
     * @return	current database user name
     */
    public String getConnectionUserName() {
        return _persistenceManagerFactory.getConnectionUserName();
    }

    /**
     * Sets database user password
     * @param       password user password
     */
    public void setConnectionPassword(String password) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Sets connection URL
     * @param	url connection URL
     */
    public void setConnectionURL(String url) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns connection URL
     * @return	connection URL
     */
    public String getConnectionURL() {
        return _persistenceManagerFactory.getConnectionURL();

    }

    /**
     * Sets JDBC driver name
     * @param	driverName driver name
     */
    public void setConnectionDriverName(String driverName) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns JDBC driver name
     * @return	driver name
     */
    public String getConnectionDriverName() {
        return _persistenceManagerFactory.getConnectionDriverName();

    }

    /**
     * Sets ConnectionFactory
     * @param	cf as java.lang.Object
     */
    public void setConnectionFactory(Object cf) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns ConnectionFactory
     * @return	Connection Factory as java.lang.Object
     */
    public Object getConnectionFactory() {
        if (_dataSource != null)
            return _dataSource;

        return _connectionFactory;
    }

    /**
     * Sets the optimistic flag for all PersistenceManagers
     * @param flag          boolean optimistic flag
     */
    public void setOptimistic(boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the boolean value of the optimistic flag for all PersistenceManagers
     * @return      boolean optimistic flag
     */
    public boolean getOptimistic() {
        return _persistenceManagerFactory.getOptimistic();
    }

    /**
     * Sets flag that will not cause the eviction of persistent instances after transaction completion.
     * @param flag          boolean flag passed
     */
    public void setRetainValues(boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the boolean value for the flag that will not cause the eviction of persistent
     * instances after transaction completion.
     * @return      boolean setting for the flag
     */
    public boolean getRetainValues() {
        return _persistenceManagerFactory.getRetainValues();
    }

    /**
     * Sets the flag that allows non-transactional instances to be managed in the cache.
     * @param flag          boolean flag passed
     */
    public void setNontransactionalRead(boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the boolean value for the flag that allows non-transactional instances to be
     * managed in the cache.
     * @return      boolean setting for the flag
     */
    public boolean getNontransactionalRead() {
        return _persistenceManagerFactory.getNontransactionalRead();
    }


    /**
     * Sets the flag that allows the user to request that queries be optimized to return
     * approximate results by ignoring changed values in the cache.
     * @param flag          boolean flag passed
     */
    public void setIgnoreCache(boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the boolean value for the flag that allows the user to request that queries
     * be optimized to return approximate results by ignoring changed values in the cache.
     * @return      boolean setting for the flag
     */
    public boolean getIgnoreCache() {
        return _persistenceManagerFactory.getIgnoreCache();
    }

    /**
     * Sets the number of seconds to wait for a query statement
     * to execute in the datastore associated with this PersistenceManagerFactory.
     * @param timeout          new timout value in seconds; zero means unlimited
     */
    public void setQueryTimeout(int timeout) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Gets the number of seconds to wait for a query statement
     * to execute in the datastore associated with this PersistenceManagerFactory.
     * @return      timout value in seconds; zero means unlimited
     */
    public int getQueryTimeout() {
        return _persistenceManagerFactory.getQueryTimeout();
    }

    /**
     * Sets maximum number of connections in the connection pool
     * @param MaxPool       maximum number of connections
     */
    public void setConnectionMaxPool(int MaxPool) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns maximum number of connections in the connection pool
     * @return      connectionMaxPool
     */
    public int getConnectionMaxPool() {
        return _persistenceManagerFactory.getConnectionMaxPool();
    }

    /**
     * Sets minimum number of connections in the connection pool
     * @param MinPool       minimum number of connections
     */
    public void setConnectionMinPool(int MinPool) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns minimum number of connections in the connection pool
     * @return      connectionMinPool
     */
    public int getConnectionMinPool() {
        return _persistenceManagerFactory.getConnectionMinPool();
    }

    /**
     * Sets the number of milliseconds to wait for an available connection
     * from the connection pool before throwing an exception
     * @param MsWait        number in milliseconds
     */
    public void setConnectionMsWait(int MsWait) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the number of milliseconds to wait for an available connection
     * from the connection pool before throwing an exception
     * @return      number in milliseconds
     */
    public int getConnectionMsWait() {
        return _persistenceManagerFactory.getConnectionMsWait();
    }

    /**
     * Sets the amount of time, in milliseconds, between the connection
     * manager's attempts to get a pooled connection.
     * @param MsInterval    the interval between attempts to get a database
     *                      connection, in milliseconds.
     *
     */
    public void setConnectionMsInterval(int MsInterval) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the amount of time, in milliseconds, between the connection
     * manager's attempts to get a pooled connection.
     * @return      the length of the interval between tries in milliseconds
     */
    public int getConnectionMsInterval() {
        return _persistenceManagerFactory.getConnectionMsInterval();
    }

    /**
     * Sets the number of seconds to wait for a new connection to be
     * established to the data source
     * @param LoginTimeout           wait time in seconds
     */
    public void setConnectionLoginTimeout(int LoginTimeout) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the number of seconds to wait for a new connection to be
     * established to the data source
     * @return      wait time in seconds
     */
    public int getConnectionLoginTimeout() {
        return _persistenceManagerFactory.getConnectionLoginTimeout();
    }

    /**
     * Sets the LogWriter to which messages should be sent
     * @param pw            LogWriter
     */
    public void setConnectionLogWriter(PrintWriter pw) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns the LogWriter to which messages should be sent
     * @return      LogWriter
     */
    public PrintWriter getConnectionLogWriter() {
        return _persistenceManagerFactory.getConnectionLogWriter();
    }

    /**
     * Sets transaction isolation level for all connections of this PersistenceManagerFactory.
     * All validation is done by java.sql.Connection itself, so e.g. while Oracle
     * will not allow to set solation level to TRANSACTION_REPEATABLE_READ, this method
     * does not have any explicit restrictions
     *
     * @param level - one of the java.sql.Connection.TRANSACTION_* isolation values
     */
    public void setConnectionTransactionIsolation(int level) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns current transaction isolation level for connections of this PersistenceManagerFactory.
     * @return      the current transaction isolation mode value as java.sql.Connection.TRANSACTION_*
     */
    public int getConnectionTransactionIsolation() {
        return _persistenceManagerFactory.getConnectionTransactionIsolation();
    }

    /**
     * Sets ConnectionFactory name
     * @param connectionFactoryName     ConnectionFactory name
     */
    public void setConnectionFactoryName(String connectionFactoryName) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns ConnectionFactory name
     * @return      ConnectionFactoryName
     */
    public String getConnectionFactoryName() {
        return _persistenceManagerFactory.getConnectionFactoryName();
    }

    /**
     * Sets Identifier.
     * @param identifier
     */
    public void setIdentifier(String identifier) {
		throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
				"jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Gets Identifier.
     * @return identifier
     */
    public String getIdentifier() {
        return _persistenceManagerFactory.getIdentifier();
    }

    /**
     * Returns maximum number of PersistenceManager instances in the pool
     * @return maxPool
     */
    public int getMaxPool() {
        return maxPool;
    }


    /**
     * Sets maximum number of PersistenceManager instances in the pool
     * @param MaxPool       maximum number of PersistenceManager instances
     */
    public void setMaxPool(int MaxPool) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Returns minimum number of PersistenceManager instances in the pool
     * @return minPool
     */
    public int getMinPool() {
        return minPool;
    }


    /**
     * Sets minimum number of PersistenceManager instances in the pool
     * @param MinPool       minimum number of PersistenceManager instances
     */
    public void setMinPool(int MinPool) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }


    /**
     * Sets the number of seconds to wait for an update statement
     * to execute in the datastore associated with this PersistenceManagerFactory.
     * @param timeout          new timout value in seconds; zero means unlimited
     */
    public void setUpdateTimeout(int timeout) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Gets the number of seconds to wait for an update statement
     * to execute in the datastore associated with this PersistenceManagerFactory.
     * @return      timout value in seconds; zero means unlimited
     */
    public int getUpdateTimeout() {
        return _persistenceManagerFactory.getUpdateTimeout();
    }

    /**
     * Returns the boolean value of the supersedeDeletedInstance flag
     * for all PersistenceManagers. If set to true, deleted instances are
     * allowed to be replaced with persistent-new instances with the equal
     * Object Id.
     * @return      boolean supersedeDeletedInstance flag
     */
    public boolean getSupersedeDeletedInstance () {
        return _persistenceManagerFactory.getSupersedeDeletedInstance();
    }


    /**
     * Sets the supersedeDeletedInstance flag for all PersistenceManagers.
     * @param flag          boolean supersedeDeletedInstance flag
     */
    public void setSupersedeDeletedInstance (boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
      * Returns the default value of the requireCopyObjectId flag. If set to false, PersistenceManagers
      * will not create a copy of an ObjectId for <code>PersistenceManager.getObjectId(Object pc)
      * and <code>PersistenceManager.getObjectById(Object oid) requests.
      *
      * @see PersistenceManager#getObjectId(Object pc)
      * @see PersistenceManager#getObjectById(Object oid)
      * @return      boolean requireCopyObjectId flag
      */
     public boolean getRequireCopyObjectId() {
         return _persistenceManagerFactory.getRequireCopyObjectId();
     }


     /**
      * Sets the default value of the requireCopyObjectId.
      * If set to false, PersistenceManagers will not create a copy of
      * an ObjectId for <code>PersistenceManager.getObjectId(Object pc)
      * and <code>PersistenceManager.getObjectById(Object oid) requests.
      *
      * @see PersistenceManager#getObjectId(Object pc)
      * @see PersistenceManager#getObjectById(Object oid)
      * @param flag          boolean requireCopyObjectId flag
      */
     public void setRequireCopyObjectId (boolean flag) {
         throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
     }

    /**
     * Returns the boolean value of the requireTrackedSCO flag
     * for this PersistenceManagerFactory. If set to false, by default the
     * PersistenceManager will not create tracked SCO instances for
     * new persistent instances at commit with retainValues set to true and while
     * retrieving data from a datastore.
     *
     * @return      boolean requireTrackedSCO flag
     */
    public boolean getRequireTrackedSCO() {
        return _persistenceManagerFactory.getRequireTrackedSCO();
    }
  
    /**
     * Sets the requireTrackedSCO flag for this PersistenceManagerFactory.
     * If set to false, by default the PersistenceManager will not create tracked
     * SCO instances for new persistent instances at commit with retainValues set to true
     * requests and while retrieving data from a datastore.
     *
     * @param flag          boolean requireTrackedSCO flag
     */
    public void setRequireTrackedSCO (boolean flag) {
        throw new JDOUnsupportedOptionException(I18NHelper.getMessage(messages,
                "jdo.persistencemanagerfactoryimpl.notsupported")); //NOI18N
    }

    /**
     * Creates new <a href="PersistenceManager.html">PersistenceManager without specific
     * info.
     * @return      the persistence manager
     * @exception JDOUserException if data source info is not set
     */
    public PersistenceManager getPersistenceManager() {
        return getPersistenceManager(null, null);
    }

    /**
     * Creates new <a href="PersistenceManager.html">PersistenceManager with specific
     * username and password. Used to call ConnectionFactory.getConnection(String, String)
     * @param       username      datasource user
     * @param       password      datasource user password
     * @return	the persistence manager
     * @exception JDOUserException if data source info is not set
     */
    public PersistenceManager getPersistenceManager(String username, String password) {
        boolean debug = logger.isLoggable(Logger.FINEST);

        if (_connectionFactory == null && _dataSource == null) {
            throw new JDOUserException(I18NHelper.getMessage(messages,
                    "jdo.persistencemanagerfactoryimpl.getpersistencemanager.notconfigured"));// NOI18N
        }

        if (debug) {
             logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr",Thread.currentThread()); // NOI18N
        }

        // Check if we are in managed environment and PersistenceManager is cached
        PersistenceManagerImpl pm = null;
        javax.transaction.Transaction t = EJBHelper.getTransaction();

        if (t != null) {
            if (debug) {
                Object[] items = new Object[] {Thread.currentThread(),t};
                logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr.found",items); // NOI18N
            }

            pm = (PersistenceManagerImpl) pmCache.get(t);
            if (pm == null) {
                // Not found
                pm = getFromPool(t, username, password);
                pmCache.put(t, pm);
            } else if(pm.isClosed()) {
                if (debug) {
                     Object[] items = new Object[] {Thread.currentThread(),t};
                     logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr.pmclosedfor",items); // NOI18N
                }
                throw new JDOFatalInternalException(I18NHelper.getMessage(messages,
                        "jdo.persistencemanagerfactoryimpl.getpersistencemanager.closed", // NOI18N
                        t));
            }

            // We know we are in the managed environment and
            // JTA transaction is  active. We need to start
            // JDO Transaction internally if it is not active.

            com.sun.jdo.spi.persistence.support.sqlstore.Transaction tx =
                    (com.sun.jdo.spi.persistence.support.sqlstore.Transaction) pm.currentTransaction();
            if (debug) {
                logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr.jdotx",tx); // NOI18N
            }

            if (!tx.isActive()) {
                tx.begin(t);
            }

            if (!(pm.verify(username, password))) {
                ;
                throw new JDOUserException(I18NHelper.getMessage(messages,
                        "jdo.persistencemanagerfactoryimpl.getpersistencemanager.error")); // NOI18N
            }
        } else {
            if (debug) {
                logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr.jdotx.notfound"); // NOI18N
            }
            // We don't know if we are in the managed environment or not
            // If Yes, it is BMT with JDO Transaction and it will register
            // itself at the begin().
            pm = getFromPool(null, username, password);
        }

        if (debug) {
            Object[] items = new Object[] {Thread.currentThread(),pm,t};
            logger.finest("sqlstore.sqlpersistencemgrfactory.getpersistencemgr.pmt",items); // NOI18N
        }

        // Always return a wrapper
        return new PersistenceManagerWrapper(pm);

    }

    /**
     * Returns non-operational properties to be available to the application via a Properties instance.
     * @return      Properties object
     */
    public Properties getProperties() {
        return _persistenceManagerFactory.getProperties();
    }

    /**
     * Returns instance of PersistenceManagerFactory
     */
    public PersistenceManagerFactory getPersistenceManagerFactory() {
        return _persistenceManagerFactory;
    }

    /**
     * Registers PersistenceManager in the transactional cache in
     * managed environment in case of BMT with JDO Transaction.
     * There is no javax.transaction.Transaction
     * available before the user starts the transaction.
     */
    public void registerPersistenceManager(
            com.sun.jdo.spi.persistence.support.sqlstore.PersistenceManager pm,
            javax.transaction.Transaction t) {

        boolean debug = logger.isLoggable(Logger.FINEST);
        if (debug) {
            Object[] items = new Object[] {pm,t};
            logger.finest("sqlstore.sqlpersistencemgrfactory.registerpersistencemgr.pmt",items); // NOI18N
        }
        PersistenceManager pm1 = (PersistenceManager) pmCache.get(t);
        // double-check locking has been removed
        if (pm1 == null) {
            pmCache.put(t, pm);
            ((PersistenceManagerImpl) pm).setJTATransaction(t);
            return;
        }

        if (pm1 != pm) {
            Object[] items = new Object[] {t, pm1};
            throw new JDOFatalInternalException(I18NHelper.getMessage(messages,
                    "jdo.persistencemanagerfactoryimpl.registerpm.registered", // NOI18N
                    items));
        } else {
            // do nothing ???
        }
    }

    /**
     * Returns an instance of PersistenceManagerImpl from available pool
     * or creates a new one
     */
    private PersistenceManagerImpl getFromPool(javax.transaction.Transaction tx,
                                               String username, String password) {

        boolean debug = logger.isLoggable(Logger.FINEST);
        if (debug) {
            logger.finest("sqlstore.sqlpersistencemgrfactory.getfrompool"); // NOI18N
        }

        synchronized (this) {
            if (_store == null) {
                initializeSQLStoreManager(username, password);
            }
        }

        // create new PersistenceManager object and set its atributes
        PersistenceManagerImpl pm = new PersistenceManagerImpl(this, tx, username, password);
        pm.setStore(_store);
        if (debug) {
            Object[] items = new Object[] {pm,tx};
            logger.finest("sqlstore.sqlpersistencemgrfactory.getfrompool.pmt",items); // NOI18N
        }

        return pm;

    }
    
    /**
     * Returns unused PersistenceManager to the free pool
     */
    private void returnToPool(PersistenceManager pm) {
        // do nothing for now
        logger.finest("sqlstore.sqlpersistencemgrfactory.returnToPool"); // NOI18N
    }

    /** Releases closed PersistenceManager that is not in use
     */
    public void releasePersistenceManager(com.sun.jdo.spi.persistence.support.sqlstore.PersistenceManager pm,
                                          javax.transaction.Transaction t) {


        boolean debug = logger.isLoggable(Logger.FINEST);
        if (debug) {
            Object[] items = new Object[] {pm,t};
            logger.finest("sqlstore.sqlpersistencemgrfactory.releasepm.pmt",items); // NOI18N
            
        }

        if (t != null) {
            // Managed environment
            // Deregister only
            PersistenceManager pm1 = (PersistenceManager) pmCache.get(t);
            if (pm1 == null || pm1 != pm) {
                Object[] items = new Object[] {t, pm1};
                throw new JDOFatalInternalException(I18NHelper.getMessage(messages,
                        "jdo.persistencemanagerfactoryimpl.registerpm.registered", // NOI18N
                        items));
            } else {
                pmCache.remove(t);
            }
        } else {
            returnToPool(pm);
        }
    }

    private void initialize() {

        logger.finest("sqlstore.sqlpersistencemgrfactory.init"); // NOI18N
        optimistic = _persistenceManagerFactory.getOptimistic();
        retainValues = _persistenceManagerFactory.getRetainValues();
        nontransactionalRead = _persistenceManagerFactory.getNontransactionalRead();
        ignoreCache = _persistenceManagerFactory.getIgnoreCache();
        queryTimeout = _persistenceManagerFactory.getQueryTimeout();
        updateTimeout = _persistenceManagerFactory.getUpdateTimeout();
        minPool = _persistenceManagerFactory.getMinPool();
        maxPool = _persistenceManagerFactory.getMaxPool();
    }


    private void initializeSQLStoreManager(String username, String password) {
        Connection conn = null;
        try { 
             conn = getConnection(username, password);
            if (conn != null) {
                _store = new SQLStoreManager(conn.getMetaData(),
                            getIdentifier() );
            }
        } catch(Exception e) {
            if (logger.isLoggable(Logger.WARNING)) {
                logger.log(Logger.WARNING, "jdo.sqlpersistencemanagerfactory.errorgettingDatabaseInfo", e); //NOI18N
            }

            if (e instanceof JDOException) {
                throw (JDOException) e;
            } else {
                throw new JDOFatalInternalException(I18NHelper.getMessage(messages,
                        "core.configuration.getvendortypefailed"), e); // NOI18N
            }
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch(Exception ex) {}
            }
        }
        
    }
    
    /**
     * Get Database connection for username and password.
     */
    private Connection getConnection(String username, String password) throws SQLException{
        Connection conn = null;

        if (_connectionFactory != null) {
            conn = _connectionFactory.getConnection();
        } else if (EJBHelper.isManaged()) {
            conn = EJBHelper.getConnection(_dataSource, username, password);
        } else {
            if (username == null) {
                conn = ((DataSource)_dataSource).getConnection();
            } else {
                conn = ((DataSource)_dataSource).getConnection(username, password);
            }
        }

        return conn;            
    }
    
    /**
     * Determines whether obj is a SQLPersistenceManagerFactory with the same configuration
     *
     * @param obj The possibly null object to check.
     * @return true if obj is equal to this SQLPersistenceManagerFactory; false otherwise.
     */
    public boolean equals(Object obj) {
        if ((obj != null) && (obj instanceof SQLPersistenceManagerFactory)) {
            SQLPersistenceManagerFactory pmf = (SQLPersistenceManagerFactory) obj;
            return (pmf._persistenceManagerFactory.equals(this._persistenceManagerFactory));

        }
        return false;
    }

    /**
     * Computes the hash code of this PersistenceManagerFactory.
     *
     * @return A hash code of the owning PersistenceManagerFactory as an int.
     */
    public int hashCode() {
        return this._persistenceManagerFactory.hashCode();
    }

    /**
     * Creates if necessary, and returns, this PMF's instance of its
     * VersionConsistencyCache.
     * @return This PMF's VersionConsistencyCache.
     */
    public VersionConsistencyCache getVersionConsistencyCache() {
        if (null == vcCache) {
            if (_store == null) {
                // Store should be configured already.
                throw new JDOFatalInternalException(I18NHelper.getMessage(messages,
                        "jdo.persistencemanagerfactoryimpl.getversionconsistencycache.nullstore")); // NOI18N
            }
            vcCache = VersionConsistencyCacheImpl.create();
            _store.getConfigCache().setVersionConsistencyCache(vcCache);
        }
        return vcCache;
    }
}

Other Glassfish examples (source code examples)

Here is a short list of links related to this Glassfish SQLPersistenceManagerFactory.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.