/******************************************************************************* | |
* Copyright (c) 1998, 2013 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.testing.tests.distributedservers; | |
import java.rmi.registry.Registry; | |
import java.util.Iterator; | |
import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor; | |
import org.eclipse.persistence.internal.sessions.AbstractSession; | |
import org.eclipse.persistence.sessions.broker.SessionBroker; | |
import org.eclipse.persistence.sessions.DatabaseSession; | |
import org.eclipse.persistence.sessions.Session; | |
/** | |
* This class is used in the DistributedSession test to test the | |
* Cache Synchronisation feature. This object places a RemoteDispatcher into | |
* an RMI registry and then starts a session connection. | |
*/ | |
public abstract class DistributedServer { | |
/** This attribute holds this threads session */ | |
public DatabaseSession session; | |
/** This attribute holds the binding name for this server */ | |
public String serverName; | |
/** | |
* DistributedServer constructor comment. | |
*/ | |
public DistributedServer(Session testSssion) { | |
super(); | |
if (testSssion.isSessionBroker()) { | |
this.session = new SessionBroker(); | |
Iterator enumtr = ((SessionBroker)testSssion).getSessionsByName().keySet().iterator(); | |
while (enumtr.hasNext()) { | |
String name = (String)enumtr.next(); | |
DatabaseSession newMemberSession = ((SessionBroker)testSssion).getSessionForName(name).getProject().createDatabaseSession(); | |
((SessionBroker)this.session).registerSession(name, newMemberSession); | |
} | |
} else { | |
this.session = testSssion.getProject().createDatabaseSession(); | |
} | |
this.session.setSessionLog(testSssion.getSessionLog()); | |
this.session.login(); | |
if (testSssion.isSessionBroker()) { | |
Iterator enumtr = ((SessionBroker)testSssion).getSessionsByName().keySet().iterator(); | |
while (enumtr.hasNext()) { | |
String name = (String)enumtr.next(); | |
Session oldMemberSession = ((SessionBroker)testSssion).getSessionForName(name); | |
Session newMemberSession = ((SessionBroker)this.session).getSessionForName(name); | |
((DatabaseAccessor)((AbstractSession)newMemberSession).getAccessor()).closeConnection(); | |
((AbstractSession)newMemberSession).setAccessor(((AbstractSession)oldMemberSession).getAccessor()); | |
} | |
} else { | |
((DatabaseAccessor)((AbstractSession)this.session).getAccessor()).closeConnection(); | |
((AbstractSession)this.session).setAccessor(((AbstractSession)testSssion).getAccessor()); | |
} | |
} | |
/** | |
* Returns the session from the distributed server | |
* @return org.eclipse.persistence.sessions.DatabaseSession the Session from a particular distributed session | |
*/ | |
public org.eclipse.persistence.sessions.DatabaseSession getDistributedSession() { | |
return session; | |
} | |
/** | |
* This method returns the globally unique name of a particular server | |
* @return java.lang.String the name of the server | |
*/ | |
public java.lang.String getServerName() { | |
return serverName; | |
} | |
public boolean isObjectValid(Object object) { | |
return session.getIdentityMapAccessor().isValid(object); | |
} | |
/** | |
* This method starts the server and makes the dispatcher available | |
* Creation date: (7/21/00 9:58:37 AM) | |
*/ | |
public abstract void run(); | |
public abstract void stopServer(); | |
/** | |
* INTERNAL: | |
* This method is used to set the globally Unique server name for the Distributed Server | |
* @param newServerName java.lang.String | |
*/ | |
public void setServerName(java.lang.String newServerName) { | |
serverName = newServerName; | |
} | |
/** | |
* Removes this current server from the registry | |
* Creation date: (7/21/00 10:53:37 AM) | |
* @param registry java.rmi.registry.Registry | |
*/ | |
public void unbind(Registry registry) { | |
try { | |
registry.unbind(getServerName()); | |
} catch (Exception exception) { | |
} | |
} | |
} |