com.ibm.jzos

Class ZUtil

  • java.lang.Object
    • com.ibm.jzos.ZUtil


  • public class ZUtil
    extends java.lang.Object
    This class provides a static interface to various z/OS native library calls, other than I/O.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      static java.lang.String[] environ()
      Get an array of strings that represent the environment variables of the current process.
      static java.lang.String formatStackTrace(java.lang.Throwable t)
      Print the stacktrace related to the supplied Throwable and return it as a String.
      static java.lang.String getCodePageCurrentLocale()
      Native method to retrieve the default locale codepage name used by the toolkit native library.
      static long getCpuTimeMicros()
      Gets the amount of CPU time consumed, expressed in microseconds, for the current thread.
      static java.lang.String getCurrentJobId()
      Get the current MVS jobid, blanks trimmed
      static java.lang.String getCurrentJobname()
      Get the current MVS jobname, blanks trimmed
      static java.lang.String getCurrentProcStepname()
      Get the current MVS proc stepname, blanks trimmed.
      static java.lang.String getCurrentStepname()
      Get the current MVS stepname, blanks trimmed.
      static long getCurrentTimeMicros()
      Gets the current time, expressed in microseconds since 00:00:00 Coordinated Universal Time (UTC), January 1, 1970
      static java.lang.String getCurrentTsoPrefix()
      Gets the TSO prefix, if running under TSO.
      static java.lang.String getCurrentUser()
      Get the current MVS userid.
      static java.lang.String getDefaultPlatformEncoding()
      Get the default platform encoding for this instance of the JVM.
      static java.lang.String getEnv(java.lang.String varName)
      Get the value of the Environment variable.
      static java.util.Properties getEnvironment()
      Return a Properties object containing the current process environment variables.
      static java.lang.String getJavaVersionInfo()
      Get a multi-line string that contains information about the version of Java that is currently running.
      static java.lang.String getJzosDllVersion()
      Return a string representing the version of the JZOS shared library.
      static java.lang.String getJzosJarVersion()
      Load the build_version.properties class resource and return a string representing the version of the JZOS Java archive.
      static int getLoggingLevel()
      Answer the current logging level for the Toolkit native code.
      static int getPid()
      Get the process id of the current process.
      static int getPPid()
      Get the parent process id of the current process.
      static byte[] getTodClock()
      A JNI wrapper for the z/architecture STORE CLOCK (STCK) instruction

      Refer to SA22-7832 z/Architecture Principles of Operations for more information.

      static void getTodClock(byte[] buffer)
      A JNI wrapper for the z/architecture STORE CLOCK (STCK) instruction

      Refer to SA22-7832 z/Architecture Principles of Operations for more information.

      static byte[] getTodClockExtended()
      A JNI wrapper for the z/architecture STORE CLOCK EXTENDED (STCKE) instruction

      Refer to SA22-7832 z/Architecture Principles of Operations for more information.

      static void getTodClockExtended(byte[] buffer)
      A JNI wrapper for the z/architecture STORE CLOCK EXTENDED (STCKE) instruction

      Refer to SA22-7832 z/Architecture Principles of Operations for more information.

      static void logDiagnostic(int level, java.lang.String msg)
      Send a message to the JZOS toolkit's log, which goes to the Language Environment messages file, which is usually stderr or DD SYSOUT.
      static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os, boolean autoFlush)
      Construct a PrintStream which is configured to transcode from the current Java file encoding to the current default platform encoding.
      static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os, boolean autoFlush, java.lang.String encoding)
      Construct a PrintStream which is configured to transcode from the current Java file encoding to the given encoding.
      static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os, boolean autoFlush, java.lang.String encoding, boolean enable)
      Construct a PrintStream which which can be used to transcode characters and bytes from the current Java file encoding to the given encoding.
      static void peekOSMemory(long address, byte[] bytes)
      Peek bytes from OS memory.
      static void peekOSMemory(long address, byte[] bytes, int offset, int len)
      Peek bytes from OS memory.
      static long peekOSMemory(long address, int len)
      Peek (read) a long from OS memory.
      static void redirectStandardStreams()
      A convenience method to redirect the standard streams using the default character encoding.
      static boolean redirectStandardStreams(java.lang.String requestedEncoding, boolean enableTranscoding)
      A static method which redirects the standard streams as follows: System.out is redirected to DD:STDOUT (required) System.err is redirected to DD:STDERR (required) System.in is redirected from DD:STDIN (optional)
      static void setDefaultPlatformEncoding(java.lang.String encoding)
      Set the default output encoding for this instance of the JVM.
      static void setEnv(java.lang.String varName, java.lang.String varValue)
      Set an Environment variable.
      static void setLoggingLevel(int level)
      Sets the logging level for the Toolkit native code.
      static void smfRecord(int type, int subtype, byte[] record)
      Write a System Management Facility (SMF) record.
      static java.lang.String substituteSystemSymbols(java.lang.String pattern)
      Substitute text for MVS system symbols.
      static java.lang.String substituteSystemSymbols(java.lang.String pattern, boolean warn)
      Substitute text for MVS system symbols.
      static void touch() 
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • getDefaultPlatformEncoding

        public static java.lang.String getDefaultPlatformEncoding()
        Get the default platform encoding for this instance of the JVM. The encoding is generally some variant of EBCDIC. This property is set by the JZOS launcher to match the default locale encoding for the process.
        Returns:
        the default output encoding
      • setDefaultPlatformEncoding

        public static void setDefaultPlatformEncoding(java.lang.String encoding)
                                               throws java.io.UnsupportedEncodingException
        Set the default output encoding for this instance of the JVM. The encoding is generally some variant of EBCDIC. This property is set by the JZOS launcher to match the default locale encoding for the process. This value should be changed with caution.
        Parameters:
        encoding - the charset encoding to use as a default
        Throws:
        java.io.UnsupportedEncodingException - if the encoding is not supported
      • environ

        public static java.lang.String[] environ()
        Get an array of strings that represent the environment variables of the current process.

        This method reads and returns the values held in the C-library 'environ' global.

        Returns:
        an array of environment variable strings in name=value format
      • getEnvironment

        public static java.util.Properties getEnvironment()
        Return a Properties object containing the current process environment variables.
        Since:
        2.1.0
      • getEnv

        public static java.lang.String getEnv(java.lang.String varName)
        Get the value of the Environment variable.

        This method calls the getenv() C-library routine.

        Parameters:
        varName - the name of the environment variable
        Returns:
        the value of the environment variable. Null if not found.
      • setEnv

        public static void setEnv(java.lang.String varName,
                  java.lang.String varValue)
                           throws ErrnoException
        Set an Environment variable.

        This method calls the setenv() C-library routine.

        Parameters:
        varName - the name of the environment variable
        varValue - the value of the environment variable
        Throws:
        ErrnoException - if the native call fails.
        Since:
        2.1.0
      • getCurrentJobname

        public static java.lang.String getCurrentJobname()
        Get the current MVS jobname, blanks trimmed
        Returns:
        the jobname
      • getCurrentTsoPrefix

        public static java.lang.String getCurrentTsoPrefix()
        Gets the TSO prefix, if running under TSO.
        Returns:
        the TSO prefix; null if not running under TSO; an empty string if under TSO with no prefix
      • getCurrentStepname

        public static java.lang.String getCurrentStepname()
        Get the current MVS stepname, blanks trimmed. This is the "jobstep name" if running under a proc.
        Returns:
        the proc stepname
      • getCurrentProcStepname

        public static java.lang.String getCurrentProcStepname()
        Get the current MVS proc stepname, blanks trimmed. This is an empty string if not running in a proc.
        Returns:
        the proc stepname
      • getCurrentJobId

        public static java.lang.String getCurrentJobId()
        Get the current MVS jobid, blanks trimmed
        Returns:
        the jobid (job number)
      • getCurrentTimeMicros

        public static long getCurrentTimeMicros()
        Gets the current time, expressed in microseconds since 00:00:00 Coordinated Universal Time (UTC), January 1, 1970

        This function uses the gettimeofday() C library function, which returns two 32-bit numbers containing the seconds since 1/1/1970, and the fractional microseconds.

        Returns:
        a (64-bit) Java long containing the number of microseconds since UTC January 1, 1970. As with gettimeofday(), this returns -1 if the number of seconds has overflowed a 32-bit integer (in 2038)
        Since:
        2.1.0
      • getCpuTimeMicros

        public static long getCpuTimeMicros()
                                     throws RcException
        Gets the amount of CPU time consumed, expressed in microseconds, for the current thread.

        This function calls the TIMEUSED ECT=COND system macro. Refer to the z/OS MVS Programming: Authorized Assembler Services Reference SET-WTO, SA22-7612 for more information on the TIMEUSED macro.

        Returns:
        a Java long containing the number of microseconds of CPU time consumed by the current thread
        Throws:
        an - (unchecked) RcException if call fails (not expected)
        RcException
        Since:
        2.1.0
      • getCurrentUser

        public static java.lang.String getCurrentUser()
                                               throws RcException
        Get the current MVS userid.

        This is a convenience method that simply delegates to PlatformThread.getUserName()

        Returns:
        the current MVS userid
        Throws:
        RcException
        See Also:

      • getJavaVersionInfo

        public static java.lang.String getJavaVersionInfo()
        Get a multi-line string that contains information about the version of Java that is currently running. This method is called by the JZOSVM launcher to display the Java version information on the //SYSOUT DD
        Returns:
        a String in the general form specified by sun.misc.Version.print()
      • getJzosJarVersion

        public static java.lang.String getJzosJarVersion()
        Load the build_version.properties class resource and return a string representing the version of the JZOS Java archive.
      • getJzosDllVersion

        public static java.lang.String getJzosDllVersion()
        Return a string representing the version of the JZOS shared library.
      • peekOSMemory

        public static long peekOSMemory(long address,
                        int len)
                                 throws RcException
        Peek (read) a long from OS memory.

        Parameters:
        address - the address of the OS memory to start peeking from.
        len - the number of bytes to read into the returned long, must be <= 8
        Throws:
        RcException - if there is an error accessing the memory location.
        java.lang.IllegalArgumentException - if len > 8 or len <=0
        java.lang.SecurityException - if a a SecurityManager is active and the user doesn't have access to JzosPermission("peekOSMemory")
      • peekOSMemory

        public static void peekOSMemory(long address,
                        byte[] bytes)
                                 throws RcException
        Peek bytes from OS memory.

        Parameters:
        address - the address of the OS memory to start peeking from.
        bytes - the location to store the bytes peeked, for bytes.length
        Throws:
        RcException - if there is an error accessing the memory location.
        java.lang.SecurityException - if a a SecurityManager is active and the user doesn't have access to JzosPermission("peekOSMemory")
      • peekOSMemory

        public static void peekOSMemory(long address,
                        byte[] bytes,
                        int offset,
                        int len)
                                 throws RcException
        Peek bytes from OS memory.
        Parameters:
        address - the address of the OS memory to start peeking from.
        bytes - the location to store the bytes peeked
        offset - the 0-based offset into bytes where to store the first byte peeked
        len - the number of bytes to copy from memory
        Throws:
        java.lang.IllegalArgumentException - if offset and len are incompatible with bytes
        RcException - if there is an error accessing the memory location.
        java.lang.SecurityException - if a a SecurityManager is active and the user doesn't have access to JzosPermission("peekOSMemory")
      • logDiagnostic

        public static void logDiagnostic(int level,
                         java.lang.String msg)
        Send a message to the JZOS toolkit's log, which goes to the Language Environment messages file, which is usually stderr or DD SYSOUT.

        Note: This method is not intended to be used from customer code.

        Parameters:
        level - one of the LOG_XXX constants. If an invalid value is supplied, the message is ignored.
        msg - the message text
      • redirectStandardStreams

        public static void redirectStandardStreams()
                                            throws java.lang.Exception
        A convenience method to redirect the standard streams using the default character encoding.

        JZOSVM calls this method on startup to cause System.out System.err and System.in to be directed to/from the job stream.

        This facility may only be used to redirect standard streams once, and is not intended to be used from customer code.

        Throws:
        java.lang.Exception - if the streams could not be redirected.
      • redirectStandardStreams

        public static boolean redirectStandardStreams(java.lang.String requestedEncoding,
                                      boolean enableTranscoding)
                                               throws java.lang.Exception
        A static method which redirects the standard streams as follows:
        • System.out is redirected to DD:STDOUT (required)
        • System.err is redirected to DD:STDERR (required)
        • System.in is redirected from DD:STDIN (optional)

        This method is invoked by the JZOSVM launcher to redirect the standard Java streams to MVS DDs. If STDIN is not defined, System.in is set to an InputStream that immediately returns -1 (EOS).

        This facility may only be used to redirect standard streams once, and is not intended to be used from customer code.

        If the system property jzos.merge.sysout is set to true, System.out and System.err are redirected to DD:SYSOUT rather than DD:STDOUT and DD:STDERR respectively.

        Parameters:
        requestedEncoding - the requested character encoding. If this encoding is not supported, defaultPlatformEncoding is used.
        Returns:
        true if the requestedEncoding was used, false if the default was used.
        Throws:
        java.lang.Exception - if the streams could not be redirected.
      • newEncodedPrintStream

        public static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os,
                                                boolean autoFlush)
                                                         throws java.io.UnsupportedEncodingException
        Construct a PrintStream which is configured to transcode from the current Java file encoding to the current default platform encoding.

        The current Java file encoding can be obtained from the "file.encoding" System property.

        Parameters:
        os - the stream to base the PrintStream on.
        autoFlush - whether or not to autoFlush.
        Returns:
        the printStream
        Throws:
        java.io.UnsupportedEncodingException
        See Also:
        getDefaultPlatformEncoding()
      • newEncodedPrintStream

        public static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os,
                                                boolean autoFlush,
                                                java.lang.String encoding)
                                                         throws java.io.UnsupportedEncodingException
        Construct a PrintStream which is configured to transcode from the current Java file encoding to the given encoding.

        The current Java file encoding can be obtained from the "file.encoding" System property.

        Parameters:
        os - the stream to base the PrintStream on.
        autoFlush - whether or not to autoFlush
        encoding - the target charset encoding to use
        Returns:
        the printStream
        Throws:
        java.io.UnsupportedEncodingException
        See Also:
        TranscodingPrintStream
      • newEncodedPrintStream

        public static java.io.PrintStream newEncodedPrintStream(java.io.OutputStream os,
                                                boolean autoFlush,
                                                java.lang.String encoding,
                                                boolean enable)
                                                         throws java.io.UnsupportedEncodingException
        Construct a PrintStream which which can be used to transcode characters and bytes from the current Java file encoding to the given encoding.

        The current Java file encoding can be obtained from the "file.encoding" System property.

        Parameters:
        os - the stream to base the PrintStream on.
        autoFlush - whether or not to autoFlush
        encoding - the charset encoding to use
        enable - if false, transcoding is disabled
        Returns:
        the printStream
        Throws:
        java.io.UnsupportedEncodingException
        See Also:
        TranscodingPrintStream
      • getLoggingLevel

        public static int getLoggingLevel()
        Answer the current logging level for the Toolkit native code.
        See Also:
        setLoggingLevel(int)
      • setLoggingLevel

        public static void setLoggingLevel(int level)
        Sets the logging level for the Toolkit native code. This method can be used to enable debugging output from the toolkit native library.

        In order of decreasing severity, the logging levels are:

        Alternatively, a system property can be used to set the toolkit logging level. This property has the form: -Djzos.logging={E|W|N|I|D|T}

        Parameters:
        level - one of the LOG_XXX constants. If an invalid level is given it is ignored, but a warning is logged.
        See Also:
        logDiagnostic(int, String)
      • getCodePageCurrentLocale

        public static java.lang.String getCodePageCurrentLocale()
        Native method to retrieve the default locale codepage name used by the toolkit native library. This is the default codepage for the z/OS process based on the LANG environment variable.
      • getPid

        public static int getPid()
        Get the process id of the current process.

        This method calls the getpid() C-library routine.

        Returns:
        the process id.
        Since:
        2.1.0
      • getPPid

        public static int getPPid()
        Get the parent process id of the current process.

        This method calls the getppid() C-library routine.

        Returns:
        the parent process id.
        Since:
        2.1.0
      • getTodClock

        public static byte[] getTodClock()
        A JNI wrapper for the z/architecture STORE CLOCK (STCK) instruction

        Refer to SA22-7832 z/Architecture Principles of Operations for more information.

        Returns:
        byte[] an 8 byte array containing the TOD clock value
        Throws:
        RcException - if the STCK instruction returns a CC != 0 (should not happen)
        Since:
        2.3.0
      • getTodClock

        public static void getTodClock(byte[] buffer)
        A JNI wrapper for the z/architecture STORE CLOCK (STCK) instruction

        Refer to SA22-7832 z/Architecture Principles of Operations for more information.

        Parameters:
        buffer - a byte array a least 8 bytes long to receive the TOD clock value
        Throws:
        RcException - if the STCK instruction returns a CC != 0 (should not happen)
        java.lang.IllegalArgumentException - if the given buffer is not at least 8 bytes in length
        Since:
        2.3.0
      • getTodClockExtended

        public static byte[] getTodClockExtended()
        A JNI wrapper for the z/architecture STORE CLOCK EXTENDED (STCKE) instruction

        Refer to SA22-7832 z/Architecture Principles of Operations for more information.

        Returns:
        byte[] a 16-byte byte array containing the extended TOD clock value
        Throws:
        RcException - if the STCKE instruction returns a CC != 0 (should not happen)
        Since:
        2.3.0
      • getTodClockExtended

        public static void getTodClockExtended(byte[] buffer)
        A JNI wrapper for the z/architecture STORE CLOCK EXTENDED (STCKE) instruction

        Refer to SA22-7832 z/Architecture Principles of Operations for more information.

        Parameters:
        buffer - a byte array a least 16 bytes long to receive the extended TOD clock value
        Throws:
        RcException - if the STCKE instruction returns a CC != 0 (should not happen)
        java.lang.IllegalArgumentException - if the given buffer is not at least 16 bytes in length
        Since:
        2.3.0
      • smfRecord

        public static void smfRecord(int type,
                     int subtype,
                     byte[] record)
                              throws ErrnoException
        Write a System Management Facility (SMF) record.

        This method calls the __smf_record() C-library routine. The first 24 bytes of the given record are reserved for the Standard SMF Record Header with Subtypes, as described in the manual: MVS Systems Management Facilities (SMF).

        Before writing the record, this API will overwrite the 24 byte SMF header area, filling in all header fields, including the current date/time and the system id (SID). If the SUBSYS starts with a blank or null(zero), then it is also filled in with either "JES2", "JES3", "TSO", or "STC" as appropriate. If the SUBSYS field starts with a character other than blank or null, then it is unchanged.

        Note: The "TZ" environment variable must be properly set to the correct timezone in order for the date/time in the SMF header to reflect the current local time.

        Throws:
        ErrnoException - on failure. Refer to __smf_record() api documentation for specific errno reason code constants, which are provided as constants in the ErrnoException class.
      • substituteSystemSymbols

        public static java.lang.String substituteSystemSymbols(java.lang.String pattern,
                                               boolean warn)
                                                        throws RcException
        Substitute text for MVS system symbols.

        This method calls the ASASYMBM Assembler service. For more information, see MVS Programming: Assembler Services Reference, Volume 1 (SA22-7606). User symbol tables are not supported by this API.

        Parameters:
        pattern - a string containing MVS system symbol(s) to be substituted. MVS system symbols have the form &SYMBOL., or &SYMBOL(n:m). (if a substring of the resulting text is requested). In this case, n is the start index of the resulting text and m is the number of characters to substitute. For more information on how symbol substrings are specified, see the MVS Initialization and Tuning Reference (SA22-7592)
        warn - if true will force ASASYMBM to check for symbol substitution warnings. See the notes under RcException for details. If false, symbol substitution warnings are ignored.
        Returns:
        the pattern string with text substituted for the system symbols.
        Throws:
        RcException - if an error occurs with one of the following return codes:
        • 4 - warn=true and there was a substring error
        • 8 - the target buffer was too small to hold the substituted pattern
        • 12 - warn=true and the length of the text substituted for a system symbol was zero
        • 16 - warn=true and none of the specified symbols was substituted
        Since:
        2.3.0
      • touch

        public static void touch()
      • formatStackTrace

        public static java.lang.String formatStackTrace(java.lang.Throwable t)
        Print the stacktrace related to the supplied Throwable and return it as a String.
© Copyright IBM Corporation 2005, 2014.