1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #pragma once 21 22 #include <java/GlobalRef.hxx> 23 24 namespace comphelper 25 { 26 class EventLogger; 27 } 28 29 30 namespace connectivity::jdbc 31 { 32 class ContextClassLoaderScope 33 { 34 public: 35 /** creates the instance. If isActive returns <FALSE/> afterwards, then an exception 36 happened in the JVM, which should be raised as UNO exception by the caller 37 38 @param environment 39 the current JNI environment 40 @param newClassLoader 41 the new class loader to set at the current thread 42 @param _rLoggerForErrors 43 the logger which should be passed to java_lang_object::ThrowLoggedSQLException in case 44 an error occurs 45 @param _rxErrorContext 46 the context which should be passed to java_lang_object::ThrowLoggedSQLException in case 47 an error occurs 48 49 */ 50 ContextClassLoaderScope( 51 JNIEnv& environment, 52 const GlobalRef< jobject >& newClassLoader, 53 const ::comphelper::EventLogger& _rLoggerForErrors, 54 const css::uno::Reference< css::uno::XInterface >& _rxErrorContext 55 ); 56 57 ~ContextClassLoaderScope(); 58 isActive() const59 bool isActive() const 60 { 61 return ( m_currentThread.is() ) 62 && ( m_setContextClassLoaderMethod != nullptr ); 63 } 64 65 private: 66 ContextClassLoaderScope(ContextClassLoaderScope const &) = delete; 67 ContextClassLoaderScope& operator =(ContextClassLoaderScope const &) = delete; 68 69 JNIEnv& m_environment; 70 LocalRef< jobject > m_currentThread; 71 LocalRef< jobject > m_oldContextClassLoader; 72 jmethodID m_setContextClassLoaderMethod; 73 }; 74 75 76 } // namespace connectivity::jdbc 77 78 79 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 80