Wie wähle ich zwischen Jersey, Apache Wink und JBoss RESTEasy? [geschlossen]

75

Ich habe gerade von Apache Wink gehört und mich gefragt, welche Unterschiede es zu Jersey oder JBoss RESTEasy hat . Was kann man in einem tun, was die anderen beiden nicht können?

Wir haben Jersey für einige unserer internen Projekte verwendet, hauptsächlich wegen seiner Einfachheit, aber ich kann nicht wirklich herausfinden, was diese beiden anderen besser macht, als ich einen Wechsel in Betracht ziehen würde. Hat jemand Anwendungsfälle für welche Nische jede dieser Füllungen?

Nick Klauer
quelle
Siehe auch: stackoverflow.com/q/80799/1725096
Jens Piegsa

Antworten:

114

JAX-RS-Implementierungen

Jersey

  • Referenzimplementierung
  • Normalerweise die modernste
  • Unterstützt echte asynchrone Verbindungen (z. B. Web-Sockets usw.) über die Atmosphere- oder 2.0-Version.
  • Unterstützt Feder- und Standardinjektionsbehälter (dh @Inject).
  • Glassfish bündelt es.
  • Es ist viel modularer als die anderen JAX-RS-Projekte.
  • Es hat einen Kick Ass URI Builder
  • Benötigt nicht unbedingt einen Servlet-Container.
  • Grizzly-Unterstützung
  • Kleine Unterstützung (sehr früh).
  • Prahlerunterstützung
  • Art von fehlendem OAuth 2.0. Sie müssen andere Bibliotheken verwenden.
  • Einige MVC-Unterstützung durch Viewables
  • Gehostet auf java.net (ein Minus, da die Seite manchmal furchtbar langsam ist).
  • Die Lizenzierung basiert auf CCDL 1.1 und GPL-v2. Bitte überprüfen Sie die Jersey-Lizenz, bevor Sie sie für kommerzielle Zwecke verwenden

https://jersey.github.io/license.html

Ruhig schlafen

Apache Wink (nie benutzt)

  • Ich habe keine Ahnung, warum dieses Projekt existiert.
  • Angeblich konzentriert sich seine hohe Leistung.
  • Es hat einen Client, der auf HttpUrlConnection basiert (was ein Minus ist ... es sollte wie Spring RestTemplate steckbar sein ).
  • Grundsätzlich wurde Wink bei einigen Unternehmen im eigenen Haus entwickelt und dann an Apache übergeben.
  • Benötigt einen Servlet-Container.

Restlet

  • Sehr mächtig aber sehr kompliziert
  • Bietet REST-Unterstützung auf niedriger Ebene
  • Benötigt keinen Servlet-Container

Apache CXF

  • Einige interessante WADL-Unterstützung.
  • JAX-RS mit JAX-WS wiederverwenden und / oder kombinieren
  • Sicherheitsunterstützung
  • Integration mit Frühling, wenn auch irgendwie böse
  • Angebliche automatische Generierung von Client-Stubs

Andere RPC-ähnliche Systeme

Nachrichtenwarteschlangen

Asynchroner RPC

Meine bescheidene Meinung

Ich weiß, dass das OP nach REST gefragt hat, aber wenn dies für die interne Kommunikation vorgesehen ist, sollten Sie ernsthaft in Betracht ziehen, entweder eine Nachrichtenwarteschlange oder einen anderen asynchronen RPC (Finagle) anstelle von herkömmlichem REST zu verwenden, wenn Ihre Anforderungen diesen Systemen entsprechen.

Wenn es sich um klassisches HTTP-REST (extern) handeln muss, würde ich zwischen RestEasy und Jersey wählen, da ein Großteil des Mind- Shares in diese beiden Projekte fließt .

Siehe auch: Rest Clients für Java?

Adam Gent
quelle
1
Ich empfehle Jersey (ich habe nur Version 2.5.1 ausprobiert) kein bisschen. Es ist äußerst schwierig, es zu konfigurieren und einzurichten.
Muhammad Gelbana
Können Sie erklären, warum Restlet aus Ihrer Sicht kompliziert ist? Schauen Sie sich das Beispiel der ersten Schritte an: restlet.org/learn/guide/2.2/introduction/first-steps/…
Jerome Louvel
Vielleicht ist "kompliziert" nicht das richtige Wort und Restlet hat sich ebenfalls entwickelt. Ich denke, wenn ich mir Restlet anschaue, scheint es viel mehr Zeug als Jaxrs zu sein. Es ist wahrscheinlich die umfassendste Rest-Server-Bibliothek, daher die "komplizierte".
Adam Gent
2
Es hat einen viel breiteren REST / HTTP-Funktionsumfang, 6 Editionen, 44 Editionen und gibt es seit 2005, aber sein Kern org.restlet.jar ist sehr kompakt (keine Abhängigkeit), einheitlicher Client und Server. Schauen Sie sich unser Beispiel für die ersten Schritte an, um zu sehen, wie Sie in 5 Minuten loslegen können, ohne einen Servlet-Container oder eine XML-Konfiguration konfigurieren zu müssen. Trotzdem
Jerome Louvel
15

Beachten Sie bei der Auswahl der zu verwendenden Implementierung Folgendes: Wenn Sie versuchen, einen Jersey-Webdienst für JBOSS 7.1 bereitzustellen, funktioniert dies nicht. Dieser Fehler tritt auf:

Only one JAX-RS Application Class allowed

Dies liegt daran, dass REST Easy mit JBOSS als Standard-JAX-RS-Implementierung geliefert wird. JBOSS entscheidet also, dass dies die Implementierung ist, die Sie verwenden möchten, und lädt keine weitere JAX-RS-Implementierung (wie Jersey). Um dies zu beheben, müssen Sie Ihrer web.xml-Datei die folgenden Zeilen hinzufügen:

  <context-param>
   <param-name>resteasy.scan</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param> 
   <param-name>resteasy.scan.providers</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param>
   <param-name>resteasy.scan.resources</param-name>
   <param-value>false</param-value>
  </context-param>

Link: https://community.jboss.org/message/744530

Tihomir Meščić
quelle
6
Dies sind sehr nützliche Informationen (obwohl sie eine andere Frage beantworten).
Rick-777
Meine Vermutung ist (seit ich mit JBOSS gearbeitet habe), dass Sie den bereitgestellten JAX-RS in JBOSS ausschließen können. Oder Sie können es in Ihrem Pom ausschließen. Fazit: Dies ist ein Problem, das Sie umgehen können.
Johanneke
5

Eine meiner Lieblings- Jersey- Erweiterungen ist Viewables. Mit Viewables können Sie Ihre Daten einfach an eine JSP-Seite binden, um eine echte MVC-Architektur (Model-View-Controller) zu implementieren:

bdoughan
quelle
2
Sie haben diesen Kommentar mehr als einmal abgegeben. Ich würde das Gegenteil sagen. YMMV.
Rick-777
1

Wenn Sie JBoss 7.x verwenden möchten, müssen Sie RestEasy verwenden, da es in JBoss integriert ist. Um Jersey mit JBoss 7.x zu verwenden, müssen Sie RestEasy deaktivieren und es ist kompliziert!

Rick-777
quelle
1
Siehe die Antwort von Tihomir Meščić.
Rick-777