changeset 6574:8b944ebef8a7

8002101: break out auxiliary classes that will prevent multi-core compilation of the JDK Reviewed-by: alanb, sla
author ohrstrom
date Thu, 01 Nov 2012 10:33:32 +0100
parents 178618fb4300
children 6420fcd61c10 4770b0a49675
files src/share/classes/com/sun/jmx/snmp/agent/AcmChecker.java src/share/classes/com/sun/jmx/snmp/agent/LongList.java src/share/classes/com/sun/jmx/snmp/agent/SnmpMib.java
diffstat 3 files changed, 386 insertions(+), 290 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/jmx/snmp/agent/AcmChecker.java	Thu Nov 01 10:33:32 2012 +0100
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.jmx.snmp.agent;
+
+import java.io.Serializable;
+import java.util.Enumeration;
+import java.util.logging.Level;
+import java.util.Vector;
+
+import javax.management.ObjectName;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.NotCompliantMBeanException;
+
+import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
+import com.sun.jmx.snmp.SnmpOid;
+import com.sun.jmx.snmp.SnmpVarBind;
+import com.sun.jmx.snmp.SnmpDefinitions;
+import com.sun.jmx.snmp.SnmpStatusException;
+import com.sun.jmx.snmp.SnmpEngine;
+import com.sun.jmx.snmp.SnmpUnknownModelException;
+import com.sun.jmx.snmp.internal.SnmpAccessControlModel;
+import com.sun.jmx.snmp.internal.SnmpEngineImpl;
+
+/**
+ * Oid Checker makes use of ACM to check each OID during the getnext process.
+ */
+class AcmChecker {
+
+
+    SnmpAccessControlModel model = null;
+    String principal = null;
+    int securityLevel = -1;
+    int version = -1;
+    int pduType = -1;
+    int securityModel = -1;
+    byte[] contextName = null;
+    SnmpEngineImpl engine = null;
+    LongList l = null;
+    AcmChecker(SnmpMibRequest req) {
+        engine = (SnmpEngineImpl) req.getEngine();
+        //We are in V3 architecture, ACM is in the picture.
+        if(engine != null) {
+            if(engine.isCheckOidActivated()) {
+                try {
+                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
+                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
+                                SnmpMib.class.getName(),
+                                "AcmChecker(SnmpMibRequest)",
+                                "SNMP V3 Access Control to be done");
+                    }
+                    model = (SnmpAccessControlModel)
+                        engine.getAccessControlSubSystem().
+                        getModel(SnmpDefinitions.snmpVersionThree);
+                    principal = req.getPrincipal();
+                    securityLevel = req.getSecurityLevel();
+                    pduType = req.getPdu().type;
+                    version = req.getRequestPduVersion();
+                    securityModel = req.getSecurityModel();
+                    contextName = req.getAccessContextName();
+                    l = new LongList();
+                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
+                        final StringBuilder strb = new StringBuilder()
+                        .append("Will check oid for : principal : ")
+                        .append(principal)
+                        .append("; securityLevel : ").append(securityLevel)
+                        .append("; pduType : ").append(pduType)
+                        .append("; version : ").append(version)
+                        .append("; securityModel : ").append(securityModel)
+                        .append("; contextName : ").append(contextName);
+                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
+                                SnmpMib.class.getName(),
+                                "AcmChecker(SnmpMibRequest)", strb.toString());
+                    }
+
+                }catch(SnmpUnknownModelException e) {
+                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
+                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
+                                SnmpMib.class.getName(),
+                                "AcmChecker(SnmpMibRequest)",
+                                "Unknown Model, no ACM check.");
+                    }
+                }
+            }
+        }
+    }
+
+    void add(int index, long arc) {
+        if(model != null)
+            l.add(index, arc);
+    }
+
+    void remove(int index) {
+        if(model != null)
+            l.remove(index);
+    }
+
+    void add(final int at,final long[] src, final int from,
+             final int count) {
+        if(model != null)
+            l.add(at,src,from,count);
+    }
+
+    void remove(final int from, final int count) {
+        if(model != null)
+            l.remove(from,count);
+    }
+
+    void checkCurrentOid() throws SnmpStatusException {
+        if(model != null) {
+            SnmpOid oid = new SnmpOid(l.toArray());
+            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
+                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
+                        "checkCurrentOid", "Checking access for : " + oid);
+            }
+            model.checkAccess(version,
+                              principal,
+                              securityLevel,
+                              pduType,
+                              securityModel,
+                              contextName,
+                              oid);
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/jmx/snmp/agent/LongList.java	Thu Nov 01 10:33:32 2012 +0100
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.jmx.snmp.agent;
+
+import java.io.Serializable;
+import java.util.Enumeration;
+import java.util.logging.Level;
+import java.util.Vector;
+
+import javax.management.ObjectName;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.NotCompliantMBeanException;
+
+import static com.sun.jmx.defaults.JmxProperties.SNMP_ADAPTOR_LOGGER;
+import com.sun.jmx.snmp.SnmpOid;
+import com.sun.jmx.snmp.SnmpVarBind;
+import com.sun.jmx.snmp.SnmpDefinitions;
+import com.sun.jmx.snmp.SnmpStatusException;
+import com.sun.jmx.snmp.SnmpEngine;
+import com.sun.jmx.snmp.SnmpUnknownModelException;
+import com.sun.jmx.snmp.internal.SnmpAccessControlModel;
+import com.sun.jmx.snmp.internal.SnmpEngineImpl;
+
+/**
+ * This list is used in order to construct the OID during the getnext.
+ * The constructed oid is checked by the checker AcmChecker.
+ */
+final class LongList {
+
+    public static int DEFAULT_CAPACITY = 10;
+
+    public static int DEFAULT_INCREMENT = 10;
+
+
+    private final int DELTA;
+    private int size;
+
+    /**
+     * The list content. Any access to this variable must be protected
+     * by a synchronized block on the LongList object.
+     * Only read-only action should be performed on this object.
+     **/
+    public  long[] list;
+
+    LongList() {
+        this(DEFAULT_CAPACITY,DEFAULT_INCREMENT);
+    }
+
+    LongList(int initialCapacity) {
+        this(initialCapacity,DEFAULT_INCREMENT);
+    }
+
+    LongList(int initialCapacity, int delta) {
+        size = 0;
+        DELTA = delta;
+        list = allocate(initialCapacity);
+    }
+
+    /**
+     * Same behaviour than size() in {@link java.util.List}.
+     **/
+    public final int size() { return size;}
+
+    /**
+     * Same behaviour than add(long o) in {@link java.util.List}.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final boolean add(final long o) {
+        if (size >= list.length)
+            resize();
+        list[size++]=o;
+        return true;
+    }
+
+    /**
+     * Same behaviour than add(int index, long o) in
+     * {@link java.util.List}.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final void add(final int index, final long o) {
+        if (index >  size) throw new IndexOutOfBoundsException();
+        if (index >= list.length) resize();
+        if (index == size) {
+            list[size++]=o;
+            return;
+        }
+
+        java.lang.System.arraycopy(list,index,list,index+1,size-index);
+        list[index]=o;
+        size++;
+    }
+
+    /**
+     * Adds <var>count</var> elements to the list.
+     * @param at index at which the elements must be inserted. The
+     *        first element will be inserted at this index.
+     * @param src  An array containing the elements we want to insert.
+     * @param from Index of the first element from <var>src</var> that
+     *        must be inserted.
+     * @param count number of elements to insert.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final void add(final int at,final long[] src, final int from,
+                          final int count) {
+        if (count <= 0) return;
+        if (at > size) throw new IndexOutOfBoundsException();
+        ensure(size+count);
+        if (at < size) {
+            java.lang.System.arraycopy(list,at,list,at+count,size-at);
+        }
+        java.lang.System.arraycopy(src,from,list,at,count);
+        size+=count;
+    }
+
+    /**
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final long remove(final int from, final int count) {
+        if (count < 1 || from < 0) return -1;
+        if (from+count > size) return -1;
+
+        final long o = list[from];
+        final int oldsize = size;
+        size = size - count;
+
+        if (from == size) return o;
+
+        java.lang.System.arraycopy(list,from+count,list,from,
+                                   size-from);
+        return o;
+    }
+
+    /**
+     * Same behaviour than remove(int index) in {@link java.util.List}.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final long remove(final int index) {
+        if (index >= size) return -1;
+        final long o = list[index];
+        list[index]=0;
+        if (index == --size) return o;
+
+        java.lang.System.arraycopy(list,index+1,list,index,
+                                   size-index);
+        return o;
+    }
+
+    /**
+     * Same behaviour than the toArray(long[] a) method in
+     * {@link java.util.List}.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final long[] toArray(long[] a) {
+        java.lang.System.arraycopy(list,0,a,0,size);
+        return a;
+    }
+
+    /**
+     * Same behaviour than the toArray() method in
+     * {@link java.util.List}.
+     * Any access to this method should be protected in a synchronized
+     * block on the LongList object.
+     **/
+    public final long[] toArray() {
+        return toArray(new long[size]);
+    }
+
+    /**
+     * Resize the list. Increase its capacity by DELTA elements.
+     * Any call to this method must be protected by a synchronized
+     * block on this LongList.
+     **/
+    private final void resize() {
+        final long[] newlist = allocate(list.length + DELTA);
+        java.lang.System.arraycopy(list,0,newlist,0,size);
+        list = newlist;
+    }
+
+    /**
+     * Resize the list. Insure that the new length will be at
+     * least equal to <var>length</var>.
+     * @param length new minimal length requested.
+     * Any call to this method must be protected by a synchronized
+     * block on this LongList.
+     **/
+    private final void ensure(int length) {
+        if (list.length < length) {
+            final int min = list.length+DELTA;
+            length=(length<min)?min:length;
+            final long[] newlist = allocate(length);
+            java.lang.System.arraycopy(list,0,newlist,0,size);
+            list = newlist;
+        }
+    }
+
+    /**
+     * Allocate a new array of object of specified length.
+     **/
+    private final long[] allocate(final int length) {
+        return new long[length];
+    }
+
+}
--- a/src/share/classes/com/sun/jmx/snmp/agent/SnmpMib.java	Wed Oct 31 11:33:36 2012 -0700
+++ b/src/share/classes/com/sun/jmx/snmp/agent/SnmpMib.java	Thu Nov 01 10:33:32 2012 +0100
@@ -48,296 +48,6 @@
 import com.sun.jmx.snmp.internal.SnmpEngineImpl;
 
 /**
- * This list is used in order to construct the OID during the getnext.
- * The constructed oid is checked by the checker AcmChecker.
- */
-final class LongList {
-
-    public static int DEFAULT_CAPACITY = 10;
-
-    public static int DEFAULT_INCREMENT = 10;
-
-
-    private final int DELTA;
-    private int size;
-
-    /**
-     * The list content. Any access to this variable must be protected
-     * by a synchronized block on the LongList object.
-     * Only read-only action should be performed on this object.
-     **/
-    public  long[] list;
-
-    LongList() {
-        this(DEFAULT_CAPACITY,DEFAULT_INCREMENT);
-    }
-
-    LongList(int initialCapacity) {
-        this(initialCapacity,DEFAULT_INCREMENT);
-    }
-
-    LongList(int initialCapacity, int delta) {
-        size = 0;
-        DELTA = delta;
-        list = allocate(initialCapacity);
-    }
-
-    /**
-     * Same behaviour than size() in {@link java.util.List}.
-     **/
-    public final int size() { return size;}
-
-    /**
-     * Same behaviour than add(long o) in {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final boolean add(final long o) {
-        if (size >= list.length)
-            resize();
-        list[size++]=o;
-        return true;
-    }
-
-    /**
-     * Same behaviour than add(int index, long o) in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final void add(final int index, final long o) {
-        if (index >  size) throw new IndexOutOfBoundsException();
-        if (index >= list.length) resize();
-        if (index == size) {
-            list[size++]=o;
-            return;
-        }
-
-        java.lang.System.arraycopy(list,index,list,index+1,size-index);
-        list[index]=o;
-        size++;
-    }
-
-    /**
-     * Adds <var>count</var> elements to the list.
-     * @param at index at which the elements must be inserted. The
-     *        first element will be inserted at this index.
-     * @param src  An array containing the elements we want to insert.
-     * @param from Index of the first element from <var>src</var> that
-     *        must be inserted.
-     * @param count number of elements to insert.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final void add(final int at,final long[] src, final int from,
-                          final int count) {
-        if (count <= 0) return;
-        if (at > size) throw new IndexOutOfBoundsException();
-        ensure(size+count);
-        if (at < size) {
-            java.lang.System.arraycopy(list,at,list,at+count,size-at);
-        }
-        java.lang.System.arraycopy(src,from,list,at,count);
-        size+=count;
-    }
-
-    /**
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long remove(final int from, final int count) {
-        if (count < 1 || from < 0) return -1;
-        if (from+count > size) return -1;
-
-        final long o = list[from];
-        final int oldsize = size;
-        size = size - count;
-
-        if (from == size) return o;
-
-        java.lang.System.arraycopy(list,from+count,list,from,
-                                   size-from);
-        return o;
-    }
-
-    /**
-     * Same behaviour than remove(int index) in {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long remove(final int index) {
-        if (index >= size) return -1;
-        final long o = list[index];
-        list[index]=0;
-        if (index == --size) return o;
-
-        java.lang.System.arraycopy(list,index+1,list,index,
-                                   size-index);
-        return o;
-    }
-
-    /**
-     * Same behaviour than the toArray(long[] a) method in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long[] toArray(long[] a) {
-        java.lang.System.arraycopy(list,0,a,0,size);
-        return a;
-    }
-
-    /**
-     * Same behaviour than the toArray() method in
-     * {@link java.util.List}.
-     * Any access to this method should be protected in a synchronized
-     * block on the LongList object.
-     **/
-    public final long[] toArray() {
-        return toArray(new long[size]);
-    }
-
-    /**
-     * Resize the list. Increase its capacity by DELTA elements.
-     * Any call to this method must be protected by a synchronized
-     * block on this LongList.
-     **/
-    private final void resize() {
-        final long[] newlist = allocate(list.length + DELTA);
-        java.lang.System.arraycopy(list,0,newlist,0,size);
-        list = newlist;
-    }
-
-    /**
-     * Resize the list. Insure that the new length will be at
-     * least equal to <var>length</var>.
-     * @param length new minimal length requested.
-     * Any call to this method must be protected by a synchronized
-     * block on this LongList.
-     **/
-    private final void ensure(int length) {
-        if (list.length < length) {
-            final int min = list.length+DELTA;
-            length=(length<min)?min:length;
-            final long[] newlist = allocate(length);
-            java.lang.System.arraycopy(list,0,newlist,0,size);
-            list = newlist;
-        }
-    }
-
-    /**
-     * Allocate a new array of object of specified length.
-     **/
-    private final long[] allocate(final int length) {
-        return new long[length];
-    }
-
-}
-
-/**
- * Oid Checker makes use of ACM to check each OID during the getnext process.
- */
-class AcmChecker {
-
-
-    SnmpAccessControlModel model = null;
-    String principal = null;
-    int securityLevel = -1;
-    int version = -1;
-    int pduType = -1;
-    int securityModel = -1;
-    byte[] contextName = null;
-    SnmpEngineImpl engine = null;
-    LongList l = null;
-    AcmChecker(SnmpMibRequest req) {
-        engine = (SnmpEngineImpl) req.getEngine();
-        //We are in V3 architecture, ACM is in the picture.
-        if(engine != null) {
-            if(engine.isCheckOidActivated()) {
-                try {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)",
-                                "SNMP V3 Access Control to be done");
-                    }
-                    model = (SnmpAccessControlModel)
-                        engine.getAccessControlSubSystem().
-                        getModel(SnmpDefinitions.snmpVersionThree);
-                    principal = req.getPrincipal();
-                    securityLevel = req.getSecurityLevel();
-                    pduType = req.getPdu().type;
-                    version = req.getRequestPduVersion();
-                    securityModel = req.getSecurityModel();
-                    contextName = req.getAccessContextName();
-                    l = new LongList();
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        final StringBuilder strb = new StringBuilder()
-                        .append("Will check oid for : principal : ")
-                        .append(principal)
-                        .append("; securityLevel : ").append(securityLevel)
-                        .append("; pduType : ").append(pduType)
-                        .append("; version : ").append(version)
-                        .append("; securityModel : ").append(securityModel)
-                        .append("; contextName : ").append(contextName);
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)", strb.toString());
-                    }
-
-                }catch(SnmpUnknownModelException e) {
-                    if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                        SNMP_ADAPTOR_LOGGER.logp(Level.FINEST,
-                                SnmpMib.class.getName(),
-                                "AcmChecker(SnmpMibRequest)",
-                                "Unknown Model, no ACM check.");
-                    }
-                }
-            }
-        }
-    }
-
-    void add(int index, long arc) {
-        if(model != null)
-            l.add(index, arc);
-    }
-
-    void remove(int index) {
-        if(model != null)
-            l.remove(index);
-    }
-
-    void add(final int at,final long[] src, final int from,
-             final int count) {
-        if(model != null)
-            l.add(at,src,from,count);
-    }
-
-    void remove(final int from, final int count) {
-        if(model != null)
-            l.remove(from,count);
-    }
-
-    void checkCurrentOid() throws SnmpStatusException {
-        if(model != null) {
-            SnmpOid oid = new SnmpOid(l.toArray());
-            if (SNMP_ADAPTOR_LOGGER.isLoggable(Level.FINEST)) {
-                SNMP_ADAPTOR_LOGGER.logp(Level.FINEST, SnmpMib.class.getName(),
-                        "checkCurrentOid", "Checking access for : " + oid);
-            }
-            model.checkAccess(version,
-                              principal,
-                              securityLevel,
-                              pduType,
-                              securityModel,
-                              contextName,
-                              oid);
-        }
-    }
-
-}
-
-/**
  * Abstract class for representing an SNMP MIB.
  * <P>
  * When compiling a SNMP MIB, among all the classes generated by