Multiple Java apps running in one VM

I have one VM that runs one application with GUI, database. It also spawns another VM to run more apps through Sockets.
Is there a way to run several Java apps within a single VM? If so, I can get rid of those interprocess communication stuff and make things easier.
Thanks in advance.
Lee

Yes you can do what to want to do. It is actually very benificail. Take a look at this article:
http://java.sun.com/docs/books/performance/1st_edition/html/JPClassLoading.fm.html#24732
here is code to do it as well:
package com.ist.system;
import com.ist.util.LogMsg;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.Socket;
* This class was pulled from:
* http://java.sun.com/docs/books/performance/1st_edition/html/JPClassLoading.fm.html#24732
* It was written to provide the ability to launch many applications in the
* same JVM.  By doing this, it will save on system resources like RAM.  When
* the <code>launch</code> method is called, it will check to see if there is a
* VM already running.  If there is, it will launch the new application in the
* currently running VM.  If there isn't, it will create a process that will
* keep a VM alive until there are no more applications running.  Once there are
* no more applications running, this service will System.exit. 
public class Launcher {
    static final int socketPort = 9876;
     * This method will launch a new instance of the passed in className
     * in an already running JVM if one is already running.  If one is not
     * running, this application will create one.
     * @param className the class which you wish to launch
    public void launch(String className) {
        LogMsg.shortDebug("Trying to launch: " + className);
        Socket s = findService();
        if (s != null) {
            LogMsg.shortDebug("Launcher found service");
            try {
                OutputStream oStream = s.getOutputStream();
                byte[] bytes = className.getBytes();
                oStream.write(bytes.length);
                oStream.write(bytes);
                oStream.close();
                LogMsg.shortDebug(className);
            } catch (IOException e) {
                LogMsg.warn("Launcher couldn't talk to service");
        } else {
            LogMsg.event("Starting new service");
            Launcher.go(className);
            Thread listener = new ListenerThread();
            listener.start();
            LogMsg.shortDebug("Started service listener");
    protected Socket findService() {
        try {
            Socket s = new Socket(InetAddress.getLocalHost(),
            socketPort);
            return s;
        } catch (IOException e) {
            // couldn't find a service provider
            return null;
    public static synchronized void go(final String className) {
        LogMsg.shortDebug("Launcher running a " + className);
        Thread thread = new Thread() {
            public void run() {
                try {
                    Class clazz = Class.forName(className);
                    Class[] argsTypes = {String[].class};
                    Object[] args = {new String[0]};
                    Method method = clazz.getMethod("main", argsTypes);
                    method.invoke(clazz, args);
                } catch (Exception e) {
                    LogMsg.shortDebug("Launcher coudn't run the " + className);
        }; // end thread sub-class
        thread.start();
        runningPrograms++;
    static int runningPrograms = 0;
     * All programs wishing to exit should call this method and NOT
     * use System.exit.  Calling System.exit will kill all the applications
     * running in this VM.
    public static synchronized void programQuit() {
        runningPrograms--;
        if (runningPrograms <= 0) {
            System.exit(0);
    public static void main(String[] args) {
        LogMsg.setupTraceLevel();
        Launcher l = new Launcher();
        l.launch(args[0]);
}

Similar Messages

  • What path to use to access network files from Java app running on Mac

    I have a Java app running on a Mac with OS X that I'm using to check for files that exists on Windows servers within our network.
    Using a path like /Volumes/<Share>/ works because I've already connected to the drive using Finder. If I try to use a fully qualify the path with "smb://<Server>/<Share>" then my app doesn't see anything. Is there any way that I can get Java to connect to a directory without first having mapped or made the connection via some external tool like Finder?
    Here's the code I'm testing with:
    package FileImports;
    import java.io.File;
    import java.util.Arrays;
    public class Dir {
    static int indentLevel = -1;
    static void listPath(File path) {
    File files[];
    indentLevel++;
    files = path.listFiles();
    if (!(files == null)){
    Arrays.sort(files);
    for (int i = 0, n = files.length; i < n; i++) {
    for (int indent = 0; indent < indentLevel; indent++) {
    System.out.print(" ");
    System.out.println(files.toString());
    if (files[i].isDirectory()) {
    listPath(files[i]);
    indentLevel--;
    } else System.out.println("Directory not accessible!");
    public static void main(String args[]) {
    // this path works where <share> = the directory where my files exist.
    listPath(new File("/Volumes/<share>"));
    // this path returns a null result in files
    // listPath(new File("smb://<Server>/<Share>/"));
    Thanks,
    Alex
    Edited by: agates on Sep 25, 2008 11:14 AM

    agates wrote:
    Thanks for the response. I'll have to dig a little deeper into JCIFS. It looks like it would work great windows to windows. I haven't been able to find in the documentation where it would work on OS X without having to mount the targeted file system first. Has anyone had success creating a connection to a windows file system from OS X with JCIFS?Since jCIFS is written in pure Java and implements the entire SMB/CIFS protocoll on it's own it doesn't require any support from the OS (apart from a normal JVM runnig). Thus it should work exactly the same in OS X and Windows (and Linux and Solaris and ...).

  • How do I run multiple java apps in one JVM to reduce memory use?

    Hi all,
    I saw an article either on the web or in a magazine not too long ago about how to "detect" if the app is already running, and if so, it hands off the new instance to the already running JVM, which then creates a thread to run the Java app in. As it turns out, my app will be used in an ASP environment, through Citrix. We may have as many as 50 to 100 users running the same app, each with their own unique user ID, but all using the same one server to run it on. Each instance eats up 25MB of memory right now. So the question is if anybody knows of a URL or an app like this that can handle the process of running the same (or even different Java) apps in one JVM as separate threads, instead of requring several instances of the JVM to run? I know this article presented a fully working example, and I believe I know enough to do it but I wanted ot use the article as a reference to make sure it is done right. I know that each app basically would use the same one "launcher" program that would on first launch "listen" to a port, as well as send a message through the port to see if an existing launcher was running. If it does, it hands off the Java app to be run to the existing luancher application and shuts down the 2nd launching app. By using this method, the JVM eats up its normal memory, but each Java app only consumes its necessary memory as well and doesn't use up more JVM instance memory.
    Thanks.

    <pre>
    import java.util.Properties;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Enumeration;
    import java.util.NoSuchElementException;
    public class RunProg implements Runnable, Cloneable
    private String iProg;
    private String iArgs[];
    public static void main(String args[])
    new RunProg().main();
    // first step is to start main program itself
    private void main()
    Properties properties = System.getProperties();
    try
    properties.load(new FileInputStream("RunProg.properties"));
    catch(IOException e)
    System.setProperties(properties);
    int i = 0;
    System.out.println("enter main, activeCount=" + Thread.activeCount());
    while(true)
    String program = properties.getProperty("Prog" + i);
    if(program == null)
    break;
    StringTokenizer st = new StringTokenizer(program);
    String[] args = new String[st.countTokens() - 1];
    try
    RunProg rp = (RunProg)this.clone();
    rp.iProg = st.nextToken();
    for(int j = 0; st.hasMoreTokens(); j++)
         args[j] = st.nextToken();
    rp.iArgs = args;
    Thread th = new Thread(rp);
    th.setName("prog" + i + "=" + program);
    th.start();
    System.out.println("prog" + i + "=" + program + ", started");
    catch(CloneNotSupportedException e)
    System.out.println("prog" + i + "=" + program + ", can't start");
    i++;
         System.out.println("end of main, activeCount=" + Thread.activeCount());
    // next step is to start all others one by one
    public void run()
    try
    Class c = Class.forName(iProg);
    Class p[] = new Class[1];
    p[0] = String[].class;
    Method m = c.getMethod("main", p);
    Object o[] = new Object[1];
    o[0] = iArgs;
    m.invoke(null, o);
    catch(ClassNotFoundException e)
    System.out.println(iProg + "ClassNotFoundException");
    catch(NoSuchMethodException e)
    System.out.println(iProg + "NoSuchMethodException");
    catch(InvocationTargetException e)
    System.out.println(iProg + "NoSuchMethodException");
    catch(IllegalAccessException e)
    System.out.println(iProg + "NoSuchMethodException");
    System.out.println(Thread.currentThread().getName() + ", ended");
    System.out.println("exit run, activeCount=" + Thread.activeCount());
    // setup SecurityManager to disable method System.exit()
    public RunProg()
         SecurityManager sm = new mySecurityManager();
         System.setSecurityManager(sm);
    // inner-class to disable method System.exit()
    protected class mySecurityManager extends SecurityManager
         public void checkExit(int status)
              super.checkExit(status);
              Thread.currentThread().stop();
              throw new SecurityException();
    * inner-class to analyze StringTokenizer. This class is enhanced to check double Quotation marks
    protected class StringTokenizer implements Enumeration
    private int currentPosition;
    private int maxPosition;
    private String str;
    private String delimiters;
    private boolean retTokens;
    * Constructs a string tokenizer for the specified string. All
    * characters in the <code>delim</code> argument are the delimiters
    * for separating tokens.
    * <p>
    * If the <code>returnTokens</code> flag is <code>true</code>, then
    * the delimiter characters are also returned as tokens. Each
    * delimiter is returned as a string of length one. If the flag is
    * <code>false</code>, the delimiter characters are skipped and only
    * serve as separators between tokens.
    * @param str a string to be parsed.
    * @param delim the delimiters.
    * @param returnTokens flag indicating whether to return the delimiters
    * as tokens.
    public StringTokenizer(String str, String delim, boolean returnTokens)
    currentPosition = 0;
    this.str = str;
    maxPosition = str.length();
    delimiters = delim;
    retTokens = returnTokens;
    * Constructs a string tokenizer for the specified string. The
    * characters in the <code>delim</code> argument are the delimiters
    * for separating tokens. Delimiter characters themselves will not
    * be treated as tokens.
    * @param str a string to be parsed.
    * @param delim the delimiters.
    public StringTokenizer(String str, String delim)
    this(str, delim, false);
    * Constructs a string tokenizer for the specified string. The
    * tokenizer uses the default delimiter set, which is
    * <code>"&#92;t&#92;n&#92;r&#92;f"</code>: the space character, the tab
    * character, the newline character, the carriage-return character,
    * and the form-feed character. Delimiter characters themselves will
    * not be treated as tokens.
    * @param str a string to be parsed.
    public StringTokenizer(String str)
    this(str, " \t\n\r\f", false);
    * Skips delimiters.
    protected void skipDelimiters()
    while(!retTokens &&
    (currentPosition < maxPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) >= 0))
    currentPosition++;
    * Tests if there are more tokens available from this tokenizer's string.
    * If this method returns <tt>true</tt>, then a subsequent call to
    * <tt>nextToken</tt> with no argument will successfully return a token.
    * @return <code>true</code> if and only if there is at least one token
    * in the string after the current position; <code>false</code>
    * otherwise.
    public boolean hasMoreTokens()
    skipDelimiters();
    return(currentPosition < maxPosition);
    * Returns the next token from this string tokenizer.
    * @return the next token from this string tokenizer.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    public String nextToken()
    skipDelimiters();
    if(currentPosition >= maxPosition)
    throw new NoSuchElementException();
    int start = currentPosition;
    boolean inQuotation = false;
    while((currentPosition < maxPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) < 0 || inQuotation))
    if(str.charAt(currentPosition) == '"')
    inQuotation = !inQuotation;
    currentPosition++;
    if(retTokens && (start == currentPosition) &&
    (delimiters.indexOf(str.charAt(currentPosition)) >= 0))
    currentPosition++;
    String s = str.substring(start, currentPosition);
    if(s.charAt(0) == '"')
    s = s.substring(1);
    if(s.charAt(s.length() - 1) == '"')
    s = s.substring(0, s.length() - 1);
    return s;
    * Returns the next token in this string tokenizer's string. First,
    * the set of characters considered to be delimiters by this
    * <tt>StringTokenizer</tt> object is changed to be the characters in
    * the string <tt>delim</tt>. Then the next token in the string
    * after the current position is returned. The current position is
    * advanced beyond the recognized token. The new delimiter set
    * remains the default after this call.
    * @param delim the new delimiters.
    * @return the next token, after switching to the new delimiter set.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    public String nextToken(String delim)
    delimiters = delim;
    return nextToken();
    * Returns the same value as the <code>hasMoreTokens</code>
    * method. It exists so that this class can implement the
    * <code>Enumeration</code> interface.
    * @return <code>true</code> if there are more tokens;
    * <code>false</code> otherwise.
    * @see java.util.Enumeration
    * @see java.util.StringTokenizer#hasMoreTokens()
    public boolean hasMoreElements()
    return hasMoreTokens();
    * Returns the same value as the <code>nextToken</code> method,
    * except that its declared return value is <code>Object</code> rather than
    * <code>String</code>. It exists so that this class can implement the
    * <code>Enumeration</code> interface.
    * @return the next token in the string.
    * @exception NoSuchElementException if there are no more tokens in this
    * tokenizer's string.
    * @see java.util.Enumeration
    * @see java.util.StringTokenizer#nextToken()
    public Object nextElement()
    return nextToken();
    * Calculates the number of times that this tokenizer's
    * <code>nextToken</code> method can be called before it generates an
    * exception. The current position is not advanced.
    * @return the number of tokens remaining in the string using the current
    * delimiter set.
    * @see java.util.StringTokenizer#nextToken()
    public int countTokens()
    int count = 0;
    int currpos = currentPosition;
    while(currpos < maxPosition)
    * This is just skipDelimiters(); but it does not affect
    * currentPosition.
    while(!retTokens &&
    (currpos < maxPosition) &&
    (delimiters.indexOf(str.charAt(currpos)) >= 0))
    currpos++;
    if(currpos >= maxPosition)
    break;
    int start = currpos;
    boolean inQuotation = false;
    while((currpos < maxPosition) &&
    (delimiters.indexOf(str.charAt(currpos)) < 0 || inQuotation))
    if(str.charAt(currpos) == '"')
    inQuotation = !inQuotation;
    currpos++;
    if(retTokens && (start == currpos) &&
    (delimiters.indexOf(str.charAt(currpos)) >= 0))
    currpos++;
    count++;
    return count;
    </pre>
    RunProg.properties like this:
    Prog1=GetEnv 47838 837489 892374 839274
    Prog0=GetEnv "djkfds dfkljsd" dsklfj

  • Java3d speed collapse caused by other java apps running at the same time

    Hi
    I am programming a flightsimulator for some months.
    The current state is online available (all free, no copyrights)
    at http://www.snowraver.org/efcn/efcnsim/index.htm
    especially the sample (source) which shows the
    behaviour which is the reason for my post is here
    http://www.snowraver.org/efcn/efcnsim/page2.htm
    My Problem:
    When I start the sim while two other java programs
    ( one is a server running localhost, one is a client )
    are running, the speed of the flightsim is very slow,
    one frame update takes 3 to 5 seconds.
    ( 3 java.exe's in task list plus 1 which is the IDE )
    When I start the flightsim ALONE, I have 30 to 40 frames per second.
    ( 2 java.exe's in the task list = the flightsim and the IDE -> no prob here )
    That means, the flightsim is about 100 times slower, when
    started while the other two apps are running.
    BUT the other two applications do almost ***NOTHING***, the
    CPU load is 1 or 2 percent.
    Of course they have threads running, but all are waiting
    for a signal - no thread really consumes CPU power.
    Interestingly, when I FIRST start the flightsim and AFTER THIS
    start the two other applications, the flightsim
    holds 30 frames per seconds without problems, even
    though the other applications consume some CPU power
    until they have completely started up.
    Configurations:
    JSDK 1.4.2_1 , 0_2..
    Java3D 1.3.1 OPENGL (The DirectX version crashes with D3D device lost)
    Win2000,XP CPU 800MHz upto 3 GHz
    In my point of view, the java3d thread scheduler makes
    some funny decisions when it starts up, which lead
    to the order dependent behaviour described above.
    My question is, if anyone has some ideas, how I could
    get away from this speed collapse.
    The problem is caused in native code I guess.
    I also could imagine, that it has to do something with
    the order in which one creates, attaches and starts
    the Canvas3D. (? could produce race conditions)
    The flightsim runs in full retained mode. Of course
    the CPU work in the behaviours is rather big, because
    the ROAM triangulation update (..) is done there
    and the triangles are recalculated and passed
    ( all BY_REFERENCE ).
    Or could it have to do something with the memory
    consumption ( when all runs, almost all of
    the 512MB RAM is taken by the three java.exe's ) ?
    Any hints or ideas ?

    :) No, Sun does handle it [lol]
    I just have tested it on my computer at work
    ( 3GHz HP compaq, 1GB Ram and a Intel 82865G Graphics
    Card with 64MB memory, Windows XP )
    and it has worked without problems any way I tried.
    ( Except for xclusive fullscreen mode, but I guess, the administrators
    have deactivated it somehow, so we don't play games at work :)
    I couldn't test it under Linux so far, but I think, this will be less
    problematic than Windows [usually].
    However my current assumption is:
    I totally have forgot the [limited] videocard memory.
    I suppose, Java3D tries to put all triangle data and all
    textures to the videocards memory, so most data processing
    then can be passed to it's graphiccard CPU using
    OpenGL commands.
    Now the flightsim produces a varying amount of (by_reference) triangle data ( a few thousands )
    and has some texture maps for the terrain, the sea and other things,
    plus indexed triangle data for the planes and ships.
    The notebook system, which slows down has an ATI Mobile Radeon card
    with only 32MB RAM onboard, whereas the others have 64MB Ram.
    An additional pointer to that theory is that I can trigger the slowdown by resizing
    the flightsim window, while it is running.
    On the notebook, it holds 30fps, until the window exceeds a size of 962*862 pixels.
    At this size the speed collapses and goes down to 1 frame update every 4 seconds.
    If I make the window a few pixels smaller, the speed of 30fps immediately
    is there again.
    Therefore I guess, some data passed to the graphic cards memory depends
    linearly from the canvas3d's window dimension, and at some limit,
    the graphiccard's memory is too small and Java3D changes it's strategy
    and performs most calculations on the computer's mainmemory,
    which of course is a lot slower.
    I'm not very sure about that, I'm just speculating.
    Next thing I will try is to disable directdraw for the other two applications,
    possibly swing also uses graphicscard memory, when directdraw is enabled.
    The solution seems to be clear anyway: The flightsim must examine the system
    and set some parameters depending on the machine's capabilities.
    Onboard videagraphic ram is one of them. If it's too slow, I start to decrease
    the window size and expect to see a sudden increase of speed, as soon as
    the rendering can be done by the graphicscard CPU. If this never happens,
    I assume no OpenGL accelerator is present on that system. This can be seen as a method
    for finding out the amount of videocard memory on a system by trial and error ..?:)
    Thanks for your tips, Alain.
    I especially have to check out the data sharing class in 1.5.

  • Proper way to exit with a j2ee java app running in the NW70 j2ee engine

    Hello,
    I am working on migrating an app and it's ear from j2ee 6.20 to 7.0. It deploys okay, but when invoked, the j2ee server restarts. Looking at the part that fails, its trying to create a jco connection, which fails and then it catches the failure and does a stack dump and a System.exit(1). It shuts down and restarts at that point. Is System.exit(1) the proper way to exit a java app that is running within the j2ee engine? If it is, is it possible I am picking up the wrong System.exit and need to use an SAP specific one? I inherited the code, but not the IDE it was written with.
    Thanks,
    Paul D. Chamberlain

    Hi,
    Answered my own question. System.exit(1) should not be used. Return works.
    Paul D. Chamberlain

  • Will �cross platform app� run on one platform?

    Hi there,
    please forgive my stupidity but if I have a J2ME app which contains one function calling functions from Blackberry library. Can this app be installed and run ok on non Blackberry phones, such as Nokia (suppose that Blackberry related code will not be called under this non-Blackberry phone), within Nokia emulator environment, or real Nokia phones?
    It would be much appreciated if someone could shed some light here so that my time and effort to try it out could be saved.
    Many thanks in advance,
    qmei from London

    Here, let me actually be helpfull...
    It depends on the phone.
    To be able to use the exact same app in multiple devices, when some are calling device specific code is possible, but it really does depend on a few factors...
    1) You must not ever reference or instantiate any classes that import the device specific libraries. If any such classes are referenced directly in your application, the offending class will be loaded into memory, at which point the device's VM will notice that it's trying to reference a library that it doesn't recognize, and likely crash out.
    2) You must only load such offending classes by name, and even then, there must only reference offending classes through an interface. So if you have a canvas class that imports nokia libraries, as well as other canvas classes that import other manufacturer libraries, you must make them all implement the same interface, and do something like this...
    try{
    Class cls = Class.forName("com.nokia.mid.ui.FullCanvas");
    cls = Class.forName("NokiaGameScreen");
    Object o = (cls.newInstance());
    gameScreen = (GameScreen)o;
    gameScreen.init(this);
    }catch(Exception e){
    //cant' use nokia!
    //try another manufacturer...
    }... so I'll explain in greater detail...
    1) Class cls = Class.forName("com.nokia.mid.ui.FullCanvas");This line with throw an exception if no class matches the supplied argument. Generally you'd do something like this to check for the existance of one of the classes you intend to import. If this line does not throw an Exception, than instantiating the desired display should be fine. In this case, if we don't throws an Exception, we can be sure that we are running on a Nokia device.
    2) cls = Class.forName("NokiaGameScreen");This line actually grabbs the class you intend to instantiate, which contains the offending import. Only when we reach this point does the VM load the class into memory, and validate it's imports. We have already determined that we are running on a Nokia device from the previous line.
    3) Object o = (cls.newInstance()); Get an instance of the desired class.
    4) gameScreen = (GameScreen)o;gameScreen is of the type 'GameScreen', which is an interface I defined and is implemented by all of my different manufacturer/device specific Canvas's.
    5) gameScreen.init(this);I am simply calling the 'public void init(Midlet)' function I created that is exposed through my 'GameScreen' interface.
    As you can see in the above example, I never directly reference the 'NokiaGameScreen' class, and instead indirectly reference it through an interface it's implementing called 'GameScreen'.
    This type of 'cross platform' coding works well on many, but not all devices. It's a headache, but some devices go through the entire .jar file and validate each and every .class file during the installation process. These annoying phones will cancel the install if they find any imports that are not recognized. So even if the class is simply accidentally left in the .jar, with no possible way to ever load or instantiate it, the device may decide it won't let you run or install.
    Because of the problem devices, I always create a separate build for each manufacturer, and exclude the other manufacturer's classes from the build entirely.
    Message was edited by:
    hooble

  • How I can get current path during a java app running?

    I want to know the running path of the java app is running.
    do me a favor

    Syestm.getProperty(String Key)
    The requires key somethig like "path", or "user.path", not sure. See Javadoc to find the key you need.
    Abraham

  • Java app running on Mac OS X

    Hi to all.
    I'm trying to change the name that the dock shows when my java app is running. I have read all this , but the problem that I have is that I want to do it into my code and not from the terminal line.
    I want to do this, from my code.
    -Xdock:name="JUnit on Mac OS X"Anyone knows how to do it?
    Thanks for read.

    Hi to all again.
    I have searched the solution of this problem into other forums and sites and I think that is a very difficult question. Perhaps this forum it's not the better forum to ask this, exists any forum specialized in Java for Mac OS users?
    Edited by: Daniel.GB on 15-ago-2008 15:01

  • Configuration for a java app running on Harpertown.

    HI,
    I have a multi-threaded java app with 5-8 user threads. I'm running my application on intel Harpertown m/c with 8 cores.
    Is there a way I could configure my JVM such that I can I can allocate each core to each thread or atleast maximize such a possibility?
    Thanks,

    Please let me know in case my query is misdirected. I'm new to the forums and thought this would be the right place to post this.
    Thanks,

  • Will my java app run on winXP win 2000 ?

    or do they need to first install the jvm ?

    Java platform runs on any operating system. Install JVM and you are done
    http://www.skillipedia.com

  • Running multiple java apps simultaneously, each using a different jre.

    I have a situation where I have 3 or 4 applications (and one applet) that were built over time, each with a different version of the jdk (ranging from 1.2.2.005 to 1.3.2). I need to know of a way (and it must exist) to run each of these applications on the same machine, and at runtime, have each application (or applet) run with its respective version of the jre. Certainly, one could change some source code and make all programs compatible with a particular jre, but that doesn't solve my problem if a new app is built with a new version of the jdk down the road. Currently, each runs fine by themselves, but if I try to run them together as different processes, some won't do anything because the default jre may not be what it needs. Would the Java Plug-in software have a role to play in this? Is there a way to specify (link) which application should use which jre?
    P.S. These applications (right now) don't have to interact or interface in any way. I just need to have them all running as separate processes on the same machine and be able to jump from one to the other.

    However ... if you have the programs running in Java1.x, I
    wouldn't recommend to let it run under Java 1.y; atleast
    not without thorough testing.I do it all the time and have not had a problem. I'm
    currently using JDK 1.4 beta 3 and I regularly run a
    Java application written with JDK 1.1.
    It sounds like the programs you are running are
    relying on behavior that is not guaranteed. If that
    behavior changes in a later version, it can break your
    program. Program to the contracts provided by other
    classes and packages, and you should have few or no
    problems.I guess you are right. Maybe you can help me with the following problem (this is off this topic, I know): I have Swing JDK 1.2 and Swing from JDK 1.3. I have to register keys on components.
    In JDK 1.2 I can use registerKeyBoardAction, in JDK 1.3 I have to use input maps and action maps. Both solutions only work with certain JDK. What I did was writing code which detects the java version and takes the appropriate action to register the keys. To make the thing compile in 1.2, I have to use reflection for the input/action map methods, because they are only available in 1.3.
    Any idea how to solve this more elegantly ?

  • Running multiple java apps simultaneously, using different versions of jre.

    I have a situation where I have 3 or 4 applications (and one applet) that were built over time, each with a different version of the jdk (ranging from 1.2.2.005 to 1.3.2). I need to know of a way (and it must exist) to run each of these applications on the same machine, and at runtime, have each application (or applet) run with its respective version of the jre. Certainly, one could change some source code and make all programs compatible with a particular jre, but that doesn't solve my problem if a new app is built with a new version of the jdk down the road. Currently, each runs fine by themselves, but if I try to run them together as different processes, some won't do anything because the default jre may not be what it needs. Would the Java Plug-in software have a role to play in this? Is there a way to specify (link) which application should use which jre?
    P.S. These applications (right now) don't have to interact or interface in any way. I just need to have them all running as separate processes on the same machine and be able to jump from one to the other.

    Write a batch file that sets the environment properly and restores it afterwards, here is a sample batch file we use which switches to IBM's JRE to run an app:
    OLDPATH=$PATH
    PATH=$PATH:"/usr/local/java/IBMJava2-13/jre/bin"
    OLDCP=$CLASSPATH
    CLASSPATH="/usr/local/java/IBMJava2-13/jre/lib/rt.jar:."
    OLDHOME=$JAVA_HOME
    JAVA_HOME="/usr/local/java/IBMJava2-13/jre"
    # put the command to execute your program here
    java -jar app.jar
    PATH=$OLDPATH
    CLASSPATH=$CLASSPATH
    JAVA_HOME=$JAVA_HOME
    This is for Linux, but it should be possible to write one for Windows too.

  • Running multiple java-apps in single JVM?

    We have about 125 Citrix clients running on 5 Citrix Servers. We are investigating a new very big development project which will cover about 10 main projects with 15 Applications each. The complete project will be written in Java.
    Basically, each module will have it's own JVM. BUt, when each client runs a couple of modules, the servers will surely run out of memory...
    I searched for way's to run different modules within 1 single JVM but it seems to be 'not done', because of 'System.exit()', 'Static Variable' probs to name only 2.
    Any idea's on how to implement this?
    thanks.

    thanks for the reply.
    Yes, I assume the server will run out of memory.
    1) Our citrix servers are consuming about 3/4th of their 4Gb memory capacity without any java_application running.
    2) Each of our 5 Citrix servers has 25 users active
    3) Each JVM takes about 20mb memory
    4) Each user will run at least 3 app's simultaneously
    Abouve results in 3*20=60Mb / user * 25= 1,5Gb memory extra needed.
    Can you give me an example of a Thread.sleep(60000) test_pgm?
    and/or an example for a "classloader" program to launch each app in its ow sandbox (in same JVM)?
    (eventually a link to get more info on this)
    thanks

  • Multiple Java Apps in same JVM

    Hi,
    I have created a shell script which calls my java application with heap size as below:
    /bin/java -Xms:3072M -Xmx:3072M ...
    I'm calling the shell script multiple times in the background to create multiple instances of my java application in the same box. I have set a limit of 5 for java applications at any point of time. But what I'm experiencing is that first few sets of java application finish very fast (almost 3 mins) but last few sets taking a lot of time (around 10 mins). The quantity of data processed by all java applications is same but why later sets of java application is taking longer?
    Can I do something here so that later sets of apps also completes in 3 mins? Can I refresh java heap before submitting another set of java applications? Java application is not mine but I have purchased from 3rd party. Please help!!!
    Thanks in advance.

    > why later sets of java application is taking longer?
    Probably because of CPU usage.  But could be memory.
    >Can I do something here so that later sets of apps also completes in 3 mins
    You tune the task, the complete task, to the box.  That means you must understand in detail what is taking time and then architect that to make the best use of the available CPUs and memory (and other resources as used by the task.)

  • Can a Java app run in the background?

    I want to put an app on a server that runs at a certain time of day (probably something like midnight, not sure yet) that just performs a task without any notifications. Is Java suitable for this task?

    You are looking more to run as a service in windows or a damon in Unix. Do a google on "java windows service" and see what comes up. Last I checked there was a JNI structure given to use and step by steps on how to get what you want to happen.

Maybe you are looking for

  • Updating an existing book, but pages not mapping

    Harumph. I am stuck here. Question 1: When I try to update a FM book I get an error message that says that is does not contain a master page maps table. How do I fix this? Question 2: It also tries to open some of the chapters and the error message r

  • Trying to clone but CCC says "mach_kernel missing"

    i am trying to clone my 1 TB boot OS drive in bay 1 to a 4 TB drive in another bay so that i can put this 4 TB drive in bay 1 and use it as my boot drive. i would like to do this in order to have a ton of expansion on my new-used 2012 mac pro. howeve

  • Cannot create STO due to Material Not released

    Hi experts, I have a query here. A part number has block code BL (Blocked) in MM in MRP1 & Costing views. Because of which we cannot create Intercompany Stock Transport Orders. However it allows us to create normal PO's for the same part to the vendo

  • Authorization of a rented movie not cooperating

    I rented an HD movie 28 days ago on my AppleTV and I want to watch it today and when I hit play on the screen it goes to the "Authorizing. . ." screen and it hangs doing that. Network connection is fine Re-booting didn't help Other features on AppleT

  • [solved] Wireless USB adaptor says its something its not?

    So I have a TP-Link TL-WN321G USB adaptor I just purchased.  I was looking up chipset and drivers for it but when I do lsusb it comes back with ID 148f:2070 Ralink Technology, Corp. RT2070 Wireless Adapter This seems strange to me as everywhere I loo