/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.internal.sequencing; import java.util.Hashtable; import org.eclipse.persistence.internal.sequencing.Sequencing; import org.eclipse.persistence.internal.sessions.remote.RemoteConnection; import org.eclipse.persistence.internal.sessions.remote.RemoteFunctionCall; import org.eclipse.persistence.internal.sessions.remote.SequencingFunctionCall; /* * RemoteConnectionSequencing class provides Sequencing through RemoteConnection. * It caches some info and communicates with Sequencing object * on its master session by sending SequencingFunctionCall objects * through the RemoteConnection. * Note that individual SequencingFunctionCalls * are implemented as static inner classes in SequenceFunctionCall class: * like SequencingFunctionCall.DoesExist. */ class RemoteConnectionSequencing implements Sequencing { protected RemoteConnection remoteConnection; protected Hashtable classToShouldAcquireValueAfterInsert; protected int whenShouldAcquireValueForAll; public static boolean masterSequencingExists(RemoteConnection con) { return ((Boolean)con.getSequenceNumberNamed(new SequencingFunctionCall.DoesExist())).booleanValue(); } public RemoteConnectionSequencing(RemoteConnection remoteConnection) { this.remoteConnection = remoteConnection; whenShouldAcquireValueForAll = ((Integer)processFunctionCall(new SequencingFunctionCall.WhenShouldAcquireValueForAll())).intValue(); if (whenShouldAcquireValueForAll == UNDEFINED) { classToShouldAcquireValueAfterInsert = new Hashtable(20); } } public int whenShouldAcquireValueForAll() { return whenShouldAcquireValueForAll; } public Object getNextValue(Class cls) { return processFunctionCall(new SequencingFunctionCall.GetNextValue(cls)); } protected Object processFunctionCall(RemoteFunctionCall call) { return remoteConnection.getSequenceNumberNamed(call); } }