Forcing JVM to unload bytecode at runtime, to allow reloading of new class?

Hi all,
I would like to know a few things about classes once they are loaded. I believe a loaded class is nothing more than an Object in terms of its lifecycle, correct? If so, then to make a class "unload", you simply have to make sure there are no references to the class correct? So, what are the rules for making sure nothing references a class instance?
Below I'll list a couple of examples. In Example 1 below, I have class A, B and C. Class A creates a instance variable to class B. In the constructor of class A, it creates a temporary class C, passing to it a reference of itself, which C stores in a local variable. Now, in class C, since it is only created in a Constructor (or method) in class A, it goes out of scope at the end of the method/constructor, and thus its reference to class A is no longer any good, correct? Therefore, at this point, there are no references to class A and thus setting A = null (assuming a "central" class loads class A, B and C like a plugin engine would do) should properly dispose of class A. I know, the GC does NOT necessarily remove the class A bytecode from memory right away. So I guess a question here is in need. When does the class A bytecode actually get removed from the JVM memory, in such a way that a "new" call to create it would effectively tell the JVM to have to open the .class file, read its byte code and create a new instance of it in memory? The purpose of these questions is to figure out how, at runtime to reload a class AND get the actual new version of the code. The reason is, if you do everything possible to unload a class, but the JVM doesn't discard the bytecodes of the class before you tell it to load the same class, it will use the "old" bytecode it has in memory, rather than load the bytecode off the HD or URL location and discard the old bytecode. I need a way to get the JVM to discard the bytecode to reload a newer version of a class. But the reason for the examples below is to also help me understand how a class is actually permitted to be unloaded by the JVM. This is also so that the JVM is not wasting memory with multiple versions of the same class, if it even does that. I want to definitely reclaim any memory used by the older version of the class, before loading a newer version.
So, in example 2 below, the situation changes slightly. A is now keeping a reference to the class C it creates in the constructor. Because C also creates a reference back to A since the A instance is passed in to C's constructor, A can now not be freed and made available for unloading until the reference to A in C is set to null, is this correct? I seem to lack basic understanding of how the whole reference counting thing works for objects and when a JVM can actually unload the bytecode of an object, thus freeing up memory. I suppose a good book on the JVM would clear this up, but I am hoping one of you reading this will know and can help me understand this process. So in this example, am I correct in that the C reference to A must be set to null, then the A instance must be set to null to tell the JVM there is no more use for the A class? I do realize that if other classes also use A, that the bytecode for A would be kept in memory. Let's assume this is the only use of A, B and C (and looking at the examples, B serves no real purpose anyway, but I already wrote it down so I'll leave it).
So once again, my goal here is to understand the lifecycle of an object, specifically a Class object (they are one and the same, correct, in terms of lifecycle?), and when the JVM actually removes the bytecode from memory so that if a new version of the same class is now available at runtime, the JVM loads the new bytecode into memory.
Thanks very much for taking the time to read this and reply.
Example 1:
class A
B b = new B();
public A()
C c = new C(this);
class B
public B()
class C
A a = null;
public C(A a)
this.a = a;
Example 2:
class A
B b = new B();
C c = null;
public A()
c = new C(this);
class B
public B()
class C
A a = null;
public C(A a)
this.a = a;
}

Cross post (numerous times.)
http://forum.java.sun.com/thread.jsp?thread=292465&forum=37&message=1152136

Similar Messages

  • Is JVM shared by Forms (9i) runtime process?

    Hi,
    I am currently testing the Forms 9i for our future project and would like to understand how good is Java/Forms_Runtime interoperability.
    If a form invokes Java code (imported by the Importer), does the Forms Runtime Process share a JVM or it always creates a new instance? The documentation says that a new instance of JVM is always created. I developed a small test Java class, imported it with the Importer, invoke its method (a method runs about 30 s.) from a form's trigger and deployed the form. I run 2 simultaneous clients, each client form calls the Java method on the server. I can see 2 "ifweb90" processes but it looks like they share the same JVM. At least, a number of java processes was not increased on the server. Could it be true (with Forms 9i)?

    Frank,
    thanks a lot for your reply.
    So, it looks like the Forms Runtime Process (ifweb90.exe) instanciates the Oracle own JVM (so called virtual JVM) for every session (with imported Java). And each mini-JVM shares somehow a general JVM (java.exe where the OC4J is running). Now the question is - how can I specify some initial parameters (i.e. memory size)for this mini-JVM? My java method does a memory intensive operation and as a result, its execution fails.

  • To force JVM load classes already loaded

    How to force JVM, from java code, to load any classes already loaded, in order to reload a class modified in time the java program is runnig.

    You have to do it yourself by loading the classes from your own ClassLoader. Everytime you want to reload you classes just create a new instance of your ClassLoader and load the class again from that ClassLoader. This is how servlet and jsp engines like Tomcat do it.

  • Is there any way to force jvm load a new class?

    I write a standalone command line program. This program calls a function which I added to an existing class. the existing class has run run for a while by other processes.
    When I run my command line program, it can not find the function I added to the existing class. But I am 100% sure I have overwrote the existing class file with my new copy. It looks like the old class file is still in effect.
    How can I instruct the JVM to load my new class file, not using the old one(maybe it is cached in memory, and didn't get refreshed)
    Welcome any suggestions. I have run out of idea. (BTW: It is infeasible for me to restart the computer)

    Classes are loaded by an object called a ClassLoader which stores all the classes it loads in some kind of internal Map object. If you ask the same ClassLoader for a class it's already loaded it will given you the old one.
    The only way to drop a class is to drop the ClassLoader which loaded it and create a new one to load a new version.
    What you need to do is to put the class file in question is a directory or jar which isn't on the class path. And make sure that no class file of the same name exists on the classpath (because that will be loaded in preference).
    Then you create a java.net.URLClassLoader pointing to the directory or jar (use FIle.toURL() to turn a file into a URL).
    Then call loadClass on that to load your class file. Then you'll probably have to call newInstance() on the class object to create an instance.
    Of course, if new method signatures are added you'll have to access them using Method objects, since they won't be know about at compile time.

  • Not able to set Weblogic Runtime on eclipse while adding new weblogic srvr

    Hi Everyone,
    I downloaded Oracle Integration pack for eclipse by clicking at "Download additional server adapters". I am not able to set Weblogic Runtime on eclipse while adding new weblogic server.
    I am trying to give following values:
    Name :Oracle WebLogic Server 10gR3 (2)
    Weblogic home :C:\bea\wlserver_10.3
    Java home: C:\bea\jrockit_160_05
    Below it I am getting "No applicable extension found" and finish button is greyed out.
    Please help in telling what is wrong. Never faced such an issue.
    Thanks
    SM

    I found this problem too.
    OS:windows7、eclipse:helios、oepe:Part of Oracle Enterprise Pack for Eclipse 11.1.1.7.3
    <workspace>\.metadata\.log:
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: enter_new_hit_count in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: exception_occurred_setting_bp_properties in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: hit_count_must_be_positive in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: no_description_provided in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: scripts in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: select_javascript_file in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: set_bp_hit_count in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: suspend_target in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: suspend_thread in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    !ENTRY org.eclipse.osgi 2 1 2012-06-05 00:16:06.357
    !MESSAGE NLS unused message: the_argument_0_is_not_valid in: org.eclipse.wst.jsdt.debug.internal.ui.messages
    I tried the weblogic 10.3.1、10.3.3、10.3.4、10.3.5 still show the info that "No applicable extension found" and finish button is greyed out.
    What is the reason?
    thanks!

  • Runtime Error when creating a new group

    I'm getting a runtime error when creating a new group on a site collection? 
    Thanks in advance

    The most possible reason is if your site collection is reached the maximum site quota limit,then there is chance to get the run time error while creating a new group.
    In this case,you will get the error while creating/updating the group or while adding the new user/uploading any content.
    Also Ensure the group name is not having any special/unsupported characters.
    Feel free to share the error screenshot/entry in the ULS logs.
    Please remember to click 'Mark as Answer' on the answer if it helps you
    Best Regards,
    Pavan Kumar Sapara
    s p kumar

  • How can I consume a c# windows runtime component in a WRL (C++) class?

    I would like to instantiate a class of a C# windows runtime project, from a WRL project.
    In order to make the C# class I have created a WRL project to generate an interface for it to implement. This has worked, but I would rather do it all in the one C# project. I don't know how to do this, and I also don't know how to finally consume the C#
    project (and the resulting .winmd file) from a Wrl project. 

    You're right; I'll post back here.
    Edit: I asked over here:
    https://social.msdn.microsoft.com/Forums/windowsapps/en-US/53a77d09-01b1-4039-8ad3-207b47b08775/how-can-i-consume-a-c-windows-runtime-component-in-a-wrl-c-class?forum=winappswithnativecode#53a77d09-01b1-4039-8ad3-207b47b08775

  • Force jvm 1.5 autodownload

    My Problem:
    My applet only runs under 1.5.
    Under 1.4, I get a ClassNotFoundException, the connection is HTTPS (SSL), I guess, the 1.4 JRE has a problem with this. But under the 1.5 version, it works.
    How can I force an automatic download and install of an 1.5.0_0x plugin for the browser ?
    I have been trying the following so far:
    1) Applet tag:
    <pre>
    <applet name="org.xxxxApplet"
    code="org.xxxxApplet"
    codebase=""
    archive="xxxxApplet.jar, iaik_jce.jar, iaikPkcs11Wrapper.jar, jnlp.jar, plugin.jar"
    width="636"
    height="500"
    mayscript="true">
    <param name="xxxxFormName" value="xxxxforms.xml"/>
    <param name="Language" value="<bean:write name="formTestForm" property="language" />" />
    <param name="cache_option" value="Plugin"/>
    Your browser must be configured for displaying Java v1.5+ applets.
    </applet>
    </pre>
    This works of course, but uses the 1.4 jvms, if no 1.5 jvm is installed and/or set as default browser plugin jvm.
    2)
    a combined one for ie and netscape, using the object tag:
    <pre>
    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="636"
    height="500"
    codebase="http://java.sun.com/products/plugin/autodl/ jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0">
    <param name="type" value="application/x-java-applet;version=1.5">
    <param name="CODE" value="org.xxxxApplet.class">
    <param name="ARCHIVE" value="xxxxApplet.jar, iaik_jce.jar, iaikPkcs11Wrapper.jar, jnlp.jar, plugin.jar">
    <param name="scriptable" value="true">
    <param name="xxxxFormName" value="xxxxforms.xml"/>
    <param name="Language" value="<bean:write name="formTestForm" property="language" />" />
    <param name="cache_option" value="Plugin" />
    <!-- The part in the comment tags invokes the Java Plug-in from Netscape -->
    <comment>
    <embed type="application/x-java-applet;version=1.5"
    pluginspage="http://java.sun.com/products/plugin/1.5/plugin-install.html"
    width="636" height="500"
    CODE="org.xxxxApplet.class"
    ARCHIVE="xxxxApplet.jar, iaik_jce.jar, iaikPkcs11Wrapper.jar, jnlp.jar, plugin.jar"
    scriptable=true
    xxxxFormName="xxxxforms.xml"/>
    Language="<bean:write name="formTestForm" property="language" />"
    cache_option="Plugin">
    <noembed></noembed>
    </embed>
    </comment>
    </object>
    </pre>
    This one almost works (under IE6, Win2000):
    I get a dialog which asks me, if I would like to download
    http://java.sun.com/products/plugin/autodl/ jinstall-1_5_0-windows-i586.cab
    ( from an unknown / not certified producer...)
    I click yes - and nothing happens - no download.
    Did I insert the wrong clsid, or is there another way for solving this ?
    I appreciate any answer.

    i read ur message .i also facing the same problem.i have to detect the whether jvm is installed or not if not then automatic downoad jvm

  • Force jvm to use UTF8 encoding for properties?

    hi,
    my problem is i cannot display turkish characters that are retrieved from properties file [(key, value) pair].The value may contain turkish characters.
    reference : java toc
    "..When saving properties to a stream or loading them from a stream, the ISO 8859-1 character encoding is used. For characters that cannot be directly represented in this encoding, Unicode escapes are used; however, only a single 'u' character is allowed in an escape sequence..."
    instead of iso 8859-1 or directly representing non-conforming characters in the form of UTF8 encoding , i want to use UTF8 . i dont know is there a way to enforce the encoding to UTF8 .is it possible ?
    note : javac -encoding or java -Djava.encoding has no use..
    thanx in advance

    Hi,
    I did a lot of testing with the method of my last posting and ran into the following problem: each character, that is not available in iso 8859-1 is discarded and replaced by a '?'. So when e.g. loading arabic characters you get just "?????" as your property's value.
    The only possibility to enable other encodings of Property Files is to replace the encoding of the reader to one that is better suited. So I created a customized class, that inherits from java.util.Properties, and supports loading and storing to any encoding. This class I give here:
    * Properties.java
    * Created on 11. Juni 2003, 14:08
    package xy;
    * The <code>Properties</code> class represents a persistent set of
    * properties. The <code>Properties</code> can be saved to a stream
    * or loaded from a stream. Each key and its corresponding value in
    * the property list is a string.
    * <p>
    * A property list can contain another property list as its
    * "defaults"; this second property list is searched if
    * the property key is not found in the original property list.
    * <p>
    * Because <code>Properties</code> inherits from <code>Hashtable</code>, the
    * <code>put</code> and <code>putAll</code> methods can be applied to a
    * <code>Properties</code> object.  Their use is strongly discouraged as they
    * allow the caller to insert entries whose keys or values are not
    * <code>Strings</code>.  The <code>setProperty</code> method should be used
    * instead.  If the <code>store</code> or <code>save</code> method is called
    * on a "compromised" <code>Properties</code> object that contains a
    * non-<code>String</code> key or value, the call will fail.
    * <p>
    * <a name="encoding"></a>
    * When saving properties to a stream or loading them from a stream, the
    * ISO 8859-1 character encoding can be used. For characters that cannot be directly
    * represented in this encoding,
    * <a href="http://java.sun.com/docs/books/jls/html/3.doc.html#100850">Unicode escapes</a>
    * are used; however, only a single 'u' character is allowed in an escape sequence.
    * The native2ascii tool can be used to convert property files to and from
    * other character encodings.
    * </p>
    * <p>
    * This Properties class is an extension of the default properties class an supports the
    * loading and saving from and into other encodings than ISO 8859-1.
    * </p>
    * @see <a href="../../../tooldocs/solaris/native2ascii.html">native2ascii tool for Solaris</a>
    * @see <a href="../../../tooldocs/win32/native2ascii.html">native2ascii tool for Windows</a>
    * @author  Gregor Kappler, extended the class of JDK by
    * @author  Arthur van Hoff
    * @author  Michael McCloskey
    * @version 1.64, 06/26/00
    * @since   JDK1.0
    public class Properties extends java.util.Properties {
        private static final String keyValueSeparators = "=: \t\r\n\f";
        private static final String strictKeyValueSeparators = "=:";
        private static final String specialSaveChars = "=: \t\r\n\f#!";
        private static final String whiteSpaceChars = " \t\r\n\f";
        /** Creates a new instance of Properties */
        public Properties() {
         * Reads a property list (key and element pairs) from the input stream.
         * The stream is assumed to be in the specified character encoding.
         * <p>
         * Every property occupies one line of the input stream. Each line
         * is terminated by a line terminator (<code>\n</code> or <code>\r</code>
         * or <code>\r\n</code>). Lines from the input stream are processed until
         * end of file is reached on the input stream.
         * <p>
         * A line that contains only whitespace or whose first non-whitespace
         * character is an ASCII <code>#</code> or <code>!</code> is ignored
         * (thus, <code>#</code> or <code>!</code> indicate comment lines).
         * <p>
         * Every line other than a blank line or a comment line describes one
         * property to be added to the table (except that if a line ends with \,
         * then the following line, if it exists, is treated as a continuation
         * line, as described
         * below). The key consists of all the characters in the line starting
         * with the first non-whitespace character and up to, but not including,
         * the first ASCII <code>=</code>, <code>:</code>, or whitespace
         * character. All of the key termination characters may be included in
         * the key by preceding them with a \.
         * Any whitespace after the key is skipped; if the first non-whitespace
         * character after the key is <code>=</code> or <code>:</code>, then it
         * is ignored and any whitespace characters after it are also skipped.
         * All remaining characters on the line become part of the associated
         * element string. Within the element string, the ASCII
         * escape sequences <code>\t</code>, <code>\n</code>,
         * <code>\r</code>, <code>\\</code>, <code>\"</code>, <code>\'</code>,
         * <code>\  </code>  (a backslash and a space)
         * are recognized and converted to single
         * characters. Moreover, if the last character on the line is
         * <code>\</code>, then the next line is treated as a continuation of the
         * current line; the <code>\</code> and line terminator are simply
         * discarded, and any leading whitespace characters on the continuation
         * line are also discarded and are not part of the element string. <br>
         * Note:
         * <code>\u</code><i>xxxx</i> is not supported if the encoding is not
         * ISO 8859-1!
         * <p>
         * As an example, each of the following four lines specifies the key
         * <code>"Truth"</code> and the associated element value
         * <code>"Beauty"</code>:
         * <p>
         * <pre>
         * Truth = Beauty
         *     Truth:Beauty
         * Truth               :Beauty
         * </pre>
         * As another example, the following three lines specify a single
         * property:
         * <p>
         * <pre>
         * fruits                    apple, banana, pear, \
         *                                  cantaloupe, watermelon, \
         *                                  kiwi, mango
         * </pre>
         * The key is <code>"fruits"</code> and the associated element is:
         * <p>
         * <pre>"apple, banana, pear, cantaloupe, watermelon, kiwi, mango"</pre>
         * Note that a space appears before each <code>\</code> so that a space
         * will appear after each comma in the final result; the <code>\</code>,
         * line terminator, and leading whitespace on the continuation line are
         * merely discarded and are <i>not</i> replaced by one or more other
         * characters.
         * <p>
         * As a third example, the line:
         * <p>
         * <pre>cheeses
         * </pre>
         * specifies that the key is <code>"cheeses"</code> and the associated
         * element is the empty string.<p>
         * @param      inStream   the input stream.
         * @exception  IOException  if an error occurred when reading from the
         *               input stream.
        public synchronized void load(java.io.InputStream inStream, java.nio.charset.Charset encoding) throws java.io.IOException {
            if (encoding.equals (encoding.forName("8859_1"))) {
                super.load (inStream);
                return;
            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(inStream, encoding));
         while (true) {
                // Get next line
                String line = in.readLine();
                if (line == null)
                    return;
                if (line.length() > 0) {
                    // Continue lines that end in slashes if they are not comments
                    char firstChar = line.charAt(0);
                    if ((firstChar != '#') && (firstChar != '!')) {
                        while (continueLine(line)) {
                            String nextLine = in.readLine();
                            if(nextLine == null)
                                nextLine = "";
                            String loppedLine = line.substring(0, line.length()-1);
                            // Advance beyond whitespace on new line
                            int startIndex=0;
                            for(startIndex=0; startIndex<nextLine.length(); startIndex++)
                                if (whiteSpaceChars.indexOf(nextLine.charAt(startIndex)) == -1)
                                    break;
                            nextLine = nextLine.substring(startIndex,nextLine.length());
                            line = new String(loppedLine+nextLine);
                        // Find start of key
                        int len = line.length();
                        int keyStart;
                        for(keyStart=0; keyStart<len; keyStart++) {
                            if(whiteSpaceChars.indexOf(line.charAt(keyStart)) == -1)
                                break;
                        // Blank lines are ignored
                        if (keyStart == len)
                            continue;
                        // Find separation between key and value
                        int separatorIndex;
                        for(separatorIndex=keyStart; separatorIndex<len; separatorIndex++) {
                            char currentChar = line.charAt(separatorIndex);
                            if (currentChar == '\\')
                                separatorIndex++;
                            else if(keyValueSeparators.indexOf(currentChar) != -1)
                                break;
                        // Skip over whitespace after key if any
                        int valueIndex;
                        for (valueIndex=separatorIndex; valueIndex<len; valueIndex++)
                            if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
                                break;
                        // Skip over one non whitespace key value separators if any
                        if (valueIndex < len)
                            if (strictKeyValueSeparators.indexOf(line.charAt(valueIndex)) != -1)
                                valueIndex++;
                        // Skip over white space after other separators if any
                        while (valueIndex < len) {
                            if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
                                break;
                            valueIndex++;
                        String key = line.substring(keyStart, separatorIndex);
                        String value = (separatorIndex < len) ? line.substring(valueIndex, len) : "";
                        // Convert then store key and value
                        key = loadConvert(key);
                        value = loadConvert(value);
                        put(key, value);
         * Writes this property list (key and element pairs) in this
         * <code>Properties</code> table to the output stream in a format suitable
         * for loading into a <code>Properties</code> table using the
         * <code>load</code> method.
         * The stream is written using the ISO 8859-1 character encoding.
         * <p>
         * Properties from the defaults table of this <code>Properties</code>
         * table (if any) are <i>not</i> written out by this method.
         * <p>
         * If the header argument is not null, then an ASCII <code>#</code>
         * character, the header string, and a line separator are first written
         * to the output stream. Thus, the <code>header</code> can serve as an
         * identifying comment.
         * <p>
         * Next, a comment line is always written, consisting of an ASCII
         * <code>#</code> character, the current date and time (as if produced
         * by the <code>toString</code> method of <code>Date</code> for the
         * current time), and a line separator as generated by the Writer.
         * <p>
         * Then every entry in this <code>Properties</code> table is written out,
         * one per line. For each entry the key string is written, then an ASCII
         * <code>=</code>, then the associated element string. Each character of
         * the element string is examined to see whether it should be rendered as
         * an escape sequence. The ASCII characters <code>\</code>, tab, newline,
         * and carriage return are written as <code>\\</code>, <code>\t</code>,
         * <code>\n</code>, and <code>\r</code>, respectively. Characters less
         * than <code>\u0020</code> and characters greater than
         * <code>\u007E</code> are written as <code>\u</code><i>xxxx</i> for
         * the appropriate hexadecimal value <i>xxxx</i>. Leading space characters,
         * but not embedded or trailing space characters, are written with a
         * preceding <code>\</code>. The key and value characters <code>#</code>,
         * <code>!</code>, <code>=</code>, and <code>:</code> are written with a
         * preceding slash to ensure that they are properly loaded.
         * <p>
         * After the entries have been written, the output stream is flushed.  The
         * output stream remains open after this method returns.
         * @param   out      an output stream.
         * @param   header   a description of the property list.
         * @exception  IOException if writing this property list to the specified
         *             output stream throws an <tt>IOException</tt>.
         * @exception  ClassCastException  if this <code>Properties</code> object
         *             contains any keys or values that are not <code>Strings</code>.
         * @exception  NullPointerException  if <code>out</code> is null.
         * @since 1.2
        public synchronized void store(java.io.OutputStream out, java.nio.charset.Charset encoding, String header)
        throws java.io.IOException
            if (encoding.equals (encoding.forName("8859_1"))) {
                super.store (out,header);
                return;
            java.io.BufferedWriter awriter;
            awriter = new java.io.BufferedWriter(new java.io.OutputStreamWriter(out,encoding));
            if (header != null)
                writeln(awriter, "#" + header);
            writeln(awriter, "#" + new java.util.Date().toString());
            for (java.util.Enumeration e = keys(); e.hasMoreElements();) {
                String key = (String)e.nextElement();
                String val = (String)get(key);
                key = saveConvert(key, true);
             /* No need to escape embedded and trailing spaces for value, hence
              * pass false to flag.
                val = saveConvert(val, false);
                writeln(awriter, key + "=" + val);
            awriter.flush();
         * changes special saved chars to their original forms
        private String loadConvert (String theString) {
            char aChar;
            int len = theString.length();
            StringBuffer outBuffer = new StringBuffer(len);
            for(int x=0; x<len; ) {
                aChar = theString.charAt(x++);
                if (aChar == '\\') {
                    aChar = theString.charAt(x++);
                    if (aChar == 't') aChar = '\t';
                    else if (aChar == 'r') aChar = '\r';
                    else if (aChar == 'n') aChar = '\n';
                    else if (aChar == 'f') aChar = '\f';
                    else if (aChar == '\\') aChar = '\\';
                    else if (aChar == '\"') aChar = '\"';
                    else if (aChar == '\'') aChar = '\'';
                    else if (aChar == ' ') aChar = ' ';
                    else
                        throw new IllegalArgumentException ("error in Encoding: '\\"+aChar+" not supported");
                    outBuffer.append(aChar);
                } else
                    outBuffer.append(aChar);
            return outBuffer.toString();
         * writes out any of the characters in specialSaveChars
         * with a preceding slash
        private String saveConvert(String theString, boolean escapeSpace) {
            int len = theString.length();
            StringBuffer outBuffer = new StringBuffer(len*2);
            for(int x=0; x<len; x++) {
                char aChar = theString.charAt(x);
                switch(aChar) {
              case ' ':
                  if (x == 0 || escapeSpace)
                   outBuffer.append('\\');
                  outBuffer.append(' ');
                  break;
                    case '\\':outBuffer.append('\\'); outBuffer.append('\\');
                              break;
                    case '\t':outBuffer.append('\\'); outBuffer.append('t');
                              break;
                    case '\n':outBuffer.append('\\'); outBuffer.append('n');
                              break;
                    case '\r':outBuffer.append('\\'); outBuffer.append('r');
                              break;
                    case '\f':outBuffer.append('\\'); outBuffer.append('f');
                              break;
                    default:
    //                    if ((aChar < 0x0020) || (aChar > 0x007e)) {
    //                        outBuffer.append(aChar);
    //                    } else {
                            if (specialSaveChars.indexOf(aChar) != -1)
                                outBuffer.append('\\');
                            outBuffer.append(aChar);
            return outBuffer.toString();
         * Returns true if the given line is a line that must
         * be appended to the next line
        private boolean continueLine (String line) {
            int slashCount = 0;
            int index = line.length() - 1;
            while((index >= 0) && (line.charAt(index--) == '\\'))
                slashCount++;
            return (slashCount % 2 == 1);
        private static void writeln(java.io.BufferedWriter bw, String s) throws java.io.IOException {
            bw.write(s);
            bw.newLine();
    }I hope you can use this class for your needs as I can. For me it supports any characters so far. If you find some bugs on it, let me know
    Regards,
    Gregor Kappler

  • Loading new class files when they are not available when the JVM starts

    Simple Question
    Is it possible to load class if it was not compiled when the original JVM was launched?
    More Detailed Question
    Our build system is getting a slight tweak with a new test runner. After our build system compiles the file, I would like to be able to load the files that have just been compiled.
    Our build system runs inside its own JVM and calls ant scripts to run the different processes(Separate JVM). The new test runner will also be called from the build system(Same JVM) but not as an ant target. Is it possible to call the newly compiled files from inside the build system JVM if they had not been created on the start of that JVM using reflection?
    Thanks in Advanced!

    public class t
        public static void main(String args[])
         throws Exception
         Writer out = new FileWriter("Foo.java");
         out.write("public class Foo implements Runnable {\n");
         out.write("    public void run() {\n");
         out.write("        System.out.println(\"run like the wind\");\n");
         out.write("    }\n");
         out.write("}\n");
         out.close();
         Runtime.getRuntime().exec("javac Foo.java").waitFor();
         ((Runnable) Class.forName("Foo").newInstance()).run();
    }

  • Runtime.exec() - how to open new window for new program?

    Hi,
    I have searched through the forums but haven't found an answer to this one yet. I am using runtime.exec() to start up a new java program. At first I thought it wasn't running properly but, after checking task manager, I have discovered that the new program I open runs, it is just completely invisible to me. I am wondering how I can get the new program to run in a command window or something where I can monitor it.
    Thank you for your help,
    Drew

    Thank you all. After trying to figure out why the start command wouldn't work in the runtime.exec() call(not an executable - I am a dolt), I tried putting it in a batch file and it worked perfectly. Thanks for your help,
    Drew

  • Portal Runtime Error when creating a new iView

    Hi, all.
      Our env is like the following.
      EP 2004s(7.0) SPS07
      From the Content Administration, when we try to create new iView, we
    sometimes(these days frequently!) got the following error.
    Portal Runtime Error
    An exception occurred while processing a request for :
    iView : N/A
    Component Name : N/A
    The exception was logged. Inform your system administrator..
    Exception id: 09:51_16/05/06_0062_9690550
    See the details for the exception ID in the log file
    And the detail in the defaultTrace.trc says like the following.
    Exception ID:09:51_16/05/06_0062_9690550
    [EXCEPTION]
    com.sapportals.portal.prt.runtime.PortalRuntimeException: PortalRuntimeException
         at com.sapportals.portal.prt.core.PortalRequestManager.handleRequestException(PortalRequestManager.java:921)
         at com.sapportals.portal.prt.core.PortalRequestManager.runRequestCycle(PortalRequestManager.java:803)
         at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:240)
         at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:316)
         at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:372)
         at com.sapportals.appdesigner.appdesignerfw.TabContentComponent.doOnNodeReady(TabContentComponent.java:110)
         at com.sapportals.portal.prt.component.AbstractPortalComponent.handleEvent(AbstractPortalComponent.java:388)
         at com.sapportals.portal.prt.pom.ComponentNode.handleEvent(ComponentNode.java:252)
         at com.sapportals.portal.prt.pom.PortalNode.fireEventOnNode(PortalNode.java:369)
         at com.sapportals.portal.prt.pom.AbstractNode.addChildNode(AbstractNode.java:340)
         at com.sapportals.portal.prt.core.PortalRequestManager.runRequestCycle(PortalRequestManager.java:642)
         at com.sapportals.portal.prt.connection.ServletConnection.handleRequest(ServletConnection.java:240)
         at com.sapportals.portal.prt.dispatcher.Dispatcher$doService.run(Dispatcher.java:522)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sapportals.portal.prt.dispatcher.Dispatcher.service(Dispatcher.java:405)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.servlet.InvokerServlet.service(InvokerServlet.java:156)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
    Does anyone have any idea or advice?
    Best Regards.

    Sejoon,
    Does this happen for only specific users? Or is it global and apparent for all users?
    Regards,
    James

  • Runtime Exception from WDP generated interface class

    Hi,
    I am having runtime class cast exceptions from the Internal component file. There is no errors in compiling/building. The application is trying to use another method in the component in another DC. I believe some generated files may have go corrupt but i am not sure how to fix this. Anyone have any suggests? Or maybe other ideas what might be causing this.
    java.lang.ClassCastException
    at com.xxx.yyy.component.wdp.InternalABCComp.wdGetTestInterface(InternalABCComp.java:694)

    Hi,
        If this DC is using is using other components then the problem may be with the UsedDCs. Check if any one of them or their models are changed. Then you have to reimport the models in that DCs. (Hint: Build and deploy those DCs if there have problems you can find)
    REgards,
    Siva

  • Force reload of new menu?

    Is there a way of forcing new users to load the latest version of a menu whilst other users are connected to our system using an older version?
    I think I'm right in that the old version is being pinned by the server but is there a way, without getting everyone to log out, of allowing new connections to use the new menu.
    Thanks
    Richard

    Sorry, I should add we are using Forms 10g (9.0.4) on MS Windows.

  • Generate and Compile new classes during runtime

    Hi!
    I use the Parser-Generator JavaCC to build a parser from a BNF-Grammar.
    During runtime, the user shall be able to change the
    grammar, so the Parser-Generator will build new .java-Files for the new Parser.
    Does anyone know any Java-Generic-Methods to use .java-Files in a program? Or do they have to be compiled with javac?
    Or does perhaps anyone know a Parser reading a BNF-Grammar-File and parsing according to this grammar?
    Thanks a lot for possible Help, Henning.

    Here is a link to a useful program with source code that uses javac. It creates a window and allows you to type in java source code and execute. I use it to test small java functions that I'm not very familiar with.
    http://www.javaworld.com/javatips/jw-javatip131.html?#

Maybe you are looking for

  • IPhone iOS 5.1.1 will not sync voice memos to iTunes

    My iPhone running iOS 5.1.1 will not sync voice memos to iTunes. I have tried trimming the memos, and changed the label. No go. The "include voice memos" is checked on iTunes sync, but iTunes won't even create a voice memos playlist. Help? These are

  • After upgrading to maverick my battery will not charge, any suggestions on how to fix this?

    I upgraded to maverick last night and now my MacBook pro won't charge.

  • JDK Version req for OIM 9.1.0.1 Installation

    Hi, As per Oracle's documentation, we need to use JDK 1_4_2_15 for Oracle Identity Manager 9.1.0.1. Installation. In my machine when I checked Java Version it shows jdk 1.5_0_06. Is there any problem if I go with the default jdk version or I have to

  • Printing a Customer Receivables Aging Report Doesn't Include PO #

    The standard Detailed Receivables Aging report uses variable 152 that is supposed to show the Cust/Vendor Ref No.  It doesn't show anything however.  I tried changing it to a database field and relating it to the document #, but that didn't pull in a

  • Change Data Plan

      I'm writing because I very dissatisfied with Verizon at this time, I wish to change my plan I don't use 700 minutes the most I have used is 125.  I don't even meet the text limits with the phone. I have  a family plan and the second phone on the pl