2009-07-08 8 views
9

Essendo stato principalmente un utente .NET fino a quando non ha iniziato un nuovo lavoro recentemente; Ho fatto solo sviluppo e consumo di servizi Web in C# /. Net. Tuttavia, mi sto imbarcando nel viaggio per imparare i dettagli della piattaforma J2EE e sono curioso di sapere quali sono le principali differenze in questo specifico tipo di sviluppo.Principali differenze tra J2EE e C# /. Net nello sviluppo di servizi Web

Nota: devo la familiarità con il linguaggio Java a/semplice livello di interfaccia della console, ma non molta esperienza con "Come comporre una funzionale architettura Web Service" usarlo.

Aggiornamento: Grandi risposte finora, volevo solo aggiungere, tuttavia, che nella semplice struttura di classe del servizio web non sembrano mostrare troppe differenze; ma che dire dalla prospettiva di mettere tutto insieme con la logica DB e in realtà ospitarla - far funzionare e lavorare il servizio/come interagisce con esso.

risposta

9

Mentre esiste un solo modo per eseguire servizi Web in .NET utilizzando la tecnologia Microsoft, i servizi Web Java sono molto frammentati. Vedi la domanda this per esempio. La maggior parte dei framework può eseguire sia i servizi Web first-first (che iniziano dal file WSDL) sia quelli code-first (inizia dal codice sorgente). Ogni framework ha anche il suo modo di ospitare il Web Service. Il framework Axis2, ad esempio, distribuisce i servizi Web come file AAR all'interno dell'Appis2 Web Application. Altri framework implementano i servizi Web all'interno di un file WAR (anche Axis2 può fare).

Per le persone che provengono da .NET a Java, è sempre un problema scegliere un framework di servizi Web. Anche l'integrazione con IDE non è così buona come con Visual Studio.

Se sei nuovo in J2EE, ti consiglio di dare un'occhiata al framework Spring. Spring dispone di un sottoprogetto (Spring-WS) che consente di creare servizi Web in base al contratto. L'integrazione con DB e la logica dell'applicazione è molto più semplice con un framework di distribuzione delle dipendenze come Spring. Apache CXF si integra perfettamente con Spring.

+0

Alcuni punti molto positivi - non mi preoccuperò di rispondere ora! Buon Consiglio. – serg10

+0

Non ho mai provato la primavera. È più semplice usare Spring for logic allora EJB3? –

+0

Molti diranno che la primavera è migliore di EJB3. È anche più versatile, in quanto non richiede un Application Server che implementa completamente lo standard JEE. EJB3 non è male, ma ti consiglio di investire il tuo tempo in primavera. – kgiannakakis

4

Non ho mai provato prima dei servizi Web ma di recente. E sono rimasto stupito da quanto sia semplice in Java con JAX-WS.

Qui è un servizio web

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

E questo è tutto.
Se è necessaria una logica aggiuntiva e un livello come le entità DB, viene aggiunta con la stessa facilità che potevo immaginare con EJB3.

Per quanto ho visto il modo C# di definire il servizio Web, non c'è alcuna grande differenza.

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

Credo che ci sia una differenza in ulteriore logica però.

3

Suggerirei di prendere la struttura Apache CXF per un giro. L'ho selezionato per un grande progetto qui al lavoro e lo funziona alla grande! Quali vantaggi offre questo su EJB3? Hmmm ... Non potrei dire se non che ho usato CXF, mentre EJB3 non è mai stato nella mia cucina (riferimento oscuro di Cheers).

Con CXF il codice non è molto più di una coppia di annotazioni qua e là. Utilizza le annotazioni JAXB standard per gli oggetti di marshalling. Via di configurazione è anche possibile inserire intercettori prima e dopo i servizi web chiede se si vuole fare la registrazione, ecc

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

Si noti che l'annotazione @WebParam è facoltativo, ma sembra più bello nel WSDL di cose del genere arg0. Sì, ci potrebbe essere un po 'di configurazione XML per andare insieme a quella:

<!-- 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" /> 

Per quanto riguarda i servizi web che consumano ... Leggendo gli Utenti CXF guida vi darà un assaggio di come questo è fatto: http://cwiki.apache.org/CXF20DOC/developing-a-consumer.html