diff options
Diffstat (limited to 'connectivity/source/drivers/jdbc/Object.cxx')
-rw-r--r-- | connectivity/source/drivers/jdbc/Object.cxx | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/connectivity/source/drivers/jdbc/Object.cxx b/connectivity/source/drivers/jdbc/Object.cxx deleted file mode 100644 index a78d8fe3de..0000000000 --- a/connectivity/source/drivers/jdbc/Object.cxx +++ /dev/null @@ -1,428 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_connectivity.hxx" - - -#include "java/lang/Class.hxx" -#include "connectivity/CommonTools.hxx" -#include <com/sun/star/uno/Exception.hpp> -#include "java/tools.hxx" -#include "java/sql/SQLException.hxx" -#include <osl/mutex.hxx> -#include <osl/thread.h> -#include <com/sun/star/uno/Sequence.hxx> -#include "java/LocalRef.hxx" -#include "resource/jdbc_log.hrc" -#include <rtl/logfile.hxx> -#include <comphelper/logging.hxx> - -#include <memory> - -using namespace connectivity; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; - - -// ----------------------------------------------------------------------------- -::rtl::Reference< jvmaccess::VirtualMachine > getJavaVM2(const ::rtl::Reference< jvmaccess::VirtualMachine >& _rVM = ::rtl::Reference< jvmaccess::VirtualMachine >(), - sal_Bool _bSet = sal_False) -{ - static ::rtl::Reference< jvmaccess::VirtualMachine > s_VM; - if ( _rVM.is() || _bSet ) - s_VM = _rVM; - return s_VM; -} -// ----------------------------------------------------------------------------- -::rtl::Reference< jvmaccess::VirtualMachine > java_lang_Object::getVM(const Reference<XMultiServiceFactory >& _rxFactory) -{ - ::rtl::Reference< jvmaccess::VirtualMachine > xVM = getJavaVM2(); - if ( !xVM.is() && _rxFactory.is() ) - xVM = getJavaVM2(::connectivity::getJavaVM(_rxFactory)); - - return xVM; -} -// ----------------------------------------------------------------------------- -SDBThreadAttach::SDBThreadAttach() - : m_aGuard(java_lang_Object::getVM()) - , pEnv(NULL) -{ - pEnv = m_aGuard.getEnvironment(); - OSL_ENSURE(pEnv,"Environment is nULL!"); -} -// ----------------------------------------------------------------------------- -SDBThreadAttach::~SDBThreadAttach() -{ -} -// ----------------------------------------------------------------------------- -oslInterlockedCount& getJavaVMRefCount() -{ - static oslInterlockedCount s_nRefCount = 0; - return s_nRefCount; -} -// ----------------------------------------------------------------------------- -void SDBThreadAttach::addRef() -{ - osl_incrementInterlockedCount(&getJavaVMRefCount()); -} -// ----------------------------------------------------------------------------- -void SDBThreadAttach::releaseRef() -{ - osl_decrementInterlockedCount(&getJavaVMRefCount()); - if ( getJavaVMRefCount() == 0 ) - { - getJavaVM2(::rtl::Reference< jvmaccess::VirtualMachine >(),sal_True); - } -} -// ----------------------------------------------------------------------------- -// static variables of the class -jclass java_lang_Object::theClass = 0; - -jclass java_lang_Object::getMyClass() const -{ - if( !theClass ) - theClass = findMyClass("java/lang/Object"); - return theClass; -} -// the actual constructor -java_lang_Object::java_lang_Object(const Reference<XMultiServiceFactory >& _rxFactory) - : m_xFactory(_rxFactory),object( 0 ) -{ - SDBThreadAttach::addRef(); -} - -// the protected-constructor for the derived classes -java_lang_Object::java_lang_Object( JNIEnv * pXEnv, jobject myObj ) - : object( NULL ) -{ - SDBThreadAttach::addRef(); - if( pXEnv && myObj ) - object = pXEnv->NewGlobalRef( myObj ); -} - -java_lang_Object::~java_lang_Object() -{ - if( object ) - { - SDBThreadAttach t; - clearObject(*t.pEnv); - } - SDBThreadAttach::releaseRef(); -} -void java_lang_Object::clearObject(JNIEnv& rEnv) -{ - if( object ) - { - rEnv.DeleteGlobalRef( object ); - object = NULL; - } -} - -void java_lang_Object::clearObject() -{ - if( object ) - { - SDBThreadAttach t; - clearObject(*t.pEnv); - } -} -// the protected-constructor for the derived classes -void java_lang_Object::saveRef( JNIEnv * pXEnv, jobject myObj ) -{ - OSL_ENSURE( myObj, "object in c++ -> Java Wrapper" ); - if( myObj ) - object = pXEnv->NewGlobalRef( myObj ); -} - - -::rtl::OUString java_lang_Object::toString() const -{ - static jmethodID mID(NULL); - return callStringMethod("toString",mID); -} - -// -------------------------------------------------------------------------------- -namespace -{ - bool lcl_translateJNIExceptionToUNOException( - JNIEnv* _pEnvironment, const Reference< XInterface >& _rxContext, SQLException& _out_rException ) - { - jthrowable jThrow = _pEnvironment ? _pEnvironment->ExceptionOccurred() : NULL; - if ( !jThrow ) - return false; - - _pEnvironment->ExceptionClear(); - // we have to clear the exception here because we want to handle it itself - - if ( _pEnvironment->IsInstanceOf( jThrow, java_sql_SQLException_BASE::st_getMyClass() ) ) - { - ::std::auto_ptr< java_sql_SQLException_BASE > pException( new java_sql_SQLException_BASE( _pEnvironment, jThrow ) ); - _out_rException = SQLException( pException->getMessage(), _rxContext, - pException->getSQLState(), pException->getErrorCode(), Any() ); - return true; - } - else if ( _pEnvironment->IsInstanceOf( jThrow, java_lang_Throwable::st_getMyClass() ) ) - { - ::std::auto_ptr< java_lang_Throwable > pThrow( new java_lang_Throwable( _pEnvironment, jThrow ) ); - ::rtl::OUString sMessage = pThrow->getMessage(); - if ( !sMessage.getLength() ) - sMessage = pThrow->getLocalizedMessage(); - if( !sMessage.getLength() ) - sMessage = pThrow->toString(); - _out_rException = SQLException( sMessage, _rxContext, ::rtl::OUString(), -1, Any() ); - return true; - } - else - _pEnvironment->DeleteLocalRef( jThrow ); - return false; - } -} - -// -------------------------------------------------------------------------------- -void java_lang_Object::ThrowLoggedSQLException( const ::comphelper::ResourceBasedEventLogger& _rLogger, JNIEnv* _pEnvironment, - const Reference< XInterface >& _rxContext ) -{ - SQLException aException; - if ( lcl_translateJNIExceptionToUNOException( _pEnvironment, _rxContext, aException ) ) - { - _rLogger.log( ::com::sun::star::logging::LogLevel::SEVERE, STR_LOG_THROWING_EXCEPTION, aException.Message, aException.SQLState, aException.ErrorCode ); - throw aException; - } -} - -// -------------------------------------------------------------------------------- -void java_lang_Object::ThrowSQLException( JNIEnv* _pEnvironment, const Reference< XInterface>& _rxContext ) -{ - SQLException aException; - if ( lcl_translateJNIExceptionToUNOException( _pEnvironment, _rxContext, aException ) ) - throw aException; -} -// ----------------------------------------------------------------------------- -void java_lang_Object::obtainMethodId(JNIEnv* _pEnv,const char* _pMethodName, const char* _pSignature,jmethodID& _inout_MethodID) const -{ - if ( !_inout_MethodID ) - { - _inout_MethodID = _pEnv->GetMethodID( getMyClass(), _pMethodName, _pSignature ); - OSL_ENSURE( _inout_MethodID, _pSignature ); - if ( !_inout_MethodID ) - throw SQLException(); - } // if ( !_inout_MethodID ) -} -// ----------------------------------------------------------------------------- -sal_Bool java_lang_Object::callBooleanMethod( const char* _pMethodName, jmethodID& _inout_MethodID ) const -{ - jboolean out( sal_False ); - - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callBooleanMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"()Z", _inout_MethodID); - // call method - out = t.pEnv->CallBooleanMethod( object, _inout_MethodID ); - ThrowSQLException( t.pEnv, NULL ); - - return out; -} -// ----------------------------------------------------------------------------- -sal_Bool java_lang_Object::callBooleanMethodWithIntArg( const char* _pMethodName, jmethodID& _inout_MethodID, sal_Int32 _nArgument ) const -{ - jboolean out( sal_False ); - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callBooleanMethodWithIntArg: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(I)Z", _inout_MethodID); - // call method - out = t.pEnv->CallBooleanMethod( object, _inout_MethodID, _nArgument ); - ThrowSQLException( t.pEnv, NULL ); - - return out; -} -// ------------------------------------------------------------------------- -jobject java_lang_Object::callResultSetMethod( JNIEnv& _rEnv,const char* _pMethodName, jmethodID& _inout_MethodID ) const -{ - // call method - jobject out = callObjectMethod(&_rEnv,_pMethodName,"()Ljava/sql/ResultSet;", _inout_MethodID); - return out; -} -// ------------------------------------------------------------------------- -sal_Int32 java_lang_Object::callIntMethod( const char* _pMethodName, jmethodID& _inout_MethodID,bool _bIgnoreException ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"()I", _inout_MethodID); - - // call method - jint out( t.pEnv->CallIntMethod( object, _inout_MethodID ) ); - if ( _bIgnoreException ) - isExceptionOccurred(t.pEnv,sal_True); - else - ThrowSQLException( t.pEnv, NULL ); - - return (sal_Int32)out; -} -// ------------------------------------------------------------------------- -sal_Int32 java_lang_Object::callIntMethodWithIntArg( const char* _pMethodName, jmethodID& _inout_MethodID,sal_Int32 _nArgument ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(I)I", _inout_MethodID); - // call method - jint out( t.pEnv->CallIntMethod( object, _inout_MethodID , _nArgument) ); - ThrowSQLException( t.pEnv, NULL ); - - return (sal_Int32)out; -} -// ------------------------------------------------------------------------- -void java_lang_Object::callVoidMethod( const char* _pMethodName, jmethodID& _inout_MethodID) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"()V", _inout_MethodID); - - // call method - t.pEnv->CallVoidMethod( object, _inout_MethodID ); - ThrowSQLException( t.pEnv, NULL ); -} -// ------------------------------------------------------------------------- -void java_lang_Object::callVoidMethodWithIntArg( const char* _pMethodName, jmethodID& _inout_MethodID, sal_Int32 _nArgument,bool _bIgnoreException ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(I)V", _inout_MethodID); - - // call method - t.pEnv->CallVoidMethod( object, _inout_MethodID,_nArgument ); - if ( _bIgnoreException ) - isExceptionOccurred(t.pEnv,sal_True); - else - ThrowSQLException( t.pEnv, NULL ); -} -// ------------------------------------------------------------------------- -void java_lang_Object::callVoidMethodWithBoolArg( const char* _pMethodName, jmethodID& _inout_MethodID, sal_Int32 _nArgument,bool _bIgnoreException ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(Z)V", _inout_MethodID); - // call method - t.pEnv->CallVoidMethod( object, _inout_MethodID,_nArgument ); - if ( _bIgnoreException ) - isExceptionOccurred(t.pEnv,sal_True); - else - ThrowSQLException( t.pEnv, NULL ); -} -// ----------------------------------------------------------------------------- -::rtl::OUString java_lang_Object::callStringMethod( const char* _pMethodName, jmethodID& _inout_MethodID ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callStringMethod: no Java enviroment anymore!" ); - - // call method - jstring out = (jstring)callObjectMethod(t.pEnv,_pMethodName,"()Ljava/lang/String;", _inout_MethodID); - return JavaString2String( t.pEnv, out ); -} -// ----------------------------------------------------------------------------- -jobject java_lang_Object::callObjectMethod( JNIEnv * _pEnv,const char* _pMethodName,const char* _pSignature, jmethodID& _inout_MethodID ) const -{ - // obtain method ID - obtainMethodId(_pEnv, _pMethodName,_pSignature, _inout_MethodID); - // call method - jobject out = _pEnv->CallObjectMethod( object, _inout_MethodID); - ThrowSQLException( _pEnv, NULL ); - return out; -} - -// ----------------------------------------------------------------------------- -jobject java_lang_Object::callObjectMethodWithIntArg( JNIEnv * _pEnv,const char* _pMethodName,const char* _pSignature, jmethodID& _inout_MethodID , sal_Int32 _nArgument) const -{ - obtainMethodId(_pEnv, _pMethodName,_pSignature, _inout_MethodID); - // call method - jobject out = _pEnv->CallObjectMethod( object, _inout_MethodID,_nArgument ); - ThrowSQLException( _pEnv, NULL ); - return out; -} -// ----------------------------------------------------------------------------- -::rtl::OUString java_lang_Object::callStringMethodWithIntArg( const char* _pMethodName, jmethodID& _inout_MethodID , sal_Int32 _nArgument) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callStringMethod: no Java enviroment anymore!" ); - jstring out = (jstring)callObjectMethodWithIntArg(t.pEnv,_pMethodName,"(I)Ljava/lang/String;",_inout_MethodID,_nArgument); - return JavaString2String( t.pEnv, out ); -} -// ------------------------------------------------------------------------- -void java_lang_Object::callVoidMethodWithStringArg( const char* _pMethodName, jmethodID& _inout_MethodID,const ::rtl::OUString& _nArgument ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethod: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(Ljava/lang/String;)V", _inout_MethodID); - - jdbc::LocalRef< jstring > str( t.env(),convertwchar_tToJavaString(t.pEnv,_nArgument)); - // call method - t.pEnv->CallVoidMethod( object, _inout_MethodID , str.get()); - ThrowSQLException( t.pEnv, NULL ); -} -// ------------------------------------------------------------------------- -sal_Int32 java_lang_Object::callIntMethodWithStringArg( const char* _pMethodName, jmethodID& _inout_MethodID,const ::rtl::OUString& _nArgument ) const -{ - SDBThreadAttach t; - OSL_ENSURE( t.pEnv, "java_lang_Object::callIntMethodWithStringArg: no Java enviroment anymore!" ); - obtainMethodId(t.pEnv, _pMethodName,"(Ljava/lang/String;)I", _inout_MethodID); - - //TODO: Check if the code below is needed - //jdbc::LocalRef< jstring > str( t.env(), convertwchar_tToJavaString( t.pEnv, sql ) ); - //{ - // jdbc::ContextClassLoaderScope ccl( t.env(), - // m_pConnection ? m_pConnection->getDriverClassLoader() : jdbc::GlobalRef< jobject >(), - // m_aLogger, - // *this - // ); - - jdbc::LocalRef< jstring > str( t.env(),convertwchar_tToJavaString(t.pEnv,_nArgument)); - // call method - jint out = t.pEnv->CallIntMethod( object, _inout_MethodID , str.get()); - ThrowSQLException( t.pEnv, NULL ); - return (sal_Int32)out; -} -// ----------------------------------------------------------------------------- -jclass java_lang_Object::findMyClass(const char* _pClassName) -{ - // the class must be fetched only once, therefore static - SDBThreadAttach t; - jclass tempClass = t.pEnv->FindClass(_pClassName); OSL_ENSURE(tempClass,"Java : FindClass nicht erfolgreich!"); - if(!tempClass) - { - t.pEnv->ExceptionDescribe(); - t.pEnv->ExceptionClear(); - } - jclass globClass = (jclass)t.pEnv->NewGlobalRef( tempClass ); - t.pEnv->DeleteLocalRef( tempClass ); - return globClass; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |