2010-11-11 14 views
6

Ich habe eine kleine Webanwendung mit Guice, Jersey und EclipseLink konfiguriert und führe diese Anwendung während der Entwicklung auf Jetty (8.0.0.M1) aus. Es gibt etwa 10 (kleine) JPA-verwaltete Klassen (Entitäten und eingebettete Tabellen) und insgesamt etwa 20 Klassen.Anwendungsstart auf Jetty beschleunigen

Der erste Start dauert 15 Sekunden + 5 Sekunden für die ersten Anfragen. Es sieht so aus, als würde JPA die erste Anfrage bearbeiten, da ich die Tabellengenerierungsstrategie "create" aktiviert habe und bei der ersten Anfrage eine JPA-Ausgabe von Maven sehe.

Ein Nachladen dauert etwa 10 Sekunden und die erste Anforderung nach dem erneuten Laden dauert etwa 3 bis 4 Sekunden.

Sie denken vielleicht, dass die Startzeit nicht so schlecht ist, aber ich frage mich, ob ich den Start beschleunigen könnte, um flüssiger zu arbeiten wie mit Django. Irgendeine Idee für Start-Tuning?

+0

Geht es Ihnen um die Startzeit an sich oder darum, dass der erste Benutzer die Startkosten bezahlen muss? Wenn es Letzteres ist, könnten Sie Ihre Anwendung beim Start an sich selbst senden lassen, um sie aufzuwärmen. Dann sieht der erste Benutzer eine normale Antwortzeit. –

+0

Mein Problem ist die Startzeit während der Entwicklung. Neustarts sind in der Produktion relativ selten, daher würde ich akzeptieren, dass der erste Benutzer ein paar Sekunden warten muss. – deamon

+1

Wenn Sie aufgrund von Codeänderungen neu starten (keine Schemaänderungen), versuchen Sie, Neustarts (fast) komplett mit JRebel (http://www.zeroturnaround.com/jrebel/) zu vermeiden. Es ist nicht kostenlos, aber es spart viel Zeit (ich bin auf keinen Fall mit ihnen verbunden). – DaGGeRRz

Antwort

2

Ich fürchte, wenn Sie nicht bereit sind, die Tabellenerstellungsstrategie zu entfernen, müssen Sie solche Ladezeiten tolerieren. Jedes Mal, wenn Sie Ihre Anwendung starten, werden die Tabellen gelöscht/erstellt/überprüft und die richtigen DDL-Anweisungen ausgegeben, damit sie mit den Entitäten in Ihrem Paket übereinstimmen.

Vorausgesetzt, dass Sie Ihre Entitäten definiert haben und an einem Geschäftslogikcode arbeiten, können Sie die Datenbank einmal erstellen und die Ersteinrichtung erneut verwenden.

0

Ich kann mir vorstellen, dass Sie Jetty für die schnelle Anwendungsentwicklung (RAD) verwenden und Sie Änderungen so schnell wie möglich sehen und testen möchten. Wenn in der Datenbank Ihrer RAD-Umgebung keine "persistente" Anforderung vorhanden ist, können Sie versuchen, zu einer Im-Memory-DB-Engine zu wechseln. DB-Engines wie HSQL ermöglichen es Ihnen, neue Tabellen (und andere Strukturen) im Vergleich zu tatsächlichen DB-Engines in Produktionsqualität sehr schnell hochzufahren. Dies würde erfordern, dass Sie ein ORM verwenden, weil HSQLs SQL sich sehr von den meisten anderen Datenbanken unterscheidet, aber es klingt, als ob Sie bereits JPA verwenden, also sollte dies nicht schwierig sein.

Die einzige Alternative, die ich sehe, ist die Verwendung einer Datenbank, deren Schema bereits korrekt erstellt wurde und nicht jedes Mal gelöscht wird.

+0

Ich benutze bereits eine In-Memory-DB (Derby). – deamon