javaruntimes/starterutils/inc/runtimestarterutils.h
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaruntimes/starterutils/inc/runtimestarterutils.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Utilities for starting the Java runtime.
+*
+*/
+
+
+#ifndef RUNTIMESTARTERUTILS_H
+#define RUNTIMESTARTERUTILS_H
+
+#include <string>
+#include "javaoslayer.h"
+#include "jvmstarter.h"
+
+namespace java // codescanner::namespace
+{
+
+namespace comms // codescanner::namespace
+{
+class CommsClientEndpoint;
+}
+
+namespace runtime // codescanner::namespace
+{
+
+class OsThreadSupervisor;
+class DevelopmentFeaturesListener;
+
+/**
+ * This class is responsible for providing utilies related to starting
+ * the javaruntime.
+ */
+OS_NONSHARABLE_CLASS(RuntimeStarterUtils)
+{
+public:
+
+    /**
+     * Constructor of the RuntimeStarterUtils.
+     */
+    OS_IMPORT RuntimeStarterUtils();
+
+    /**
+     * Destructor of the RuntimeStarterUtils. Will destroy the instance of
+     * comms client endpoint if has been created by this object. The class
+     * is not meant to be inherited, so destructor can be non virtual.
+     */
+    OS_IMPORT ~RuntimeStarterUtils();
+
+    /**
+     * Creates a platform dependent thread supervisor for detecting thread
+     * panics. When the thread supervisioning is enabled, any panicing thread
+     * belonging to this process will lead to termination of the process.
+     * At least in Symbian it is important to enable this feature. Panic of
+     * one thread doesn't automatically lead to termination of the whole
+     * process.
+     * <p>
+     * The lifetime of the supervisor is tight to existence of instance of
+     * this class. Once the object is destroyed, alos the supervisor is
+     * terminated.
+     * @param tryThreadDumping Whether to try to do thread dump in panic case.
+     *                         Might cause another panic.
+     * @throws std::exception on error cases.
+     */
+    OS_IMPORT void startThreadSupervisor(bool tryThreadDumping = false);
+
+    /**
+     * This method will enable various kind of development features - like
+     * debugging, profiling and thread dumping. At the moment all these
+     * development features are to some extent controlled by Java Captain.
+     * This is natural to MIDP runtime but a little problematic to non-managed
+     * runtimes like Installer and TCK runner. Captain is not aware of these
+     * non-managed runtimes.
+     * <p>
+     * This method will make a comms connection to Java Captain if it doesn't.
+     * exist. For determining the existence it will search if a named comms
+     * client endpoint is already created with name "javacaptain". If it
+     * doesn't, then a new one is created. The endpoint is used when
+     * generating thread dumps. Java Captain will deliver dump message to
+     * all the running Java process that it is aware of.
+     * <p>
+     * Internally this method will ask from Java Captain if there are some
+     * extra arguments to be provided to the JVM (if onlyThreadDump is set
+     * to false). Those parameters can be
+     * related e.g to debugging, profiling or something else.
+     * <p>
+     * The method will add a new lister to listen to thread dump messages from
+     * Java Captain.
+     * <p>
+     * Note! If this method needs to create a new instance of comms client
+     * endpoint, the exitence of endpoint is tight to existence of instance
+     * of RuntimeUtils object. I.e. the endpoint is destroyd when the
+     * destructor is called.
+     * @param jvmStarter. User must provide a valid reference to JvmStarter.
+     *                    This method will append certain JVM arguments
+     *                    if some development features are set on. The
+     *                    same JvmStarter must be used for starting the JVM.
+     * @param askForArgs. If set to false, only thread dumping listening
+     *                    is enabled and no message is sent to Captain.
+     * @param applicationArgs. If askForArgs is true, this paramater must
+     *                         point to a wstring. The arguments for the
+     *                         application to be started will be returned in
+     *                         the wstring.
+     */
+    OS_IMPORT void enableDevelopmentFeatures(JvmStarter& jvmStarter,
+            bool askForArgs = false,
+            std::wstring *applicationArgs = NULL);
+    /**
+     * Finds the add-on JSRs from platform dependent repository.
+     * @param extendedBootClassPath a refernce to wstring where the method can store
+     *                              the boot classpath. If the there are no add-on JSRs,
+     *                              this will be empty wstring.
+     */
+    OS_IMPORT void getExtBootClassPath(std::wstring& extendedBootClassPath);
+
+private: // Classes
+
+private: // Methods.
+
+    /*
+     * No copy constructor allowed.
+     */
+    RuntimeStarterUtils(const RuntimeStarterUtils&);
+
+    /*
+     * No Assignment operator allowed.
+     */
+    RuntimeStarterUtils& operator= (const RuntimeStarterUtils&);
+
+    void addRuntimeArguments(const std::wstring& aRuntimeArgs, JvmStarter& jvmStarter);
+
+private: // Member variables.
+    java::comms::CommsClientEndpoint* mComms;
+    OsThreadSupervisor*               mSupervisor;
+    DevelopmentFeaturesListener*      mListener;
+};
+
+} // end namespace runtime
+} // end namespace java
+
+
+#endif // RUNTIMESTARTERUTILS_H