All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.orm.toplink.SessionBrokerSessionFactory Maven / Gradle / Ivy

There is a newer version: 5.3.34
Show newest version
/*
 * Copyright 2002-2005 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.orm.toplink;

import oracle.toplink.exceptions.TopLinkException;
import oracle.toplink.exceptions.ValidationException;
import oracle.toplink.sessionbroker.SessionBroker;
import oracle.toplink.sessions.Session;

/**
 * Spring SessionFactory implementation allowing users to
 * inject a TopLink Session built from a TopLink SessionBroker.
 *
 * SessionBrokers are used identically to any other TopLink Session.  DAO code
 * should never have to distinguish between Sessions which broker requests to
 * multiple databases and Sessions which manage requests to a single database.
 *
 * The only pertinent difference in the SessionBroker api involves the method
 * for obtaining a thread-safe "client" Session from the SessionBroker.
 * Instead of the typical acquireClientSession
 * method, this SessionFactory implementation uses the
 * acquireClientSessionBroker method.
 * If a SessionBroker aggregates non thread-safe DatabaseSessions,
 * the factory will throw UnsupportedOperationExceptions
 * if used to create managed or transaction-aware Sessions.
 *
 * @author James Clark
 * @author Juergen Hoeller
 * @since 1.2.6
 * @see org.springframework.orm.toplink.ServerSessionFactory
 * @see oracle.toplink.threetier.ServerSession#acquireClientSession()
 * @see oracle.toplink.sessionbroker.SessionBroker#acquireClientSessionBroker()
 */
public class SessionBrokerSessionFactory extends AbstractSessionFactory {

	private final SessionBroker sessionBroker;


	/**
	 * Create a new SessionBrokerSessionFactory for the given SessionBroker.
	 * @param broker the TopLink SessionBroker to fetch Sessions from
	 */
	public SessionBrokerSessionFactory(SessionBroker broker) {
		this.sessionBroker = broker;
	}


	/**
	 * Try to create a client Session; fall back to the master Session,
	 * if no client Session can be created (because of the session broker's
	 * configuration).
	 * @see #createClientSession()
	 * @see #getMasterSession()
	 */
	public Session createSession() throws TopLinkException {
		try {
			return createClientSession();
		}
		catch (ValidationException ex) {
			logger.debug(
					"Could not create TopLink client session for SessionBroker - returning SessionBroker itself", ex);
			return getMasterSession();
		}
	}

	/**
	 * Return this factory's SessionBroker as-is.
	 */
	protected Session getMasterSession() {
		return this.sessionBroker;
	}

	/**
	 * Create a plain client SessionBroker for this factory's ServerSession.
	 * @see oracle.toplink.sessionbroker.SessionBroker#acquireClientSessionBroker()
	 */
	protected Session createClientSession() throws TopLinkException {
		return this.sessionBroker.acquireClientSessionBroker();
	}


	/**
	 * Shut the pre-configured TopLink SessionBroker down.
	 * @see oracle.toplink.sessions.DatabaseSession#logout()
	 * @see oracle.toplink.sessions.Session#release()
	 */
	public void close() {
		this.sessionBroker.logout();
		this.sessionBroker.release();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy