Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4218019

Using Novell JNDI providers: JIT (3.00.072b(x)) error 'BinaryNonCommunitive'

XMLWordPrintable

    • x86
    • windows_98, windows_nt



      Name: krT82822 Date: 03/07/99


      orig synopsis: "Non-fatal JIT error using Novell JNDI providers"

      The java interpreter gave me a non-fatal JIT error and asked that I report this to you. So here it is.

      I was fooling around with JNDI using the novell providers, I wrote a small program to list JNDI contexts and I get a JIT error when trying to list the
      contents of the server name space.

      This is the error:
      ---
      C:\java\projects\JUExport>java JUExport Servers/marvin
      Using NDS context Servers/marvin
      A nonfatal internal JIT (3.00.072b(x)) error 'BinaryNonCommunitive' has occurred
       in :
        'com/novell/service/server/ServerSchemaContext.<init> (ZLjava/lang/String;)V':
       Interpreting method.
        Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cg
      i

      Bindery
      NCPExtensions
      FileSystem
      ---

      If I invoke java with the nojit option I get no error.
      ---
      C:\java\projects\JUExport>java -nojit JUExport Servers/marvin
      Using NDS context Servers/marvin
      Bindery
      NCPExtensions
      FileSystem
      ---

      Novell specifically mentions JDK1.1.5 in their NJCL documentation so perhaps this is a version issue.

      Here is my setup:
      HW: PII 266 - 64 Mb RAM.
      Windows 98 [Version 4.10.1998]
      java version "1.1.7B"
      java full version "JDK1.1.7U"

      CLASSPATH =
      C:\Java\JDK1.1.7B\lib\classes.zip;C:\Java\JDK1.1.7B\lib\;.;C:\Java\JDK1.1.7B\Swi
      ng-1.1\swingall.jar;c:\java\novell\lib\jndi.jar;c:\java\novell\lib\njcl.jar;c:\j
      ava\novell\lib\Help.jar;c:\java\novell\lib\jgl3.1.0.jar

      PATH=
      C:\JAVA\JDK11~1.7B\BIN;C:\JAVA\JDK1.2\BIN;C:\NOVELL\CLIENT32;C:\WIN98;C:\WI
      N98\COMMAND;C:\BIN;C:\JAVA\NOVELL\BIN;Z:.;C:\JAVA\NOVELL\BIN

      Novell providers downloaded from their website on 03/04/99
      NJCL.EXE - the downloaded archive file has the following info.
      file size: 8 753 636 bytes

      The file NJCL.TXT has the heading:
      Novell Class Libraries for Java
      12/14/98

      The JNDI.JAR and NJCL.JAR are both dated January 1999.

      Here is the program that reports the error (2 files).
      Files compiled thus: javac *.java

      JUExport.java
      ---
      import com.novell.* ;

      public class JUExport {
      public static void main(String[] args) {
      UExport ex = null ;

      if (args.length < 1) {
      System.out.println("JUExport usage:");
      System.out.println(" java JUExport <tree name>/<nds context>");
      System.out.println("example:");
      System.out.println(" java JUExport EMA_TREE/.corp.nyc.ema");
      System.out.println("To export users in the corp container in the EMA_TREE tree.");
      } else {
      System.out.println("Using NDS context " + args[0]) ;
      ex = new UExport() ;
      try {
      ex.export(args[0]) ;
      } catch (Exception exc) {
      System.err.println(exc.toString());
      }
      }
      }
      }
      ---
      UExport.java
      ---
      import java.util.* ;
      import javax.naming.* ;

      public class UExport {
      Hashtable env ;

      public UExport() {
      // Setup the novell JNDI initial context.
      env = new Hashtable() ;
      env.put(Context.INITIAL_CONTEXT_FACTORY,
      "com.novell.service.nw.NetWareInitialContextFactory");
      }

      public void export(String exportContext) {
      // Get a listing of the initial context
      try {
      Context ctx = new InitialContext(env) ;
      ctx = (Context) ctx.lookup(exportContext) ;
      NamingEnumeration nameClassEnum = ctx.list("") ;

      // Dump the listing to stdout
      while (nameClassEnum.hasMore()) {
      NameClassPair nPair = (NameClassPair)nameClassEnum.next() ;
      System.out.println(nPair.getName()) ;
      }
      } catch (NamingException exc) {
      System.err.println("JNDIListObjs failed");
      System.err.println(exc.toString());
      }
      }
      }
      ---

      If there is any more information you need I can be contacted by email
      ###@###.###

      Regards,
      Johan Maasing
      (Review ID: 55112)
      ======================================================================

      Name: krT82822 Date: 06/25/99


      Running the attached java application to test the java random
      number generator always generates the message:

      A nonfatal internal JIT (3.00.072b(x))error 'BinaryNonCommutative' has occurred in :
      'showBugs.runsTest ()V': Interpreting method.
      Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cgi

      So, here's the report.

      The program works fine. For what it's worth, if anything,
      the program runs with no such message on jdk.1.1.6 on a
      Sun Solaris platform, as opposed to the Dell workstation
      running jdk1.1.8 & NT 4.0 that generates the error.

      import java.util.*;

      class showBug

      // On jdk1.1.8 on NT 4.0, always produces the following error:

      // A nonfatal internal JIT (3.00.072b(x)) error 'BinaryNonCommutative' has occurred in :
      // 'showBugs.runsTest ()V': Interpreting method.
      // Please report this error in detail to http://java.sun.com/cgi-bin/bugreport.cgi

      {

      static final int howMany = 625; // # to generate = 20,000 / 32;

      static byte bitArray[] = new byte [32 * howMany + 1]; // Last "bit" used as sentinel
      // See runsTest for description

          public static void main (String[] args)
          {

           System.out.println("Test of random number generation.");
           Random r = new Random ();

           int randomNumber;
           int onesGenerated = 0;

           System.out.println ("Starting bit random number tests.");

      for (int j = 0; j < howMany; j++) // get 32 bits at a time
      {
      randomNumber = r.nextInt ();
      saveBits (randomNumber, 32 * j);
      } // End for j

           System.out.println ("Number of bits generated: " + (howMany * 32));

           runsTest();

          } // End main


          public static void runsTest ()
          {
      int length = 1; // Length of current run
      int curBit = 0; // Bit being examined
      int nextBit = curBit + 1; // Bit after curBit
      int maxRun = 0; // Longest run found so far
      int bitCount = howMany * 32;

      // The blocks & gaps arrays count the # of runs of 1's
      // (blocks) & 0's (gaps). Note since there are no runs
      // of length 0, blocks[0] & gaps[0] are unused. Runs of
      // lengths > 6 are counted as runs of length 6.
      // Otherwise, blocks[i] = # of runs of i 1's
      // gaps[i] = # of runs of i 0's
      // The max & min arrays are the upper & lower bounds on
      // the permissible value; to pass, block & gap counts
      // must be less than the max & greater than the min.

      int blocks[] = { 0, 0, 0, 0, 0, 0, 0};
      int gaps [] = { 0, 0, 0, 0, 0, 0, 0};
      int max [] = { 0, 2733, 1421, 748, 402, 223, 223};
      int min [] = { 0, 2267, 1079, 502, 223, 90, 90};

      if (bitArray [bitCount-1] == 1) // Set the 20,001st bit to the
      { // complement of the last bit
      bitArray [bitCount] = 0; // This makes the following loop
      } // always end a run at the last
      else // bit & makes the while terminate
      { // correctly with no special end
      bitArray [bitCount] = 1; // case code
      }

      while (curBit < bitCount)
      {
      if (bitArray [curBit] != bitArray [nextBit]) // Then curBit is end of run
      {
      if (length > maxRun) // Current run > biggest so far?
      {
      maxRun = length;
      }
      if (length > 6) // Runs > 6 are counted as length = 6
      {
      length = 6;
      }
      if (bitArray [curBit] == (byte)1) // Is this a run of 1's or 0's?
      {
      blocks [length] += 1; // 1's -- inc. block count of that length
      }
      else
      {
      gaps [length] += 1;
      }
      length = 0; // Clear length of the new run (inc'ed below)
      }

      curBit += 1;
      nextBit += 1;
      length += 1;
      } // End of while loop

      // Print out the results

      System.out.println ("Results of runs test: ");
      System.out.println ("Max length run (must be < 34): " + maxRun);

      for (int i = 1; i <= 6; i++)
      {
      System.out.print ("Blocks [ " + i + " ] = " + blocks[i]);
      System.out.print (" Range: " + min[i] + " - " + max[i]);
      if (min[i] < blocks[i] &&
      max[i] > blocks[i])
      {
      System.out.println (" PASSED!");
      }
      else
      {
      System.out.println (" FAILED!!!");
      }
      }

      for (int i = 1; i <= 6; i++)
      {
      System.out.print (" Gaps [ " + i + " ] = " + gaps [i]);
      System.out.print (" Range: " + min[i] + " - " + max[i]);
      if (min[i] < gaps[i] &&
      max[i] > gaps[i])
      {
      System.out.println (" PASSED!");
      }
      else
      {
      System.out.println (" FAILED!!!");
      }
      }

           } // End runsTest

          public static void saveBits (int random, int bitPosition)
          {
      int copy = random;

      for (int i = 31; i >= 0; i--)
      {
      bitArray [bitPosition + i] = (byte)(0x1 & copy);
      // System.out.println ("bitArray [" + (bitPosition+i) + "] " + bitArray[bitPosition+i]);
      copy = copy >> 1;
      }
          } // End saveBits


      }
      (Review ID: 84850)
      ======================================================================

      Name: krT82822 Date: 09/06/99


      A nonfatal internal JIT (3.00.072b(x)) 'BinaryNonCommunitive'
      error has occurred when a program containing a class (called
      Clerk) implementing a Runnable interface was run. That class
      Clerk has a private field of type Bank where Bank is another
      class in that program containing methods credit(Account theAcct,
      int amount) and debit(Account theAcct, int amount) (here Account
      refers to another class in that program). The problem does NOT
      occur when the methods credit() and debit() are declared as
      synchronized. However if those methods are not synchronized but
      instead inside each of them a block of code related to the object
      theAcct is synchronized, the reproted error occurs consistently.
      (Review ID: 94917)
      ======================================================================

            Unassigned Unassigned
            kryansunw Kevin Ryan (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: