1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
19 #ifndef __com_sun_star_java_XJavaVM_idl__
20 #define __com_sun_star_java_XJavaVM_idl__
22 #include
<com
/sun
/star
/uno
/XInterface.idl
>
25 module com
{ module sun
{ module star
{ module java
{
27 /** must be implemented by the user of the XJavaVM.
30 A UNO interface seems to be at the wrong abstraction level for this
31 functionality (also, the C++ classes <code>jvmaccess::VirtualMachine</code>
32 and <code>jvmaccess::UnoVirtualMachine</code> used by
33 com::sun::star::java::XJavaVM::getJavaVM() are not
34 part of the public C++ UNO runtime API). This should probably be replaced
35 by an appropriate C/C++ API.
37 published
interface XJavaVM
: com
::sun
::star
::uno
::XInterface
39 /** returns the address of the Java Virtual Machine.
41 <p>If the VM is not already instantiated, it will be now.</p>
43 <p>If the <code>processID</code> is a normal 16-byte ID, the returned
44 `any` contains a JNI <code>JavaVM</code> pointer as a
45 `long` or `hyper` integer (depending on the
46 platform). If the <code>processID</code> does not match the current
47 process, or if the VM cannot be instantiated for whatever reason, a
48 `VOID` `any` is returned.</p>
50 <p>If the <code>processID</code> has an additional 17th byte of
51 value <code>0</code>, the returned `any` contains a
52 non–reference-counted pointer to a (reference-counted) instance of
53 the C++ <code>jvmaccess::VirtualMachine</code> class, always represented
54 as a `hyper` integer. The pointer is guaranteed to be valid
55 as long as the reference to this
56 com::sun::star::java::XJavaVM is valid (but the
57 pointer should be converted into a reference-counted reference as soon
58 as possible). Again, if the first 16 bytes of the
59 <code>processID</code> do not match the current process, or if the VM
60 cannot be instantiated for whatever reason, a `VOID` `any`
63 <p>If the <code>processID</code> has an additional 17th byte of
64 value <code>1</code>, the returned `any` contains a
65 non–reference-counted pointer to a (reference-counted) instance of
66 the C++ <code>jvmaccess::UnoVirtualMachine</code> class, always
67 represented as a `hyper` integer. The pointer is guaranteed
68 to be valid as long as the reference to this
69 com::sun::star::java::XJavaVM is valid. Again, if
70 the first 16 bytes of the <code>processID</code> do not match the
71 current process, or if the VM cannot be instantiated for whatever
72 reason, a `VOID` `any` is returned.</p>
74 <p>The first form (returning a JNI <code>JavaVM</code> pointer) is
75 mainly for backwards compatibility, new code should use the second form
76 (returning a pointer to a <code>jvmaccess::VirtualMachine</code>) if it
77 does not want to use the Java UNO environment, and it should use the
78 third form (returning a pointer to a
79 <code>jvmaccess::UnoVirtualMachine</code>) if it wants to use the Java
80 UNO environment. For example, one advantage of using
81 <code>jvmaccess::VirtualMachine</code> instead of the raw
82 <code>JavaVM</code> pointer is that whenever you attach a native thread
83 to the Java virtual machine, that thread's context
84 <code>ClassLoader</code> (see
85 <code>java.lang.Thread.getContextClassLoader</code>) will automatically
86 be set to a meaningful value.</p>
89 The process ID of the caller's process, possibly extended by a 17th byte
90 of value <code>0</code> or <code>1</code>.
93 On success, the `any` contains a pointer represented as
94 `long` or `hyper`, otherwise the `any`
97 any getJavaVM
( [in] sequence
<byte> processID
);
99 /** returns `TRUE` if the VM is started successfully, otherwise `FALSE`.
101 boolean isVMStarted
();
103 /** Returns `TRUE` if the VM is enabled.
105 <p>It is only possible to get the VM, if this method return 0. </p>
107 boolean isVMEnabled
();
116 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */