Sie können Startklassen definieren, die beim Serverstart automatisch geladen werden. Diese Funktion gestattet es Ihnen, Java-Code zu schreiben, der ausgeführt wird, wenn der MobiLink-Server JVM startet, also vor der ersten Synchronisation. Das bedeutet, dass Sie vor der Synchronisationsanforderung eines Benutzers Verbindungen oder Cachedaten erstellen können.
Hierzu verwenden Sie die Option DMLStartClasses der mlsrv11-Option -sl java. Die mlsrv11-Befehlszeile kann beispielsweise Folgendes enthalten. Damit wird bewirkt, dass mycl1 und mycl2 als Startklassen geladen werden.
-sl java(-DMLStartClasses=com.test.mycl1,com.test.mycl2) |
Klassen werden in der Reihenfolge geladen, in der sie aufgelistet sind. Wenn dieselbe Klasse mehr als einmal aufgelistet ist, wird mehr als eine Instanz erstellt.
Alle Startklassen müssen "public" sein und einen öffentlichen Konstruktor haben, der keine Argumente oder ein Argument vom Typ ianywhere.ml.script.ServerContext akzeptiert.
Die Namen der geladenen Startklassen werden mit der Meldung "Java-Startklasse geladen: Klassenname" in der MobiLink-Protokolldatei ausgegeben.
Weitere Hinweise zu den Optionen der Java Virtual Machine finden Sie unter Option -sl java.
Welche Startklassen beim Serverstart erstellt werden, finden Sie unter getStartClassInstances-Methode.
Im Folgenden sehen Sie eine Vorlage für eine Startklasse. Sie startet einen Daemon-Thread, der Ereignisse verarbeitet und eine Datenbankverbindung erstellt. (Nicht alle Startklassen müssen einen Thread erstellen, aber wenn ein Thread angestoßen wird, muss es sich um einen Daemon-Thread handeln.)
import ianywhere.ml.script.*; import java.sql.*; public class StartTemplate extends Thread implements ShutdownListener { ServerContext _sc; Connection _conn; boolean _exit_loop; public StartTemplate(ServerContext sc) throws SQLException { // Perform setup first so that an exception // causes MobiLink startup to fail. _sc = sc; // Create a connection for use later. _conn = _sc.makeConnection(); _exit_loop = false; setDaemon(true); start(); } public void run() { _sc.addShutdownListener(this); // run() cannot throw exceptions. try { handlerLoop(); _conn.close(); _conn = null; } catch(Exception e) { // Print some error output to the MobiLink log. e.printStackTrace(); // This thread shuts down and so does not // need to be notified of shutdown. _sc.removeShutdownListener(this); // Ask server to shutdown so that this fatal // error is fixed. _sc.shutdown(); } // Shortly after return this thread no longer exists. return; } // stop our event handler loop public void shutdownPerformed(ServerContext sc) { try { // Wait max 10 seconds for thread to die. join(10*1000); } catch(Exception e) { // Print some error output to the MobiLink log. e.printStackTrace(); } } private void handlerLoop() throws InterruptedException { while (!_exit_loop) { // Handle events in this loop. Sleep not // needed, block on event queue. sleep(1 * 1000); } } } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |