2010-06-23 3 views
17

Es gibt eine demo by IBM, die zeigt, wie einfach Reverse AJAX mit DWR 2 verwendet werden kann. Auf der anderen Seite kommt Scala/LIFT mit eingebauter Reverse AJAX-Fähigkeit.Reverse AJAX (Comet) und Spring MVC vs Scala/LIFT?

  1. Frage: Irgendwelche Erfahrungen, wenn das mit Spring MVC gut funktioniert?

  2. Frage: Wenn Sie von Grund auf neu beginnen würde, was sind die Vor- und Nachteile für die Bevorzugung Scala/LIFT über DWR/Spring MVC

  3. Frage: Scala/LIFT ist die Sicherheit der Handhabung so anspruchsvoll wie im Frühjahr Sicherheit?

Antwort

11

Aufzug Komet Architektur, die von Novell ausgewählt wurde ihr Pulse Produkt an der Macht, nachdem sie eine Reihe verschiedener Technologien bewertet.

Die Comet-Implementierung von Lift verwendet eine einzige HTTP-Verbindung, um Änderungen an einer beliebigen Anzahl von Komponenten auf der Seite abzufragen. Jede Komponente hat eine Versionsnummer. Die lange Umfrage enthält die Versionsnummer und die Komponenten-GUID. Auf der Serverseite ist ein Listener an alle GUIDs angehängt, die in den langen Abfrageanforderungen aufgelistet sind. Wenn eine der Komponenten eine höhere Versionsnummer hat (oder die Versionsnummer während des Zeitraums der langen Abfrage zunimmt), werden die Deltas (ein JavaScript-Satz, der die Änderung von jeder Version beschreibt) an den Client gesendet. Die Deltas werden angewendet und die Versionsnummer auf dem Client wird auf die höchste Versionsnummer für den Änderungssatz gesetzt.

Lift integriert lange Abfragen mit Sitzungsverwaltung. Wenn eine Anfrage während einer langen Abfrage, die Verbindungsstau verursachen würde, in dieselbe URL gelangt, wird die lange Abfrage beendet, um Verbindungsstau zu vermeiden (einige Browser haben maximal 2 HTTP-Verbindungen) pro named Server, andere haben maximal 6). Lift unterstützt auch DNS-Carded-Server für lange Poll-Anfragen, so dass jede Registerkarte im Browser lange Abfragen gegen einen anderen DNS-Server mit Platzhalter ausführen kann. Dies vermeidet die Verbindungsprobleme.

Lift erkennt dynamisch den Container, in dem das Servlet läuft und auf Jetty 6 & 7 und (bald) Glassfish, Lift wird die "Fortsetzungs" -Implementierung der Plattform verwenden, um einen Thread während der langen Abfrage zu vermeiden.

Lift's JavaScript kann auf jQuery und YUI gesetzt werden (und könnte auch auf Prototype/Scriptaculous gesetzt werden.) Der eigentliche Abrufcode enthält Back-Off bei Verbindungsfehlern und andere "grazile" Möglichkeiten zum Umgang mit transienten Verbindungen Fehler.

Ich habe Atmosphere, CometD, Akka (alle JVM-orientierte Kometen-Technologien) angeschaut. Keiner hatte (zu der Zeit, als ich sie auswertete) Unterstützung für mehrere Komponenten pro Seite oder Verbindungsverminderungsvermeidung.

Novell startete von Grund auf neu und wählte Lift, um Pulse aus sehr guten Gründen mit Strom zu versorgen.

In puncto Sicherheit schlägt Lift Feders + Spring Security die Hände. Siehe http://www.mail-archive.com/[email protected]/msg13020.html

Grundsätzlich ist die Sicherheit von Lift in Ihre Anwendung integriert. Lift-Apps sind standardmäßig gegen gängige Probleme (Cross-Site-Scripting, Replay-Angriffe, Cross-Site-Request-Fälschungen) resistent. Lift Apps sind standardmäßig gegen Parametermanipulationen resistent. Die Sitemap von Lift definiert Site-Navigation und Zugriffskontrollregeln. Das bedeutet, dass Sie nie einen Link haben, auf den jemand nicht klicken kann. Sie brauchen keinen externen Filter (z. B. Spring Security), den Sie unabhängig von Ihrer App konfigurieren müssen (Whoops ... hat eine Seite verschoben, aber vergessen, die Spring Security-XML-Datei zu aktualisieren.)

Oh ... und wenn Sie nicht über eine Template-Sprache verwenden möchten, ist hier eine komplette Aufzug Comet Chat-Komponente:

class Chat extends CometActor with CometListener { 
    private var msgs: List[String] = Nil 

    def registerWith = ChatServer 

    override def lowPriority = { 
    case m: List[String] => msgs = m; reRender(false) 
    } 

    def render = { 
    <div> 
    <ul> 
    { 
     msgs.reverse.map(m => <li>{m}</li>) 
    } 
    </ul> 
    <lift:form> 
    { 
     SHtml.text("", s => ChatServer ! s) 
    } 
    <input type="submit" value="Chat"/> 
    </lift:form> 
    </div> 
    } 
} 

und das in eine Seite einfügen: <lift:comet type="Chat"/>

+1

Hey David, danke für die sehr nützliche Antwort. Ich hatte bereits den Eindruck, dass es keine Alternative zu Lift gibt, und jetzt weiß ich, dass diese Annahme richtig war. Also ... Scala ... eine andere Sprache für mich zu lernen ... :-( –

+0

Wir freuen uns auf Sie auf der Google Group Lift Group http://groups.google.com/group/liftweb zu sehen –

2
  1. Aus meiner Sicht ist Spring MVC eine sehr schlechte Wahl AJAXed/COMETed RIA aufzubauen. Die ModelAndView-Komponente, die mit HTML-Formularen arbeiten und die gesamte Seite auf einmal rendern soll, Tag-Bibliotheken und Validierungsroutinen sind alle besser geeignet für eine altmodische Entwicklung, basierend auf JSPs und Templates. Für mich ist der Anschluss von AJAX/COMET an Spring MVC immer eine Art Hack. Wenn Sie jedoch RESTful-Services mit @MVC erstellen (JSON mit Ihrer JavaScript-Benutzeroberfläche austauschen), funktioniert es möglicherweise (obwohl ich Jersey/JAXB für diese Angelegenheiten bevorzugen würde).
  2. LIFT wurde ursprünglich entwickelt, um mit COMET zu arbeiten, also wird es eine bessere Wahl sein. Obwohl ich etwas viel leichteres und vorlagenloses wählen würde, als LIFT (wie für mich, leidet es an der gleichen Krankheit, die Spring MVC tut).
  3. Die beiden Sicherheitssysteme decken nur grundlegende Szenarien ab und erfordern eine Vielzahl von Anpassungen, die in realen Projekten verwendet werden können.

    Das ist, was ich für den Aufbau COMETed RIA in Scala verwenden würde:

    (mit JS UI über HTTP/JSON leichte RESTful Dienste zu kommunizieren) + Atmosphere (skalierbare Lösung für den Aufbau COMETed Anwendungen) + jede JS
    • Jersey Rahmen (jquery, YUI, ext js, ...). Sie sollten sich auch die Akka Framework ansehen, die sowohl in Jersey als auch in Atmosphere integriert ist und Ihnen ermöglicht, RIA-Web-Apps in idiomatischer Scala zu erstellen. Hier ist ein pub-sub COMET example in Akka.
    • Vaadin + ICEPush. Es wird eine sehr komfortable Kombination für Sie sein, wenn Sie Ihre Hand nicht mit JS schmutzig machen wollen (obwohl ICEpush noch keine unternehmensreife Lösung ist).
0

eine weitere Alternative, reines Java (oder mit einer anderen JVM-Sprache einschließlich Scala) centric ist ItsNat Comet.