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

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

/*
 * Copyright (c) 1998, 2024 Oracle and/or its affiliates. All rights reserved.
 * Copyright (c) 1998, 2024 IBM Corporation. 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:
//     tware - added for EclipseLink 2.0 release
//     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
//     05/10/2014 - 428675 - 2.5.2 - Rick Curtis - Add support for WebSphere logger.
//     04/01/2015 Will Dazey
//       - 463726: Added DatabaseSession null check
//     11/05/2015 Dalia Abo Sheasha
//       - 480787: Wrap several privileged method calls with a doPrivileged block
package org.eclipse.persistence.platform.server.was;

import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.platform.server.JMXEnabledPlatform;
import org.eclipse.persistence.services.websphere.MBeanWebSphereRuntimeServices;
import org.eclipse.persistence.sessions.DatabaseSession;

import java.lang.reflect.Constructor;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;

/**
 * PUBLIC:
 * 

* This is the concrete subclass responsible for representing WebSphere 7 -specific server behavior. *

* This platform has: - No JMX MBean runtime services * */ public class WebSphere_7_Platform extends WebSphere_6_1_Platform implements JMXEnabledPlatform { public static final String SERVER_LOG_CLASS = "com.ibm.ws.jpa.container.eclipselink.logging.EclipseLinkLogger"; /* * The following constants and attributes are used to determine the module and application name * to satisfy the requirements for 248746 where we provide an identifier pair for JMX sessions. * Each application can have several modules. 1) Application name - the persistence unit * associated with the session (a 1-1 relationship) 2) Module name - the ejb or war jar name * (there is a 1-many relationship for module:session(s)) */ static { /* * Override by subclass: Search String in application server ClassLoader for the * application:persistence_unit name */ APP_SERVER_CLASSLOADER_APPLICATION_PU_SEARCH_STRING_PREFIX = "[app:"; APP_SERVER_CLASSLOADER_APPLICATION_PU_SEARCH_STRING_POSTFIX = "]"; /* Override by subclass: Search String in application server session for ejb modules */ APP_SERVER_CLASSLOADER_MODULE_EJB_SEARCH_STRING_PREFIX = ".jar!/"; /* Override by subclass: Search String in application server session for war modules */ APP_SERVER_CLASSLOADER_MODULE_WAR_SEARCH_STRING_PREFIX = ".war!/"; APP_SERVER_CLASSLOADER_MODULE_EJB_WAR_SEARCH_STRING_POSTFIX = "]"; // Change the default value of property "eclipselink.security.usedoprivileged". PrivilegedAccessHelper.setDefaultUseDoPrivilegedValue(true); } /** * INTERNAL: Default Constructor: All behavior for the default constructor is inherited */ public WebSphere_7_Platform(DatabaseSession newDatabaseSession) { super(newDatabaseSession); this.enableRuntimeServices(); // Create the JMX MBean specific to this platform for later registration this.prepareServerSpecificServicesMBean(); } @Override public SessionLog getServerLog() { return createSessionLog(); } protected SessionLog createSessionLog() { SessionLog log = null; try { if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) { log = AccessController.doPrivileged(new PrivilegedExceptionAction<>() { @Override public SessionLog run() throws Exception { Class cls = PrivilegedAccessHelper.getClassForName(SERVER_LOG_CLASS); Constructor ctor = PrivilegedAccessHelper.getConstructorFor(cls, null, false); return ctor.newInstance(); } }); } else { Class cls = PrivilegedAccessHelper.getClassForName(SERVER_LOG_CLASS); Constructor ctor = PrivilegedAccessHelper.getConstructorFor(cls, null, false); log = ctor.newInstance(); } } catch (Exception e) { // Blindly catch exception here as there is no recourse for any specific exception. If // we can't load the WAS logger just fall back to using the default SessionLog. log = super.getServerLog(); log.log(SessionLog.FINEST, "Unable to create an instance of " + SERVER_LOG_CLASS + ". Falling back to using default logger.", e); } return log; } @Override public boolean isRuntimeServicesEnabledDefault() { return true; } /** * INTERNAL: prepareServerSpecificServicesMBean(): Server specific implementation of the * creation and deployment of the JMX MBean to provide runtime services for the databaseSession. *

* Default is to do nothing. Implementing platform classes must override this function and * supply the server specific MBean instance for later registration by calling it in the * constructor. * * @see #isRuntimeServicesEnabled() * @see #disableRuntimeServices() * @see #registerMBean() */ @Override public void prepareServerSpecificServicesMBean() { // No check for an existing cached MBean - we will replace it if it exists if (getDatabaseSession() != null && shouldRegisterRuntimeBean) { this.setRuntimeServicesMBean(new MBeanWebSphereRuntimeServices(getDatabaseSession())); } } /** * INTERNAL: serverSpecificRegisterMBean(): Server specific implementation of the creation and * deployment of the JMX MBean to provide runtime services for my databaseSession. * * @see #isRuntimeServicesEnabled() * @see #disableRuntimeServices() * @see #registerMBean() */ @Override public void serverSpecificRegisterMBean() { super.serverSpecificRegisterMBean(); // get and cache module and application name during registration initializeApplicationNameAndModuleName(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy