2009-07-08 3 views
9

Nachdem ich in letzter Zeit hauptsächlich ein .NET-Typ war, bis ich vor kurzem einen neuen Job startete; Ich habe nur Web-Service-Entwicklung und -Verbrauch in C# /. Net gemacht. Ich gehe jedoch auf die Reise, um das Wesentliche auf der J2EE-Plattform zu lernen, und ich bin gespannt, was die Hauptunterschiede bei dieser speziellen Art der Entwicklung sind.Hauptunterschiede zwischen J2EE und C# /. Net bei der Entwicklung von Web Services

Hinweis: Ich habe Vertrautheit mit der Java-Sprache auf der Konsole/einfache Schnittstelle Ebene, aber nicht viel Erfahrung mit "Wie man eine funktionale Web-Service-Architektur zusammen" mit ihm.

Update: Große Antworten bisher, ich wollte nur hinzufügen, dass in der einfachen Web-Service-Klassenstruktur sie nicht zu viele Unterschiede anzeigen; Aber wie wäre es, wenn man alles mit der Logik von DB zusammenfasst und sie tatsächlich hostet - den Service zum Laufen bringt und funktioniert/wie er damit interagiert.

Antwort

9

Während es nur eine Möglichkeit gibt, Web-Services in .NET mit Microsoft-Technologie auszuführen, sind Java Web Services sehr fragmentiert. Siehe zum Beispiel this Frage. Die meisten Frameworks können sowohl die Webdienste "Vertrag zuerst" (von der WSDL-Datei starten) als auch "Code zuerst" (Start von Quellcode) verwenden. Jedes Framework hat auch die Möglichkeit, den Web Service zu hosten. Axis2 Framework zum Beispiel stellt die Web-Services als AAR-Dateien innerhalb der Axis2 Web Application bereit. Andere Frameworks stellen die Web-Services in einer WAR-Datei bereit (Axis2 kann dies ebenfalls tun).

Für Leute, die von .NET nach Java kommen, ist es immer ein Problem, ein Web Services Framework auszuwählen. IDE-Integration ist auch nicht so gut wie bei Visual Studio.

Wenn Sie neu in J2EE sind, empfehle ich Spring Framework zu betrachten. Spring verfügt über ein Unterprojekt (Spring-WS), mit dem Sie Vertragstext-Webdienste erstellen können. Die Integration mit DB und Anwendungslogik ist mit einem Framework zur Abhängigkeitsinjektion wie Spring viel einfacher. Apache CXF lässt sich auch gut mit Spring integrieren.

+0

Einige sehr gute Punkte dort - ich werde nicht die Mühe machen, dies jetzt zu beantworten! Guter Rat. – serg10

+0

Ich habe nie Frühling versucht. Ist es einfacher, Spring für Logik als EJB3 zu verwenden? –

+0

Die meisten werden sagen, dass Spring besser ist als EJB3. Es ist auch vielseitiger, da es keinen Application Server erfordert, der den JEE-Standard vollständig implementiert. EJB3 ist auch nicht schlecht, aber ich empfehle dir, deine Zeit in Spring zu investieren. – kgiannakakis

4

Ich habe noch nie zuvor Web-Services versucht, aber vor kurzem. Und ich war erstaunt, wie einfach es in Java mit JAX-WS ist.

Hier ist ein Web-Service

@WebService 
class BusinessProcess implements IBusinessProcess 
{ 
    public HelloWorldObject helloWorld() 
    { 
     return new HelloWorldObject("Earth"); 
    } 
} 

Und das ist es.
Wenn Sie eine zusätzliche Logik und Ebene wie DB-Entitäten benötigen, wird es so einfach hinzugefügt, wie ich es mir nur mit EJB3 vorstellen konnte.

Soweit ich gerade die C# -Wege zur Definition des WebService gesehen habe, gibt es keinen großen Unterschied.

[WebService(...)] 
    public class BusinessProcess : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public HelloWorldObject helloWorld() 
     { 
      return new HelloWorldObject("Earth"); 
     } 
    } 

Ich glaube, es gibt jedoch einen Unterschied in der weiteren Logik.

3

Ich würde vorschlagen, die Apache CXF Rahmen für eine Drehung zu nehmen. Ich wählte es für ein Großprojekt hier bei der Arbeit und es funktioniert super! Welche Vorteile bietet Ihnen das EJB3? Hmmm ... Ich konnte nicht sagen, außer dass ich CXF benutzt habe, während EJB3 noch nie in meiner Küche war (obskure Cheers-Referenz).

Mit CXF ist der Code nicht viel mehr als ein paar Anmerkungen hier und da. Es verwendet JAXB-Standardannotationen zum Marshallen von Objekten. Via Konfiguration ist es auch möglich, Abfangjäger zu platzieren, bevor und nachdem die Web-Services ruft, wenn Sie die Protokollierung tun wollen, usw.

@WebService 
public interface UserService { 
    public Collection<User> getUsers(@WebParam(name = "systemID") Long sysID); 
} 

Beachten Sie, dass die @WebParam Anmerkung ist optional, aber es sieht besser aus in der WSDL als solche Sachen arg0. Ja, es könnte ein wenig von XML-Konfiguration mit, dass zu gehen zusammen:

<!-- the #userService is a reference to a Spring bean defined elsewhere --> 
<jaxws:endpoint id="userWS" implementor="#userService" 
    implementorClass="com.blah.blah.blah.UserServiceImpl" 
    address="/UserService" /> 

Soweit Webdiensten ... Lesen des CXF Users Guide gibt Ihnen einen Eindruck, wie das getan: http://cwiki.apache.org/CXF20DOC/developing-a-consumer.html

Verwandte Themen