Files
libreoffice/include/jvmaccess/virtualmachine.hxx

152 lines
5.6 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2012-06-27 16:08:23 +01:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
2002-12-06 10:35:41 +00:00
#ifndef INCLUDED_JVMACCESS_VIRTUALMACHINE_HXX
2002-12-06 10:35:41 +00:00
#define INCLUDED_JVMACCESS_VIRTUALMACHINE_HXX
#include <jvmaccess/jvmaccessdllapi.h>
#include <rtl/ref.hxx>
#include <salhelper/simplereferenceobject.hxx>
2002-12-06 10:35:41 +00:00
#include "jni.h"
namespace jvmaccess {
/** An encapsulating wrapper around a Java virtual machine.
*/
2011-12-24 09:20:23 +01:00
class JVMACCESS_DLLPUBLIC VirtualMachine: public salhelper::SimpleReferenceObject
2002-12-06 10:35:41 +00:00
{
public:
/** A helper to attach a thread to a Java virtual machine.
@descr
Upon construction of a guard the current thread is attached to the
virtual machine, and upon destruction of the guard the thread is
detached again. For any one thread, multiple instances of this class
may be used in a stack-like fashion (care is taken to only really
detach the thread from the virtual machine upon destruction of the guard
at the bottom of the stack).
*/
2011-12-24 09:20:23 +01:00
class JVMACCESS_DLLPUBLIC AttachGuard
2002-12-06 10:35:41 +00:00
{
public:
/** An exception indicating failure to create an AttachGuard.
*/
2011-12-24 09:20:23 +01:00
class JVMACCESS_DLLPUBLIC CreationException
2002-12-06 10:35:41 +00:00
{
public:
CreationException();
CreationException(CreationException const &);
virtual ~CreationException();
CreationException & operator =(CreationException const &);
};
/** Attach the current thread to a virtual machine.
@param rMachine
The virtual machine to attach to. Must not be a null reference.
2002-12-06 10:35:41 +00:00
@exception CreationException
Thrown in case attaching fails (due to a JNI problem).
*/
explicit AttachGuard(rtl::Reference< VirtualMachine > const & rMachine);
/** Detach the current thread from the virtual machine again.
*/
~AttachGuard();
/** Get a JNI environment pointer for the current thread.
@return
A valid JNI environment pointer. Will never be null.
*/
inline JNIEnv * getEnvironment() const { return m_pEnvironment; }
private:
AttachGuard(AttachGuard &) SAL_DELETED_FUNCTION;
void operator =(AttachGuard) SAL_DELETED_FUNCTION;
2002-12-06 10:35:41 +00:00
rtl::Reference< VirtualMachine > m_xMachine;
JNIEnv * m_pEnvironment;
bool m_bDetach;
};
/** Create a wrapper around a Java virtual machine.
@param pVm
A JNI pointer to virtual machine. Must not be null.
@param nVersion
The JNI version of the virtual machine pointed to by pVm. Must be at
least JNI_VERSION_1_2. This parameter should be of type jint, not int,
but at least on some platforms the definition of jint changed from
JDK 1.3 (long) to JDK 1.4 (int), so that the mangled C++ name of the
constructor would depend on the JDK version used at compile time.
2002-12-06 10:35:41 +00:00
@param bDestroy
Whether to destroy the virtual machine when destructing the wrapper
(i.e., whether the wrapper owns the virtual machine pointed to by pVm).
@param pMainThreadEnv
A valid JNI environment pointer for the current thread; must not be
null. The current thread must be "initially attached" to the virtual
machine while this constructor is being called (i.e., it must be the
thread that has called JNI_CreateJavaVM in case the virtual machine has
been started via the JNI Invocation API, and it must not already have
called DetachCurrentThread; or it must be executing native code called
CWS-TOOLING: integrate CWS dbaperf1 2009-04-02 09:12:25 +0200 oj r270372 : CWS-TOOLING: rebase CWS dbaperf1 to trunk@270033 (milestone: DEV300:m45) 2009-03-17 10:20:34 +0100 oj r269577 : add parameter 2009-03-17 10:20:05 +0100 oj r269576 : add parameter 2009-03-12 12:32:24 +0100 oj r269387 : add missing ++ 2009-03-11 12:53:35 +0100 oj r269315 : compile error 2009-03-06 08:52:11 +0100 oj r268968 : #i99264# remove duplicate code 2009-03-06 08:20:08 +0100 oj r268966 : add missingheader 2009-03-06 08:17:41 +0100 oj r268965 : add header 2009-03-06 08:15:07 +0100 oj r268964 : #i99708# remove duplicate code 2009-03-06 07:24:11 +0100 oj r268963 : #i99708# remove duplicate code 2009-03-06 07:22:24 +0100 oj r268962 : #i99708# use tenary operator 2009-03-06 07:19:21 +0100 oj r268961 : remove unused rtl_logs 2009-03-06 07:15:55 +0100 oj r268960 : #i99708# extract getLength from for loop 2009-03-06 07:15:35 +0100 oj r268959 : #i99708# extract getLength from for loop 2009-03-06 07:14:57 +0100 oj r268958 : remove unused rtl_logs 2009-03-06 07:13:01 +0100 oj r268957 : insert DBG_ helper 2009-03-06 07:12:17 +0100 oj r268956 : remove unused rtl_logs 2009-03-06 07:10:26 +0100 oj r268955 : remove unused rtl_logs 2009-03-06 07:04:51 +0100 oj r268954 : #i99708# use tenary operator 2009-03-05 12:04:46 +0100 oj r268895 : comment RTL_LOG out 2009-03-05 09:05:07 +0100 oj r268874 : add rtl logfile 2009-03-04 14:21:18 +0100 oj r268828 : #i99708# make static inplace and some method calls in for loop removed 2009-03-04 14:20:34 +0100 oj r268827 : #i99708# impl double check pattern for getInfohelper 2009-03-02 09:31:42 +0100 oj r268636 : add rtl logfile 2009-03-02 08:18:37 +0100 oj r268633 : add rtl logfile 2009-02-27 11:22:16 +0100 oj r268570 : #i99709# change algorithm for marking objects 2009-02-27 11:17:04 +0100 oj r268568 : #i99708# some improvements to load forms, controls faster and replacement of size() call with !empty() which is much faster 2009-02-24 10:09:35 +0100 sb r268383 : #i99290# no longer care to set a sensible context class loader for native threads attached to the VM 2009-02-23 13:44:04 +0100 oj r268354 : #i76606# seekrow changes 2009-02-23 12:27:30 +0100 oj r268349 : deleted 2009-02-20 15:14:23 +0100 oj r268325 : #i76606# some code changes 2009-02-19 14:15:25 +0100 oj r268284 : #i76606# use of simple prep stmt instead of full blown rowset, when source and dest connection are the same use insert into ... ( select ... ) 2009-02-19 11:27:55 +0100 oj r268265 : #i76606# insert some RTL_LOG and setObject impl 2009-02-18 14:45:37 +0100 oj r268222 : #i99363# insert RTL_LOG 2009-02-18 14:45:18 +0100 oj r268221 : #i99363# insert RTL_LOG 2009-02-18 11:14:54 +0100 oj r268207 : #i99363# call some impl_ methods to avoid duplicate cechCache calls 2009-02-18 11:10:47 +0100 oj r268206 : #i99363# make isCount inline 2009-02-18 10:33:22 +0100 oj r268203 : #i99363# use bookmarkable if available and inserted some RTL_LOG 2009-02-18 10:32:57 +0100 oj r268202 : #i99363# use bookmarkable if available and inserted some RTL_LOG 2009-02-17 07:29:05 +0100 oj r267843 : #i96897# remove some dll public 2009-02-16 15:01:04 +0100 oj r267816 : #i96897# remove some dll public 2009-02-16 14:25:53 +0100 oj r267810 : #i99264# remove duplicate code 2009-02-16 14:25:33 +0100 oj r267809 : #i99264# remove duplicate code 2009-02-16 14:24:59 +0100 oj r267808 : #i99264# remove duplicate code 2009-02-13 10:56:17 +0100 oj r267703 : #i99191# comment the contextclassloader 2009-02-13 10:32:40 +0100 oj r267700 : reduce call to resultset meta data 2009-02-13 10:27:31 +0100 oj r267699 : reduce call to resultset meta data 2009-02-13 10:27:08 +0100 oj r267698 : reduce call to resultset meta data
2009-04-23 10:42:05 +00:00
from a "primordial" virtual machine). This environment pointer was
formerly used to obtain a reference to the thread's current context
class loader (java.lang.Thread.getCurrentClassLoader; if later a native
thread was attached to the virtual machine, that thread's context class
loader would be null, so the AttachGuard first of all set it to the
saved value; this feature has been removed again for performance reasons
and because the default context class loader is often not useful, so
that code relying on a context class loader has to set one explicitly,
anyway). This parameter is currently unused (but may be used again in
the future).
2002-12-06 10:35:41 +00:00
*/
VirtualMachine(JavaVM * pVm, int nVersion, bool bDestroy,
2002-12-06 10:35:41 +00:00
JNIEnv * pMainThreadEnv);
private:
VirtualMachine(VirtualMachine &) SAL_DELETED_FUNCTION;
void operator =(VirtualMachine) SAL_DELETED_FUNCTION;
2002-12-06 10:35:41 +00:00
virtual ~VirtualMachine();
JNIEnv * attachThread(bool * pAttached) const;
void detachThread() const;
JavaVM * m_pVm;
jint m_nVersion;
bool m_bDestroy;
friend class AttachGuard; // to access attachThread, detachThread
};
}
#endif // INCLUDED_JVMACCESS_VIRTUALMACHINE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */