001: /*
002: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License version
007: * 2 only, as published by the Free Software Foundation.
008: *
009: * This program is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License version 2 for more details (a copy is
013: * included at /legal/license.txt).
014: *
015: * You should have received a copy of the GNU General Public License
016: * version 2 along with this work; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
018: * 02110-1301 USA
019: *
020: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
021: * Clara, CA 95054 or visit www.sun.com if you need additional
022: * information or have any questions.
023: */
024:
025: package com.sun.jumpimpl.isolate.jvmprocess.midlet;
026:
027: import java.io.File;
028:
029: import com.sun.jump.common.JUMPApplication;
030: import com.sun.jump.common.JUMPAppModel;
031:
032: import com.sun.jump.isolate.jvmprocess.JUMPAppContainer;
033: import com.sun.jump.isolate.jvmprocess.JUMPAppContainerContext;
034:
035: import com.sun.jumpimpl.process.JUMPModulesConfig;
036:
037: import sun.misc.MIDPConfig;
038:
039: import java.lang.reflect.Constructor;
040:
041: /**
042: * Application Container for the MIDlet app model.
043: * <p>
044: * This class is only a factory. The actual implementation is the
045: * com.sun.midp.jump.isolate.MIDletContainer class in the MIDP JAR.
046: * <p>
047: * The factory uses the system property sun.midp.home.path as the
048: * directory of the MIDP JAR (classes.zip).
049: */
050: /*
051: * Impl note: We should change the build so that event this class
052: * can be in the midp repository. This code needs to be compiled
053: * before jump api and after jump impl.
054: */
055: public class AppContainerImpl extends JUMPAppContainer {
056: /**
057: * Creates an app container for a MIDlet.
058: * This method is called using reflection.
059: */
060: public static JUMPAppContainer getInstance(
061: JUMPAppContainerContext context) {
062: try {
063:
064: /*
065: * The MIDlet container uses classes of the MIDP library, which
066: * is only accessible through the MIDPImplementationClassLoader.
067: * Hence the MIDlet container needs to be loaded by the MIDP
068: * implementation classloader.
069: */
070:
071: /* First, see if anyone created the classloader already */
072: ClassLoader midpImplementationClassLoader = MIDPConfig
073: .getMIDPImplementationClassLoader();
074:
075: if (midpImplementationClassLoader == null) {
076: String midpJar = (String) context
077: .getConfigProperty("jump.midp.classes.zip");
078:
079: midpImplementationClassLoader = MIDPConfig
080: .newMIDPImplementationClassLoader(new String[] { midpJar });
081: }
082:
083: Class clazz = Class.forName(
084: "com.sun.midp.jump.isolate.MIDletContainer", true,
085: midpImplementationClassLoader);
086:
087: Constructor constructor = clazz
088: .getDeclaredConstructor(new Class[] { JUMPAppContainerContext.class });
089:
090: JUMPAppContainer midletContainer = (JUMPAppContainer) constructor
091: .newInstance(new Object[] { context });
092:
093: return midletContainer;
094: } catch (ClassNotFoundException e) {
095: // MIDPConfig not found, not a dual stack platform.
096: } catch (Throwable e) {
097: // Other unexpected error? Let's report it.
098: e.printStackTrace();
099: }
100:
101: return null;
102: }
103:
104: /**
105: * Prevents this class from being created directly.
106: */
107: private AppContainerImpl() {
108: }
109:
110: /**
111: * Create a MIDlet and call its startApp method.
112: * This method will not return until after the the MIDlet's startApp
113: * method has returned.
114: *
115: * @param app application properties
116: * @param args arguments for the app
117: *
118: * @return runtime application ID
119: */
120: public int startApp(JUMPApplication app, String[] args) {
121: throw new RuntimeException("should not get called");
122: }
123:
124: /**
125: * Call a MIDlet's pauseApp method.
126: * This method will not return until after the the MIDlet's pauseApp
127: * method has returned.
128: *
129: * @param the application ID returned from startApp
130: */
131: public void pauseApp(int appId) {
132: throw new RuntimeException("should not get called");
133: }
134:
135: /**
136: * Call a MIDlet's startApp method.
137: * This method will not return until after the the MIDlet's startApp
138: * method has returned.
139: *
140: * @param the application ID returned from startApp
141: */
142: public void resumeApp(int appId) {
143: throw new RuntimeException("should not get called");
144: }
145:
146: /**
147: * Call a MIDlet's destroyApp method.
148: * This method will not return until after the the MIDlet's startApp
149: * method has returned.
150: *
151: * @param appId the application ID returned from startApp
152: * @param force if false, give the app the option of not being destroyed
153: */
154: public void destroyApp(int appId, boolean force) {
155: throw new RuntimeException("should not get called");
156: }
157: }
|