2009-07-08 6 views
9

Ayant été principalement un type .NET jusqu'à ce qu'il commence un nouveau travail récemment; J'ai seulement fait le développement et la consommation de Web-Service en C# /. Net. Cependant, je me lance dans le voyage pour apprendre les tenants et aboutissants de le faire sur la plate-forme J2EE, et je suis curieux de savoir quelles sont les différences majeures dans ce type de développement spécifique. Je connais le langage Java au niveau de la console/interface simple, mais je n'ai pas beaucoup d'expérience avec "Comment mettre en place une architecture de service Web fonctionnelle" en l'utilisant. Excellentes réponses jusqu'à présent, je voulais juste ajouter cependant que dans la structure de classe de service Web simple, ils ne semblent pas afficher trop de différences; mais que diriez-vous du point de vue de mettre tout cela ensemble avec la logique de DB et l'hébergeant réellement - obtenant le service fonctionnant et fonctionnant/comment son interaction avec.Différences majeures entre J2EE et C# /. Net lors du développement de services Web

Répondre

9

S'il existe une seule façon de faire des services Web dans .NET en utilisant Microsoft Technology, les services Web Java sont très fragmentés. Voir this question par exemple. La plupart des frameworks peuvent traiter à la fois les services Web first-contract (début à partir du fichier WSDL) et le code-first (début à partir du code source). Chaque framework a également sa façon d'héberger le Web Service. Axis2 framework par exemple déploie les services Web en tant que fichiers AAR dans l'application Web Axis2. D'autres frameworks déploient les services Web dans un fichier WAR (Axis2 peut également le faire).

Pour les personnes venant de .NET vers Java, il est toujours difficile de choisir un framework de services Web. L'intégration IDE n'est pas aussi bonne qu'avec Visual Studio.

Si vous êtes nouveau dans J2EE, je recommande de jeter un oeil à Spring framework. Spring a un sous-projet (Spring-WS) qui vous permet de créer des services Web de premier contrat. L'intégration avec DB et la logique applicative est beaucoup plus facile avec un framework d'injection de dépendances comme Spring. Apache CXF s'intègre également bien avec Spring.

+0

Quelques très bons points là-bas - je ne prendrai pas la peine de répondre maintenant! Bon conseil. – serg10

+0

Je n'ai jamais essayé le printemps. Est-il plus facile d'utiliser Spring pour la logique puis EJB3? –

+0

La plupart diront que le printemps est meilleur que l'EJB3. Il est également plus polyvalent, car il ne nécessite pas un serveur d'application intégralement implémentant la norme JEE. EJB3 n'est pas mauvais non plus, mais je recommande d'investir votre temps au printemps. – kgiannakakis

4

Je n'ai jamais essayé avant les services Web, mais récemment. Et j'ai été surpris par la simplicité de Java avec JAX-WS.

Voici un service Web

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

Et voilà.
Si vous avez besoin d'une logique et d'un niveau supplémentaires comme les entités DB, il est ajouté aussi facilement que je ne pouvais qu'imaginer avec EJB3.

Pour autant que je viens de voir la façon C# de définir le WebService, il n'y a pas de grande différence du tout.

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

Je crois cependant qu'il existe une différence de logique supplémentaire.

3

Je suggère de prendre le cadre Apache CXF pour une rotation. Je l'ai sélectionné pour un projet majeur ici au travail et fonctionne très bien! Quels avantages cela vous donne-t-il sur EJB3? Hmmm ... Je ne pourrais pas dire si ce n'est que j'ai utilisé CXF, alors que EJB3 n'a jamais été dans ma cuisine (obscure référence Cheers).

Avec CXF le code n'est pas beaucoup plus que quelques annotations ici et là. Il utilise des annotations JAXB standard pour les objets de rassemblement. Via la configuration, il est également possible de placer les intercepteurs avant et après les services Web appelle si vous voulez faire l'exploitation forestière, etc.

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

Notez que l'annotation @WebParam est facultative, mais il semble plus agréable dans le WSDL que des choses comme arg0. Oui, il pourrait y avoir un peu de configuration XML pour aller avec ce qui suit:

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

En ce que la consommation des services web ... La lecture des utilisateurs CXF Guide vous donnera un avant-goût de la façon dont cela est fait: http://cwiki.apache.org/CXF20DOC/developing-a-consumer.html

Questions connexes