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

org.eclipse.persistence.platform.server.was.WebSpherePlatform Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
/*
 * Copyright (c) 1998, 2018 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 from Oracle TopLink
//     06/30/2010-2.1.1 Michael O'Brien
//       - 316513: Enable JMX MBean functionality for JBoss, Glassfish and WebSphere in addition to WebLogic
//       Move JMX MBean generic registration code up from specific platforms
//       see http://wiki.eclipse.org/EclipseLink/DesignDocs/316513
//     12/18/2014-2.6 Rick Curtis
//       455690: Move JNDIConnector lookup type to ServerPlatform.
package org.eclipse.persistence.platform.server.was;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;

import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.platform.server.JMXServerPlatformBase;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.JNDIConnector;
import org.eclipse.persistence.transaction.was.WebSphereTransactionController;

/**
 * PUBLIC:
 *
 * This is the concrete subclass responsible for representing WebSphere-specific server behavior.
 *
 * This platform has:
 * 
    *
  • WebSphereTransactionController (JTA integration). *
  • DataSource connection unwrapping (Oracle JDBC API support) *
*/ public class WebSpherePlatform extends JMXServerPlatformBase { /** * Cached WAS connection class used to reflectively check connections and unwrap them. */ protected Class websphereConnectionClass; /** * Cached WAS util class used to reflectively check connections and unwrap them. */ protected Class websphereUtilClass; /** * Cached WAS util method used for unwrapping connections. */ protected Method vendorConnectionMethod; /** * INTERNAL: * Default Constructor: All behavior for the default constructor is inherited */ public WebSpherePlatform(DatabaseSession newDatabaseSession) { super(newDatabaseSession); this.disableRuntimeServices(); } /** * INTERNAL: getExternalTransactionControllerClass(): Answer the class of * external transaction controller to use for WebSphere. This is * read-only. * * @return Class externalTransactionControllerClass * * @see org.eclipse.persistence.transaction.JTATransactionController * @see org.eclipse.persistence.platform.server.ServerPlatformBase#isJTAEnabled() * @see org.eclipse.persistence.platform.server.ServerPlatformBase#disableJTA() * @see org.eclipse.persistence.platform.server.ServerPlatformBase#initializeExternalTransactionController() */ public Class getExternalTransactionControllerClass() { if (externalTransactionControllerClass == null){ externalTransactionControllerClass = WebSphereTransactionController.class; } return externalTransactionControllerClass; } /** * Return the class (interface) for the WebSphere JDBC connection wrapper. */ protected Class getWebsphereUtilClass() { if (this.websphereUtilClass == null) { try { this.websphereUtilClass = (Class) getDatabaseSession().getPlatform().convertObject("com.ibm.ws.rsadapter.jdbc.WSJdbcUtil", Class.class); } catch (Throwable exception) { getDatabaseSession().getSessionLog().logThrowable(SessionLog.WARNING, SessionLog.SERVER, exception); this.websphereUtilClass = void.class; } } return this.websphereUtilClass; } /** * Return the class (interface) for the WebSphere JDBC connection wrapper. */ protected Class getWebsphereConnectionClass() { if (this.websphereConnectionClass == null) { try { this.websphereConnectionClass = (Class) getDatabaseSession().getPlatform().convertObject("com.ibm.ws.rsadapter.jdbc.WSJdbcConnection", Class.class); } catch (Throwable exception) { getDatabaseSession().getSessionLog().logThrowable(SessionLog.WARNING, SessionLog.SERVER, exception); this.websphereConnectionClass = void.class; } } return this.websphereConnectionClass; } /** * Return the method for the WebSphere JDBC connection wrapper vendorConnection. */ protected Method getVendorConnectionMethod() { if ((this.vendorConnectionMethod == null) && (!getWebsphereUtilClass().equals(void.class))) { try { Class args[] = new Class[1]; args[0] = getWebsphereConnectionClass(); this.vendorConnectionMethod = PrivilegedAccessHelper.getDeclaredMethod(getWebsphereUtilClass(), "getNativeConnection", args); } catch (NoSuchMethodException exception) { getDatabaseSession().getSessionLog().logThrowable(SessionLog.WARNING, SessionLog.SERVER, exception); } } return this.vendorConnectionMethod; } /** * Unwraps the WebSphere JDBC connection wrapping using the WebLogic API reflectively. */ @Override public Connection unwrapConnection(Connection connection) { if (getWebsphereConnectionClass().isInstance(connection) && getVendorConnectionMethod() != null) { try { return (Connection) PrivilegedAccessHelper.invokeMethod(getVendorConnectionMethod(), null, new Object[]{connection}); } catch (IllegalAccessException exception) { getDatabaseSession().getSessionLog().logThrowable(SessionLog.WARNING, SessionLog.SERVER, exception); } catch (InvocationTargetException exception) { getDatabaseSession().getSessionLog().logThrowable(SessionLog.WARNING, SessionLog.SERVER, exception); } } return super.unwrapConnection(connection); } @Override public int getJNDIConnectorLookupType() { return JNDIConnector.STRING_LOOKUP; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy