blob: 2f84c25b7f440fe5a7b78fe70e3b0f1ac01e7137 [file] [log] [blame]
/*
* Copyright (c) 2013, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation
package org.eclipse.persistence.testing.tests.distributedservers.rcm.jgroups;
import org.eclipse.persistence.exceptions.RemoteCommandManagerException;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.sessions.coordination.RemoteCommandManager;
import org.eclipse.persistence.sessions.coordination.TransportManager;
import org.eclipse.persistence.sessions.coordination.jms.JMSTopicTransportManager;
import org.eclipse.persistence.testing.tests.distributedservers.rcm.broadcast.BroadcastSetupHelper;
public class JGroupsSetupHelper extends BroadcastSetupHelper {
protected static JGroupsSetupHelper helper;
public static JGroupsSetupHelper getHelper() {
if (helper == null) {
helper = new JGroupsSetupHelper();
}
return helper;
}
protected JGroupsSetupHelper() {
super();
}
// If removeConnectionOnError is set,
// local (listening) connection is removed in JMS case if subscriber.receive() throws exception;
// however in Oc4jJGroups case the only (local and external) connection is not removed
// unless message sending fails.
@Override
public boolean isLocalConnectionRemovedOnListeningError() {
return false;
}
// Returns errorCode of RemoteCommandManagerException thrown in case
// creation of localConnection has failed.
@Override
public int getRcmExceptionErrorCodeOnFailureToCreateLocalConnection() {
return RemoteCommandManagerException.ERROR_CREATING_LOCAL_JMS_CONNECTION;
}
// JMSTopicTransportManager has separate connection for sending (external) and receiving (local) messages.
// Oc4jJGroups uses a single connection for both sending and receiving messages.
@Override
public boolean isLocalConnectionAlsoExternalConnection() {
return true;
}
@Override
protected void createTransportManager(RemoteCommandManager rcm) {
try {
TransportManager transport = (TransportManager)Class.forName("org.eclipse.persistence.sessions.coordination.jgroups.JGroupsTransportManager").getConstructor().newInstance();
rcm.setTransportManager(transport);
} catch (Exception exception) {
throw new RuntimeException(exception);
}
}
// Sends an arbitrary message to speed up shut down of listening threads.
@Override
protected void sendMessageToStopListenerThreads() throws Exception {
}
@Override
protected void createExternalConnection(AbstractSession session) {
((JMSTopicTransportManager)session.getCommandManager().getTransportManager()).createExternalConnection();
}
@Override
protected void internalDestroyFactory() throws Exception {
}
@Override
protected void internalStartFactory() throws Exception {
}
@Override
protected void internalStopFactory() throws Exception {
}
@Override
protected Object[] internalCreateFactory() throws Exception {
return null;
}
@Override
public void createFactory() throws Exception {
if (!isCreated) {
isCreated = true;
isStarted = false;
}
}
}