This patch completes java.lang.management to the
level of Java 1.6 by adding support for obtaining the
load average via the OS bean.

Changelog:

2006-12-26  Andrew John Hughes  <[EMAIL PROTECTED]>

        * NEWS: Mention 1.6 support for java.lang.management
        * configure.ac: Check for getloadavg.
        * examples/gnu/classpath/examples/management/TestOS.java:
        Print system load average.
        * gnu/java/lang/management/OperatingSystemMXBeanImpl.java:
        (getSystemLoadAverage()): Implemented.
        * include/Makefile.am: Add new header.
        * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h:
        Regenerated.
        * include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h:
        Generated.
        * java/lang/management/OperatingSystemMXBean.java:
        (getSystemLoadAverage()): Implemented.
        * native/jni/java-lang/Makefile.am: Add new native code.
        * 
native/jni/java-lang/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c:
        New file.
        * 
vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java:
        Likewise.

-- 
Andrew :-)

Escape the Java Trap with GNU Classpath!
http://www.gnu.org/philosophy/java-trap.html
public class gcj extends Freedom implements Java { ... }
Index: NEWS
===================================================================
RCS file: /cvsroot/classpath/classpath/NEWS,v
retrieving revision 1.176
diff -u -3 -p -u -r1.176 NEWS
--- NEWS        26 Dec 2006 00:03:58 -0000      1.176
+++ NEWS        26 Dec 2006 02:29:11 -0000
@@ -5,6 +5,9 @@ New in release 0.94 (UNRELEASED)
 * The setReadTimeout and getReadTimeout methods have been added to
   java.net.URLConnection.  They are now fully implemented for http URLs.  
 
+* The java.lang.management implementation now includes the new features
+  added in 1.6
+
 Runtime interface changes:
 
 * gnu.java.lang.management.VMThreadMXBeanImpl has gained three new
Index: configure.ac
===================================================================
RCS file: /cvsroot/classpath/classpath/configure.ac,v
retrieving revision 1.192
diff -u -3 -p -u -r1.192 configure.ac
--- configure.ac        10 Dec 2006 20:25:40 -0000      1.192
+++ configure.ac        26 Dec 2006 02:29:12 -0000
@@ -377,7 +377,7 @@ if test "x${COMPILE_JNI}" = xyes; then
                  lstat readlink \
                  inet_aton inet_addr inet_pton \
                  getifaddrs kqueue kevent epoll_create \
-                  readdir_r ])
+                  readdir_r getloadavg])
 
   LIBMAGIC=
   AC_CHECK_LIB(magic, magic_open, LIBMAGIC=-lmagic)
Index: examples/gnu/classpath/examples/management/TestOS.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/examples/gnu/classpath/examples/management/TestOS.java,v
retrieving revision 1.1
diff -u -3 -p -u -r1.1 TestOS.java
--- examples/gnu/classpath/examples/management/TestOS.java      1 Jul 2006 
13:47:22 -0000       1.1
+++ examples/gnu/classpath/examples/management/TestOS.java      26 Dec 2006 
02:29:12 -0000
@@ -33,5 +33,6 @@ public class TestOS
     System.out.println("OS Version: " + osBean.getVersion());
     System.out.println("Architecture: " + osBean.getArch());
     System.out.println("Processors: " + osBean.getAvailableProcessors());
+    System.out.println("System Load Average: " + 
osBean.getSystemLoadAverage());
   }
 }
Index: gnu/java/lang/management/OperatingSystemMXBeanImpl.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/lang/management/OperatingSystemMXBeanImpl.java,v
retrieving revision 1.3
diff -u -3 -p -u -r1.3 OperatingSystemMXBeanImpl.java
--- gnu/java/lang/management/OperatingSystemMXBeanImpl.java     29 Jul 2006 
14:05:59 -0000      1.3
+++ gnu/java/lang/management/OperatingSystemMXBeanImpl.java     26 Dec 2006 
02:29:12 -0000
@@ -82,6 +82,11 @@ public final class OperatingSystemMXBean
     return System.getProperty("os.name");
   }
 
+  public double getSystemLoadAverage()
+  {
+    return VMOperatingSystemMXBeanImpl.getSystemLoadAverage();
+  }
+
   public String getVersion()
   {
     return System.getProperty("os.version");
Index: include/Makefile.am
===================================================================
RCS file: /cvsroot/classpath/classpath/include/Makefile.am,v
retrieving revision 1.72
diff -u -3 -p -u -r1.72 Makefile.am
--- include/Makefile.am 25 Oct 2006 00:33:26 -0000      1.72
+++ include/Makefile.am 26 Dec 2006 02:29:13 -0000
@@ -135,6 +135,7 @@ $(top_srcdir)/include/gnu_java_nio_VMPip
 $(top_srcdir)/include/gnu_java_nio_VMSelector.h \
 $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvEncoder.h \
 $(top_srcdir)/include/gnu_java_nio_charset_iconv_IconvDecoder.h \
+$(top_srcdir)/include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h \
 $(top_srcdir)/include/java_io_VMFile.h \
 $(top_srcdir)/include/java_io_VMObjectInputStream.h \
 $(top_srcdir)/include/java_io_VMObjectStreamClass.h \
@@ -189,6 +190,8 @@ $(top_srcdir)/include/gnu_java_nio_VMPip
        $(JAVAH) -o $@ gnu.java.nio.VMPipe
 $(top_srcdir)/include/gnu_java_nio_VMSelector.h: 
$(top_srcdir)/vm/reference/gnu/java/nio/VMSelector.java
        $(JAVAH) -o $@ gnu.java.nio.VMSelector
+$(top_srcdir)/include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h: 
$(top_srcdir)/vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java
+       $(JAVAH) -o $@ gnu.java.lang.management.VMOperatingSystemMXBeanImpl
 $(top_srcdir)/include/java_io_VMFile.h: 
$(top_srcdir)/vm/reference/java/io/VMFile.java
        $(JAVAH) -o $@ java.io.VMFile
 $(top_srcdir)/include/java_io_VMObjectInputStream.h: 
$(top_srcdir)/vm/reference/java/io/VMObjectInputStream.java
Index: include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h,v
retrieving revision 1.15
diff -u -3 -p -u -r1.15 gnu_java_awt_peer_gtk_CairoGraphics2D.h
--- include/gnu_java_awt_peer_gtk_CairoGraphics2D.h     15 Dec 2006 21:21:04 
-0000      1.15
+++ include/gnu_java_awt_peer_gtk_CairoGraphics2D.h     26 Dec 2006 02:29:13 
-0000
@@ -41,10 +41,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip 
(JNIEnv *env, jobject, jlong);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip (JNIEnv *env, 
jobject, jlong);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env, 
jobject, jlong);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetAntialias (JNIEnv *env, 
jobject, jlong, jboolean);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine (JNIEnv *env, jobject, 
jlong, jdouble, jdouble, jdouble, jdouble);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect (JNIEnv *env, jobject, 
jlong, jdouble, jdouble, jdouble, jdouble);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect (JNIEnv *env, jobject, 
jlong, jdouble, jdouble, jdouble, jdouble);
-JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetAntialias (JNIEnv *env, 
jobject, jlong, jboolean);
 #undef gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_NEAREST
 #define gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_NEAREST 0L
 #undef gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_BILINEAR
Index: include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h
===================================================================
RCS file: include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h
diff -N include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ include/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h      26 Dec 
2006 02:29:13 -0000
@@ -0,0 +1,19 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+
+#ifndef __gnu_java_lang_management_VMOperatingSystemMXBeanImpl__
+#define __gnu_java_lang_management_VMOperatingSystemMXBeanImpl__
+
+#include <jni.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+JNIEXPORT jdouble JNICALL 
Java_gnu_java_lang_management_VMOperatingSystemMXBeanImpl_getSystemLoadAverage 
(JNIEnv *env, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __gnu_java_lang_management_VMOperatingSystemMXBeanImpl__ */
Index: java/lang/management/OperatingSystemMXBean.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/java/lang/management/OperatingSystemMXBean.java,v
retrieving revision 1.2
diff -u -3 -p -u -r1.2 OperatingSystemMXBean.java
--- java/lang/management/OperatingSystemMXBean.java     26 Jun 2006 20:56:58 
-0000      1.2
+++ java/lang/management/OperatingSystemMXBean.java     26 Dec 2006 02:29:15 
-0000
@@ -87,6 +87,22 @@ public interface OperatingSystemMXBean
   String getName();
 
   /**
+   * Returns the system load average for the last minute, or -1
+   * if this is unavailable.  The availability and calculation
+   * of the load average is system-dependent, but is usually 
+   * a damped time-dependent average obtained by monitoring the
+   * number of queued and running processes.  It is expected
+   * that this method will be called frequently to monitor the
+   * average over time, so it may not be implemented on systems
+   * where such a call is expensive.
+   *
+   * @return the system load average for the last minute, or -1
+   *         if this is unavailable.
+   * @since 1.6
+   */
+  double getSystemLoadAverage();
+
+  /**
    * Returns the version of the underlying operating system.  This
    * is equivalent to obtaining the <code>os.version</code> property
    * via [EMAIL PROTECTED] System#getProperty(String)}.
Index: native/jni/java-lang/Makefile.am
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/java-lang/Makefile.am,v
retrieving revision 1.18
diff -u -3 -p -u -r1.18 Makefile.am
--- native/jni/java-lang/Makefile.am    21 Aug 2006 23:34:45 -0000      1.18
+++ native/jni/java-lang/Makefile.am    26 Dec 2006 02:29:15 -0000
@@ -1,4 +1,4 @@
-nativeexeclib_LTLIBRARIES = libjavalang.la libjavalangreflect.la
+nativeexeclib_LTLIBRARIES = libjavalang.la libjavalangreflect.la 
libjavalangmanagement.la
 
 libjavalang_la_SOURCES = java_lang_VMSystem.c \
                         java_lang_VMFloat.c \
@@ -12,6 +12,8 @@ libjavalang_la_LIBADD = $(wildcard $(top
 
 libjavalangreflect_la_SOURCES = java_lang_reflect_VMArray.c
 
+libjavalangmanagement_la_SOURCES = 
gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c
+
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@ -I$(top_srcdir)/native/fdlibm
 AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
Index: 
native/jni/java-lang/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c
===================================================================
RCS file: 
native/jni/java-lang/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c
diff -N 
native/jni/java-lang/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ native/jni/java-lang/gnu_java_lang_management_VMOperatingSystemMXBeanImpl.c 
26 Dec 2006 02:29:15 -0000
@@ -0,0 +1,60 @@
+/* VMOperatingSystemMXBeanImpl.c - gnu.java.lang.management native functions
+   Copyright (C) 2006
+   Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath 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
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+#include <config.h>
+#include <stdlib.h>
+
+#include "gnu_java_lang_management_VMOperatingSystemMXBeanImpl.h"
+
+/*
+ * Class:     gnu_java_lang_management_VMOperatingSystemMXBeanImpl
+ * Method:    getSystemLoadAverage
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL
+Java_gnu_java_lang_management_VMOperatingSystemMXBeanImpl_getSystemLoadAverage 
(JNIEnv * env __attribute__ ((__unused__)), jclass cls __attribute__ 
((__unused__)))
+{
+#ifdef HAVE_GETLOADAVG
+  double avg[1];
+  int nos = getloadavg(avg, 1);
+  if (nos == 1)
+    return avg[0];
+  else
+#endif
+    return -1;
+}
Index: vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java
===================================================================
RCS file: vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java
diff -N vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ vm/reference/gnu/java/lang/management/VMOperatingSystemMXBeanImpl.java      
26 Dec 2006 02:29:19 -0000
@@ -0,0 +1,68 @@
+/* VMOperatingSystemMXBeanImpl.java - VM implementation of an OS bean
+   Copyright (C) 2006 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath 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
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.lang.management;
+
+import gnu.classpath.Configuration;
+
+/**
+ * Provides access to information about the operating system.
+ *
+ * @author Andrew John Hughes ([EMAIL PROTECTED])
+ * @since 1.6
+ */
+final class VMOperatingSystemMXBeanImpl
+{
+
+  static
+  {
+    if (Configuration.INIT_LOAD_LIBRARY)
+      {
+        System.loadLibrary("javalangmanagement");
+      }
+  }
+
+  /**
+   * Returns the system load average from the last
+   * minute.
+   *
+   * @return the system load average from the last
+   *         minute.
+   */
+  static native double getSystemLoadAverage();
+
+}

Attachment: signature.asc
Description: Digital signature

Reply via email to