2011-01-10 9 views
4

Ich habe ein Projekt, das die ScriptEngine verwendet, um einige Javascript zu verarbeiten, und funktionierte gut auf meinem Computer, aber wenn ich das Projects-Jar an den Server schickte, hatte ich entdeckt, dass die JVM des Servers nicht Rhino gebaut hat -in, null zurückkehrt, wenn der Code ruft einJVM fehlt Rhino

new ScriptEngineManager().getEngineByName("javascript"); 

ich rhino-Downloadseite ging, bekommen die neueste Version, und extrahiert die js.jar daraus, hinzugefügt, um das Glas auf dem Projekt, aber noch haben Dasselbe Problem.

+0

Das ist ziemlich komisch. Welche JVM-Version unterstützt der Server? In jedem Fall wird es nicht helfen, nur das Rhino-Glas zu ergänzen - die Sun-Version wird auf andere Weise initialisiert. Ich weiß nicht, wo Sie eine JDK6-VM bekommen würden, die Rhino nicht enthält. – Pointy

+0

Andrei, das braucht mehr Details. Was läuft auf dem Server (Tomcat, JBoss, Apache alleine)? Der übliche Grund dafür würde etwas mit Ihrem Klassenpfad zu tun haben und wie Sie das Glas zum Projekt hinzugefügt haben. –

+0

Server: FreeBSD 8.1-STABLE FreeBSD 8.1-STABLE Java: Diablo Java (TM) SE Laufzeitumgebung (Build 1.6.0_07-b02) Diablo Java HotSpot (TM) 64-Bit-Server-VM (Build 10.0-b23, gemischter Modus) Ich benutze Eclipse um das Projekt zu entwickeln, also habe ich das jar so hinzugefügt: Projekt> Eigenschaften> Java Build Pfad> Bibliotheken> Krug hinzufügen –

Antwort

10

Die JavaScript Engine ist nur im Sun/Oracle JDK enthalten. Wenn Sie eine andere Java-Implementierung wie IBM J9 oder Oracle JRockit verwenden (sehr wahrscheinlich auf einem Server), oder wenn Sie nicht das Sun/Oracle JDK, sondern die Sun/Oracle JRE verwenden (noch wahrscheinlicher auf einem Server), dann Sie Erhalte die JavaScript-Engine nicht.

Sie müssen Suns vollständiges JDK verwenden.

Beachten Sie auch, dass die mit JDK6 ausgelieferte JavaScript-Engine ist, nicht Rhino, es ist eine abgespeckte lobotomisierte Version einer mehrjährigen Obsolote-Version von Rhino. Insbesondere fehlt der Compiler, was bedeutet, dass die Performance wahrscheinlich schlecht wird.

Beachten Sie auch, dass die API nicht unbedingt kompatibel ist zwischen Rhino und der JDK6-JavaScript-Engine, , auch wenn Sie die veraltete Version von Rhino finden, auf der es basiert. Wenn Sie Rhino in der Bereitstellung verwenden möchten, sollten Sie es besser auch in der Entwicklung verwenden.

Und nicht zuletzt: nur weil Sie einen Eintrag in Ihrer Eclipse-Projektdatei machen, heißt das nicht, dass sich der Klassenpfad Ihres Servers magisch ändern wird. Sie müssen sicherstellen, dass alle Klassenpfade ordnungsgemäß eingerichtet sind. Ich habe keine Erfahrung mit FreeBSD, aber ich bin mir ziemlich sicher, dass das Paketverwaltungssystem (in diesem Fall FreeBSD-Ports) nach einer port install rhino zumindest teilweise dafür sorgen wird.

+0

+1 Whoa !! Das ist eine Menge Informationen. Ich mag es. – Favonius

+0

Eine genaue Beschreibung dessen, was in der JDK6-Version von Rhino fehlt oder anders ist, finden Sie hier: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsengine – LeoR