32 votes

Middleware et SOA par l'exemple

Je suis un inexpérimenté développeur Java essayer d'envelopper ma tête autour de quelques fondamentaux middleware/concepts SOA et des technologies, en particulier:

  • L'Architecture Orientée Service (SOA)
  • Middleware Orienté Message (MOM)
  • Message De La File D'Attente
  • Apache Camel
  • Mule
  • Les ejb
  • Les Systèmes D'Extrémité Et Des Routes
  • Service de Bus/ESB
  • JMS

Après avoir examiné chacun de ces en ligne/sur Wikipédia, j'ai pu obtenir (pour la plupart) décent définitions pour chacun de ces. Ce que je ne suis pas la compréhension est la façon dont toutes ces technologies et les concepts de travailler ensemble sur le backend de fournir un 2e/couche d'entreprise solution.

Quelqu'un peut-il me donner un exemple d'une architecture qui permettrait d'utiliser toutes ces technologies et les concepts, et d'expliquer ce rôle de chacun d'entre eux jouent dans l'ensemble de la solution? Une fois que je vois un exemple de travail je suis sûr que cela va m'aider à connecter la plupart des points.

Edit: Depuis que j'ai ajouté le bounty, j'ai eu plusieurs réponses qui suggère la lecture de livres. Bien que j'apprécie tous les commentaires ici, je ne peux tout simplement pas partie des manières avec 300 points de réputation pour une réponse qui, pour l'essentiel, se résume à "RTM" (surtout quand je suis à plat cassé et ne peut pas se permettre le manuel!!!) Pour rappel, la générosité et de la réponse définitive sera d'aller vers quelqu'un qui peut frapper toutes ces balles dans un sens, exemple pratique. Ce ne doit pas être un middleware recueil!!! Juste un paragraphe ou deux qui montre comment tous ces éléments peuvent être utilisés ensemble en harmonie pour produire une Java d'affaires de la couche de la solution. Merci encore.

22voto

Pangea Points 36713

SOA grands principes: la construction de systèmes comme l'ensemble des services où chaque service est

  • Coarse-grain
  • Interopérable
  • Faiblement couplé

La compagnie offre beaucoup de services aux entreprises (gros grains) a développé depuis de nombreuses années et exposées aux utilisateurs (humains ou d'autres systèmes) dans une certaine forme. Il y a plus de chances que chacun de ces éléments ont été conçus et développés de ne pas garder ces trois principes à l'esprit. En outre, chacune de ces fonctions peut être en cours d'exécution sur diverses plateformes hétérogènes, à l'aide de différentes technologies, etc.

Si vous souhaitez intégrer ces divers aspects ainsi la création de nouvelles solutions (Par exemple Amazon store front est un nouveau service composé de leur catalogue de service, service de panier, etc)?

Vous avez deux choix:

  1. La construction de la nouvelle fonctionnalité à partir de zéro en gardant les 3 principes à l'esprit. Mais c'est une entreprise coûteuse, et qui est presque jamais réussi.
  2. Un moyen efficace et moins risqué alternative consiste à assembler/le composent existantes et éprouvées (bien testé) services.

L'Option 2 est l'endroit où l'ESBs peut aider avec leur soutien pour le routage, la transformation, le suivi, etc. Apache Camel, Mule sont ESB open-source de. Les systèmes d'extrémité et des Routes sont de la terminologie utilisée dans EIP (Enterprise Integration Patterns) que ces ESB de la mettre en œuvre. ESB peuvent prendre l'aide de MAMAN quand ils veulent/itinéraire intégrer les services qui s'exécutent sur des plates-formes hétérogènes (Par exemple, le catalogue de service est peut-être en cours d'exécution sur un système central, mais le panier est mis en œuvre en utilisant les Ejb stateful cours d'exécution dans un serveur d'Application Java). Message de la file d'attente est un concept à MAMAN que les actes de stockage temporaire des messages entre l'émetteur et le récepteur. Ce stockage temporaire fournit beaucoup d'avantages comme la livraison asynchrone, garantie de livraison, etc. Maintenant, il peut y avoir plusieurs MAMAN fournisseurs comme IBM (WebSphere MQ), open-source, ActiveMQ, etc. Nous pouvons utiliser JMS pour garder votre code indépendant du vendeur.

J'ai essayé de mettre en rapport tous les concepts avec un exemple. J'ai aussi essayé de le garder court. Merci poser des questions pour mieux comprendre.

MAMAN n'est pas une obligation de mettre en œuvre de la SOA. Par exemple, si tous vos services sont exposés sur SOAP via HTTP, alors vous n'a pas besoin d'une MAMAN dans ce cas.

10voto

neo Points 448

Des classes Java/exemple pour chaque technologie. pourrait ne pas être possible dans un seul post, parce que ce que vous avez demandé, c'est l'évolution de l'industrie qui s'est déroulé en dernière décennie et continue d'évoluer. Donc, ce qui s'est passé au cours de la dernière décennie ne peut pas être couverts dans un post. Toutefois, il est bon de comprendre comment il est passé par cette phase et pourquoi la nouvelle technologie de pile nécessaire et quel genre de problème qu'il résout.

  • Les ejb Enterprise Java Beans serverside composant de l'architecture. Il permet rapide et simplifiée de développement de

    1) distribuée(où plusieurs serveur d'application se parle, les composants du serveur(par exemple, le service de l'appel à d'autres services hébergés sur différents serveurs).

    2) les opérations de la persistance de haricot (DB TXNs), partie la plus importante de tout simple/web/de l'application distribuée. Facile le développement de l'e.g de configuration de base. Écrire du XML qui prend soin de la transaction, par exemple lors de commettre, quand le rouleau à l'arrière(sur les exceptions), etc. JPA Java Persistance Api fournissent relation de l'objet cartographique. Comme votre ligne de la table est mappé à votre objet java par le biais de la configuration xml.

    3) fixez - authentification(uid/pwd) et l'autorisation(basé sur un rôle - qui est l'utilisateur connecté et que toutes les tâches qu'il peut faire?).

Cela ressemble bien à un point à développer importe quelle application d'entreprise cependant, il a quelques inconvénients, par exemple le très lourd (tous les pots inclus.). Les Classes utilisées comme bean devrait confirmer EJB normes (classes devraient avoir mis en place certaines interface EJB moteur de comprendre quel type de haricot, il est).

Pour surmonter ces scenarioes, il y a beaucoup de solutions de rechange sont disponibles dans l'industrie pour les Ejb e.g Hibrnate n'mêmes choses telles que la OU la cartographie, TXN traitant des mêmes fournis par la persistance de haricots dans de l'EJB. Printemps, poids léger cadre et simplifie la logique métier (vous pouvez utiliser votre déjà construire classe qui n'a pas besoin d'implémenter une interface, checked exceptions ou s'étend de l'obligation de classes abstraites).

Maintenant un jours, la plupart des compnies vraiment le poids léger de cadre de travail tels que Spring, Hibernate, IBatis, Axe-2.

  • L'Architecture Orientée Service (SOA) L'Architecture Orientée Service est une réponse à l'indépendance de plate-forme au niveau de l'entreprise. OU L'intégration de vos applications plus rapidement, pour communiquer entre le serveur d'application différent.

    Il suffit de penser que vous souhaitez mettre en œuvre la solution où vous offrant l'option de réservation d'hôtel partout dans le monde. Votre obligation est de vérifier la disponibilité des chambres dans ces hôtels. Maintenant, cela signifie que vous avez besoin d'interagir avec de multiples applications hôtel à la fois. Il n'est pas nécessaire que chaque hôtel est en utilisant la même norme ou de leur application(serveur, langage de programmation) peut être déployé sur les serveurs d'applications différentes. En même temps, ce n'est pas pratique pour écrire des applications différentes qui peuvent parler à tout autre type de serveur d'applications. Nous avons besoin de quelques standards de la solution qui peut résoudre ce problème. Il est possible par le biais de services Web.

Il est possible que parce que les services web sont de l'envoi de message SOAP(Simple Object Access Protocol), basé sur le XML. XML est utilisé pour échanger des données à travers toute langue, de plateforme ou de protocole de réseau.

Les services Web peuvent être classés SOAP et REST. SAVON à base de service JAX-RPC et JAX-WS (http://www.ibm.com/developerworks/webservices/library/ws-tip-jaxwsrpc/index.html)

Les services Web peuvent être développés contrat de premier premier à écrire WSDL. le premier code premier à écrire de code.

Maintenant, parlons de comment démarrer pour les services web pratiquement.

La plus simple service web ou bonjour tout le monde(JAXWS) peut être écrite comme suit:- http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/java_first_jaxws/

  • Middleware Orienté Message (MOM)
  • JMS
  • Message de la File d'attente (Point-to-Point)

    MAMAN est nécessaire pour surmonter les inconvénients de demande-réponse style de communication. Serveur ont besoin d'être en vie quand le client envoie la réponse. Client attendre la réponse jusqu'serveur exécute et répondre en retour.

    Demande de réponse de l'application échoue si le serveur ou le client est en bas. MAMAN - Soit du point de fin n'est pas nécessaire d'être à l'heure, vous envoyez le message de demande pour le traitement.

    MAMAN est concept et de la spécification JMS est sur ce concept. Beaucoup de fournisseurs de la mise en œuvre de cette spécification.e.g IBM MQ, OpenJMS open source, mise en œuvre, de Tibco EMS etc.

JMS cahier des charges s'est majorly deux modèles. Pub/sub et ponin-à-point.

Pub/sub est sujet, votre application souhaitez publier certaines informations à toutes les parties intéressées. par exemple tableau de bord. (Application Stock souhaitez les informer de certains message à tous les écouteurs enregistrés).

Point-à-Point de la communication se fait par le biais de file d'attente de messages.

Affaires de cas d'utilisation - pensez-vous avoir des applications en électronique.g demande du client pour le service à la clientèle. Autre côté, vous avez plusieurs chargés de clientèle et d'autres clients ont parfois plus de chargés de clientèle, à un moment un et un seul représentant obtiendrez la demande soit traitée et qu'il/elle ne sera pas obtenir de la requête suivante jusqu'à ce que se termine la tâche. (Même une file d'attente de plusieurs fenêtres et qui jamais de la fenêtre est gratuit traitera la demande). Vous pouvez penser à d'autres de la complexité dans ce message.g si l'un des nœud est échoué, demande non traitée et du type de demande doit être processus par nœud particulier. etc.

Produire du code:- http://docs.oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleProducer.java

Consommation code synchrone:- (classes POJO) http://docs.oracle.com/javaee/1.4/tutorial/examples/jms/simple/src/SimpleSynchConsumer.java

http://www.java2s.com/Code/Java/J2EE/ThisexampleisasimpleJMSclientapplication.htm

Consommer du code asynchrone:- (Printemps par exemple - message de destination jusqu'programme ne sera pas arrêté.) http://www.springbyexample.org/examples/simple-spring-jms-listener-config.html

Si, c'est juste que de base il ya de nombreux aspects à prendre en compte dans cette MAMAN par exemple, ce qui est le fail-over mécanisme, qu'est-ce que le sélecteur durable, message, message d'accusé de réception modes etc...

  • Service de Bus/ESB
  • Les Systèmes D'Extrémité Et Des Routes
  • Apache Camel
  • Mule

Maintenant, disons que vous avez adopté la SOA et de la MAMAN de long en arrière et vous avez des tas de services qui parle à chacun d'accomplir à l'échelle de la tâche. Imaginez à gérer logique comme plusieurs de destination qui doit être redirigé à partir de laquelle seront très lourdes. Certaines personnes appellent cela la logique de l'application. Service de bus sera utilisé pour réduire la logique de l'application et de se concentrer plus sur la logique métier(fonctionnalités offertes par l'application).

En termes Simples, considérer le point de Fin d'URL exposé sur le serveur. Vous allez utiliser cette url/point de fin pour appeler votre service.

par exemple http://localhost:8888/Context/MyService?wsdl

dans le code:-

    String endpointAddress = "http://localhost:8080/jaxws/services/hello_world?wsdl";

    // Add a port to the Service
    service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

    HelloWorld hw = service.getPort(HelloWorld.class);
    System.out.println(hw.sayHi("World"));

Itinéraires Lorsque le service de bus reçoit message particulier, il prendra le chemin à travers pas de services de courtier ou des destinations telles que la file d'attente et sujets. Cette voie est connue comme la route.

E. g votre stock de l'application a reçu des commentaires de l'analyste, il sera traité par l'application ou le composant de site web et alors le résultat sera publié à tous les intéressés/membres inscrits de particulier, mise à jour de stock.

Apache Camel et Muel http://camel.apache.org/how-does-camel-compare-to-mule.html fournit la solution pour l'intégration d'entreprise.

5voto

andrew cooke Points 20902

Enterprise Integration Patterns peuvent vous aider à comprendre comment tout s'imbrique.

[mise à jour:] Votre question de suivi sur une autre réponse m'a fait réaliser que vous êtes confus au sujet des produits spécifiques. C'est en partie parce que le logiciel dans la pratique tend à appliquer à plus d'un concept, et en partie parce que les différentes sociétés font valoir qu'ils fournissent un "tout", alors qu'en réalité ils ne le sont pas.

Le bus de services d'entreprise sont des boîtes à outils / bibliothèques qui vous permettent de connecter le tout. Ils ne sont ni les services eux-mêmes, ni la messagerie implémentations, mais la goo qui remplit les petits écarts entre les deux. Si vous avez écrit tout à partir de zéro, vous pourriez même pas besoin, parce que ce qu'ils sont les meilleurs du est la fixation de l'inadéquation entre un tas de différentes technologies, et si vous commencez à partir de zéro, vous pouvez éviter ce gâchis.

Les services sont, ainsi, les services. Vous pouvez utiliser certaines des Ejb lors de la mise en œuvre de l'un (je ne mentionne cela parce que, pour une raison que vous les incluez dans votre question).

Le middleware de messagerie est un logiciel qui récupère les messages de A à B. C'est extrêmement utile, mais aussi complexe, et tout le monde et leur frère, ils ont inventé leur propre. Si vous avez besoin d'un peu d'abstraction qui permet d'éviter le verrouillage. Qui peut être un ESB ou, si vous êtes tous-Java, alors il peut être JMS. Mais, même lorsque vous êtes tous en Java avec JMS, vous pouvez toujours utiliser un ESB parce qu'ils sont les bibliothèques de tous les bits de code Java vous auriez encore besoin d'écrire (de bits aléatoires de la logique de routage de message, le reformatage, etc etc).

Espérons que cela aide. Ma réponse originale à cette question est plus sur les modèles abstraits que vous créez avec ces outils - quand vous êtes câblage des choses ensemble les mêmes problèmes viennent encore et encore.

3voto

user1338132 Points 171

Les systèmes d'extrémité et des Routes: d'où provient l'information et de va de. Message de la File d'attente est un type de point de terminaison. L'autre type est un Message de la Rubrique.

D'un point de terminaison est un nom logique pour une chose", par exemple, le PRIX.MSFT, qui est utilisé par un éditeur ou d'un consommateur de l'application pour obtenir les choses à partir de ou envoyer. Rubriques fournissent des informations à tout le monde souscrit (un-à-un ou un-à-plusieurs), les files d'attente de transmettre des messages à la première qui se fait (habituellement un-à-un). Oubliez les Files d'attente, tout peut aussi être fait avec les Sujets et les sujets ont plusieurs avantages.

Middleware Orienté Message (MOM): l'infrastructure logicielle qui fournit des informations entre les sujets ou les queus. Il est "orienté message' pas 'paquet orienté" comme TCP est. De sorte que chaque information blob est livré dans un, espérons-le, l'auto-description, message. La mise en œuvre de votre MAMAN vous donne ensuite une API où vous pouvez faire des choses comme msg.get("offre")

JMS et AMQP sont des exemples d'une MAMAN cahier des charges. MAMAN implémentations sont les vrais produits qui mettent en œuvre ces specs: TIBCO EMS, Websphere MQ, MSMQ, de Réconfort, et de beaucoup, beaucoup d'autres

Apache Camel - approche très intéressante sur la façon de configurer les flux de travail en ce MOM monde. Mais une version plus avancée du concept.

Service-Oriented Architecture (SOA), Service de Bus/ESB sont juste des nouveaux mots d'ordre mots de ce qu'on appelait les EAI (Enterprise Application Integration). Ils sont des recommandations sur la façon d'utiliser 'MAMAN et une façon de payer le prix élevé des consultants. Ce 'ESB ajoute à une MAMAN, c'est l'idée de la pensée de vos éditeurs comme des "services" fourniture d'un service. En d'autres termes: ne pas trop penser à ce qu'un consommateur veut maintenant. Il y a peut être 5 les consommateurs dans le futur et que l'éditeur doit fournir un service, et non pas "créer de l'information que le consommateur veut'. (Ça va devenir plus clair une fois que votre architecture a augmenté de 5+ applications). Aussi, vous devriez avoir un certain modèle d'objet, peut-être en XML pour faire des choses simples entre les applications.

Mule - une forme de l'ESB, mais son " pas exactement de main-stream. En 5 ans, la plupart des intergiciels action peut avoir été déplacé vers AMQP ou quelque chose d'autre entièrement.

Ejb: le Soleil de l'idée de sophistiqué des classes Java qui s'exécutent dans un récipient. Supposé rendre le développement plus facile. Mais dans de nombreux cas, cela rend les choses plus complexes. Une meilleure solution serait de "Printemps" - mais les EJB sont quelque chose d'autre (pas seulement MAMAN). Son plus sur la façon de développer des applications plus importantes (voir le Cio modèle).

Si vous êtes à la recherche sur où commencer: je vous conseille d'apprentissage à propos de JMS (tous les autres MAMAN sont) des nouvelles et de JMS est la base d'EJB/ Mule, ...) et, sauf si vous avez de très hautes exigences de performance, de considérer les messages à un TextMessage contenant du XML. La plupart des outils sont disponibles dans ce domaine. Ou encore plus simple mais moins sophistiqué, un MapMessage avec des paires clé/valeur.

1voto

MrGomez Points 20526

En prenant l'ensemble de vos besoins et de les emballer dans une requête, je suis tombé sur une excellente étude de cas qui devrait répondre à vos besoins:

Je suis allé de l'avant et fulltext cherché le livre sur Amazon "de la Recherche à l'Intérieur de Ce Livre" caractéristique. Il couvre l'ensemble de l'intégration des cas, vous l'avons dit, semble être approfondie, et vous guide à travers l'ensemble de la conception et de la mise en œuvre du processus.

Je suis gêné de l'état, je ne l'ai pas lu par le biais de ce moi-même, mais je recommande fortement d'utiliser les mêmes outils que j'ai fait pour voir si elle correspond à vos besoins avant d'investir dans une copie. Il semble de plus en plus approfondie, plus complet et plus utile que de simplement foisting vous sur tout un tas de documentation incomplète ou débobinez contenu dans une réponse ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X