Arquiteturas Orientadas a Serviços com a JBoss SOA Platform

43 %
57 %
Information about Arquiteturas Orientadas a Serviços com a JBoss SOA Platform
Technology

Published on December 6, 2008

Author: alegomes

Source: slideshare.net

Lato Sensu em Sistemas Orientados a Objetos Módulo 6 Arquiteturas Orientadas a Serviços com a JBoss SOA Platform

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008

Objetivo Mostrar o caminho que SOA tem seguido

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 3 C W 2000 2001 2002 2003 2004 2005 2006 2007 2008

serviço

serviço arquitetura

infra-estrutura serviço arquitetura

padrão infra-estrutura serviço arquitetura

padrão infra-estrutura serviço arquitetura método

padrão infra-estrutura interoperabilidade serviço arquitetura método

padrão infra-estrutura interoperabilidade serviço arquitetura intercâmbio método

padrão infra-estrutura interoperabilidade serviço arquitetura intercâmbio mensagem método

padrão infra-estrutura interoperabilidade serviço arquitetura intercâmbio mensagem método integração

padrão infra-estrutura desacoplamento interoperabilidade serviço arquitetura intercâmbio mensagem método integração

padrão coordenação infra-estrutura desacoplamento interoperabilidade serviço arquitetura intercâmbio mensagem método integração

padrão orquestração coordenação infra-estrutura desacoplamento interoperabilidade serviço arquitetura intercâmbio mensagem método integração

padrão orquestração coordenação infra-estrutura desacoplamento interoperabilidade serviço processos arquitetura de negócio intercâmbio mensagem método integração

padrão orquestração coordenação infra-estrutura desacoplamento interoperabilidade serviço processos arquitetura de negócio intercâmbio mensagem integração reuso método

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 P C R

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 B A O R C P C R

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 I M A R B O R C C P R

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ce s e r vi e b S I W RM A RB O C P C R

Soluções Silver Bullet

prome$$a$ Soluções Silver Bullet

Estratégia stop-the-world

Implantação árdua e demorada

Colou?

2005 SOA nem que seja na marra!

Projetos SOA

Projetos SOA

Falta de escalabilidade

Interview John Crupi on Enterprise SOA So service oriented architecture, hype or reality? A little of both there's a lot of hype behind it. (...) it's architectural driven and if you don't have the architecture in place there's no product that out of the box will give you SOA today.

Guerrilla SOA

#1 SOA tem a ver com filosofia e não com tecnologia

#2 SOA tem a ver com R.O.I.

#3 SOA tem a ver com governança de ativos

Article Quest for True SOA Posted by Alex Maclinovsky on Sep 10, 2008 According to these definitions, SOA Governance is what turns Enterprise Services from digital artifacts into true business assets by allowing responsible reuse across the domains of control of SOA participants

Redesenvolvimento de software

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Software também é patrimônio

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Antes de trocar, você reforma

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ...até a última ponta gota

Article SOA Governance: An Enterprise View Posted by Michael Poulin on Aug 20, 2008 03:54 AM

Article SOA Governance: An Enterprise View Posted by Michael Poulin on Aug 20, 2008 03:54 AM (...)organisations were assured that SOA was new IT technology for integration and reuse of existing assets.

Article SOA Governance: An Enterprise View Posted by Michael Poulin on Aug 20, 2008 03:54 AM Very few succeeded and went forward

Article SOA Governance: An Enterprise View Posted by Michael Poulin on Aug 20, 2008 03:54 AM Other organisations failed in gaining promised ROI and time to market

Interview Jim Webber on quot;Guerilla SOAquot; A lot of SOA projects I have seen, have been somewhat akin to mobilizing an army. We want to address specific discrete business problems, organized by priorities according to the business stakeholder and get those processes implemented rapidly in an incremental way with lots of feedback.

Major changes in technology have not been driven by the technologies themselves but by the change in thinking that they enabled.

“Enterprises around the world are increasingly pursuing the core business benefits of Service-Oriented Architecture (SOA)—business agility, reduction in integration expense, greater asset reuse, and improved business visibility. And yet, many large organizations are running into roadblocks with their heavyweight, enterprise-wide SOA initiatives. As an alternative, many organizations are finding a “right weight,” step-by-step approach to SOA is more effective and lowers risk as well.” SIMPLIFYING SOA LOW RISK, HIGH VALUE, “RIGHT WEIGHT” SOA December 2007 Analyst: Jason Bloomberg

Economically, quot;right-sourcingquot; is far more efficient than quot;outsourcingquot; and SaaS.

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Interview Stefan Tilkov on SOA Why SOA? Why now? What's actually new? (...) What I think is exciting is the fact that it creates, or at least that it is perceived to create the opportunity to align business and technology.

Visão moderna de SOA

estilo Visão moderna de SOA

estilo Visão moderna de SOA lucro

estilo Visão moderna de SOA lucro ROI

estilo reaproveitamento Visão moderna de SOA lucro ROI

estilo ativos reaproveitamento Visão moderna de SOA lucro ROI

estilo ativos reaproveitamento Visão moderna de SOA lucro agilidade ROI

estilo ativos reaproveitamento Visão moderna de SOA lucro agilidade efetividade ROI

Legados ativos

Novos legados estão sempre chegando

Novos legados estão sempre chegando

Novos legados estão sempre chegando

Como integrá-los?

Como integrá-los? ponto a ponto S1 S2 S3 S4

Como integrá-los? estrela S1 S2 broker hub bus S3 S4

Reaproveitamento

Integracão ponto-a-ponto direta CORBA RMI WebServices S1 S2 REST S3 S4

Integracão estrela indireta Enterprise Service Bus

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Enterprise Service Bus facilitador da integração entre serviços

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ! S4 S5

JBoss ESB Rosetta

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Na vida real, as coisas não são tão simples assim

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Nem sempre as peças se encaixam

Nem sempre os serviços falam a mesma língua

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ! S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Nem sempre o destino da mensagem é conhecido

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ? S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ? S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ! S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB ! S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ? Como tomar esta decisão?

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 package poker; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?> <jbossesb xmlns=quot;http:// import java.util.Set; import java.util.Map.Entry; public class PokerHand { public static anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/ final int HIGH_CARD = 0; public static final int ONE_PAIR = 1; public static final int jbossesb-1.0.1.xsdquot; parameterReloadSecs=quot;5quot;><providers> <jms-provider TWO_PAIRS = 2; public static final int THREE_OF_A_KIND = 3; public static final int name=quot;JBossMQquot; connection-factory=quot;ConnectionFactoryquot;> <jms-bus STRAIGHT = 4; public static final int FLUSH = 5; public static final int FULL_HAND = 6; busid=quot;quickstartGwChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- public static final int FOUR_OF_A_KIND = 7; public static final int STRAIGHT_FLUSH = 8; private Card[] cards = new Card[5]; public PokerHand(Card c1, Card c2, Card c3, Card c4, name=quot;queue/quickstart_simple_cbr_Requestquot; /> </jms-bus> <jms-bus Card c5) throws InvalidHandException { cards[0] = c1; cards[1] = c2; cards[2] = c3; busid=quot;quickstartEsbChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- cards[3] = c4; cards[4] = c5; if (!isValid()) throw new InvalidHandException(cards); } name=quot;queue/Bquot; /> </jms-bus> <jms-bus busid=quot;CBRNormalShippingquot;> <jms-message- private boolean isValid() { Set<Card> set = new HashSet<Card>(); for (Card c : cards) filter dest-type=quot;QUEUEquot; dest-name=quot;queue/CBRNormalShippingquot; /> </jms-bus> set.add(c); if (set.size() != cards.length) return false; return true; } public int <jms-bus busid=quot;CBRExpressFreeShippingquot;> <jms-message-filter dest-type=quot;QUEUEquot; getGame() { Map<Integer, Integer> cardsCount = countCards(); Collection<Integer> combinations = cardsCount.values(); if (combinations.contains(3)) { if dest-name=quot;queue/CBRExpressFreeShippingquot; /> </jms-bus></jms-provider> </ (combinations.contains(2)) { return FULL_HAND; } return THREE_OF_A_KIND; } if providers><services><!-- ESB CBR Service --> <service (combinations.remove(2)) { if (combinations.contains(2)) { return TWO_PAIRS; } else category=quot;MyFirstCBRServicesESBquot; name=quot;FirstCBRServiceESBquot; description=quot;ESB ? { return ONE_PAIR; } } if(combinations.contains(4)){ return FOUR_OF_A_KIND; } Listenerquot; > <listeners> <!-- Gateway --> <jms-listener name=quot;the-gatewayquot; Map<Integer, Integer> suitCounter = countSuits(); if (isStraight()){ if busidref=quot;quickstartGwChannelquot; is-gateway=quot;truequot; /> <jms-listener (suitCounter.values().contains(5)){ return STRAIGHT_FLUSH; } else { return STRAIGHT; } } name=quot;XPathContentBasedRouterquot; busidref=quot;quickstartEsbChannelquot;> </jms-listener> if (suitCounter.values().contains(5)){ return FLUSH; } return HIGH_CARD; } private Map<Integer, Integer> countSuits() { Map<Integer, Integer> suitCounter = new </listeners> <actions mep=quot;OneWayquot;> <action HashMap<Integer, Integer>(); for (Card card : cards) { if class=quot;org.jboss.soa.esb.actions.ContentBasedRouterquot; name=quot;ContentBasedRouterquot;> (suitCounter.get(card.getSuit()) == null) { suitCounter.put(card.getSuit(), 1); } else <property name=quot;ruleSetquot; value=quot;SimpleCBRRules-XPath.drlquot;/> <property programaticamente declarativamente { suitCounter.put(card.getSuit(), suitCounter.get(card.getSuit()) + 1); } } return name=quot;ruleLanguagequot; value=quot;XPathLanguage.dslquot;/> <property name=quot;ruleReloadquot; suitCounter; } /** * [ [k, 2], * [q, 2], * [T, 1]] * @return */ private Map<Integer, value=quot;truequot;/> <property name=quot;destinationsquot;> <route-to destination- Integer> countCards() { Map<Integer, Integer> counter = new HashMap<Integer, Integer>(); for (Card card : cards) { if (counter.get(card.getNumber()) == null) name=quot;expressquot; service-category=quot;ExpressShippingquot; service- { counter.put(card.getNumber(), 1); } else { counter.put(card.getNumber(), name=quot;ExpressShippingServicequot;/> <route-to destination-name=quot;normalquot; service- counter.get(card.getNumber()) + 1); }} return counter; }private boolean isStraight() category=quot;NormalShippingquot; service-name=quot;NormalShippingServicequot;/> </property> { Arrays.sort(cards); int i = 1; int limit; //Verifica sequencia onde o straight termina </action> </actions> </service><!-- Normal Shipping --> <service com ace if(cards[4].getNumber() == Card.ACE && cards[0].getNumber() == Card.TWO){ limit = category=quot;NormalShippingquot; name=quot;NormalShippingServicequot; description=quot;Normal 4; } else { limit = 5; } for (i=1 ; i < limit; i++) { if (cards[i - 1].getNumber() + 1 != Shipping Servicequot;> <listeners> <jms-listener name=quot;CBRNormalShippingquot; cards[i].getNumber()) return false; } return true; } @Override public String toString() { return quot; quot; + cards[0].getNumber() + quot; quot;+ cards[0].getSuit() + quot; - quot; + busidref=quot;CBRNormalShippingquot;/> </listeners> <actions mep=quot;OneWayquot;> <action cards[1].getNumber() + quot; quot;+ cards[1].getSuit() + quot; - quot; + cards[2].getNumber() + quot; quot;+ name=quot;testStorequot; class=quot;org.jboss.soa.esb.actions.TestMessageStorequot;/> <action cards[2].getSuit() + quot; - quot; + cards[3].getNumber() + quot; quot;+ cards[3].getSuit() + quot; - quot; + name=quot;displayMessageActionquot; cards[4].getNumber() + quot; quot;+ cards[4].getSuit(); } public Card[] getCards(){ return class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.MyJMSListenerActionquot; cards; } public int compareTo(PokerHand hand2) { int comparison = this.getGame()- process=quot;displayMessagequot; /> <!-- This can be replaced with notification --> hand2.getGame(); //desempate. if(comparison==0){ Integer[] criteriosHand2 = hand2.getCriteriosDesempate(); Integer[] criteriosThis = this.getCriteriosDesempate(); <action name=quot;routequot; for(int i=0;i<criteriosThis.length;i++){ comparison = criteriosThis[i]-criteriosHand2[i]; class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.RouteNormalShippingquot; if(comparison!=0){ break; } } } return comparison; } /** * Retorna um array com as cartas process=quot;sendResponsequot; /> </actions> </service><!-- Express Shipping --> na ordem em que s<o consideradas para o * desempate de duas m<os que tem o mesmo jogo. * <service category=quot;ExpressShippingquot; name=quot;ExpressShippingServicequot; * ex: KKKQQ retorna [K,Q] * ex: QQQKK retorna [Q,K] * ex: A2345 retorna [5, 4, 3, 2, A] * description=quot;Express Shipping Servicequot;> <listeners> <jms-listener ex: TT245 retorna [T,5,4,2] * ex: T2245 retorna [2,T,5,4] * ex: flush 2379T retorna [T, name=quot;CBRExpressFreeShippingquot; busidref=quot;CBRExpressFreeShippingquot;/> </listeners> 9,7,3,2] * * @return */ public Integer[] getCriteriosDesempate() { Map<Integer, Integer> mapa = this.countCards(); List<Entry> criterios = new ArrayList<Entry>(); <actions mep=quot;OneWayquot;> <action name=quot;testStorequot; criterios.addAll(mapa.entrySet()); Collections.sort(criterios, new Comparator<Entry>(){ / class=quot;org.jboss.soa.esb.actions.TestMessageStorequot;/> <action ** * Ordena primeiro pelo valor e depois pela chave * * @param o1 * @param o2 * @return name=quot;displayMessageActionquot; */ public int compare(Entry o1, Entry o2) { int comparacao = ((Integer)o2.getValue()) - class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.MyJMSListenerActionquot; ((Integer)o1.getValue()); if (comparacao == 0) { comparacao = ((Integer)o2.getKey()) - process=quot;displayMessagequot; /> <!-- This can be replaced with notification --> ((Integer)o1.getKey()); } return comparacao; } }); // extrai os keys dos entrysets ordenados Integer[] retorno = new Integer[criterios.size()]; for (int i=0 ; <action name=quot;routequot; i<criterios.size() ; i++) { retorno[i] = (Integer) criterios.get(i).getKey(); } // class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.RouteExpressShippingquot; straight comeando com ace if (isStraight() && retorno[4] == Card.TWO && retorno[0] == process=quot;sendResponsequot; /> </actions> </service> </services></jbossesb> Card.ACE) { return new Integer[]{Card.FIVE, Card.FOUR, Card.THREE, Card.TWO, Card.ACE}; } return retorno; } }

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 package poker; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; <?xml version = quot;1.0quot; encoding = quot;UTF-8quot;?> <jbossesb xmlns=quot;http:// import java.util.Set; import java.util.Map.Entry; public class PokerHand { public static anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/ final int HIGH_CARD = 0; public static final int ONE_PAIR = 1; public static final int jbossesb-1.0.1.xsdquot; parameterReloadSecs=quot;5quot;><providers> <jms-provider TWO_PAIRS = 2; public static final int THREE_OF_A_KIND = 3; public static final int name=quot;JBossMQquot; connection-factory=quot;ConnectionFactoryquot;> <jms-bus STRAIGHT = 4; public static final int FLUSH = 5; public static final int FULL_HAND = 6; busid=quot;quickstartGwChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- public static final int FOUR_OF_A_KIND = 7; public static final int STRAIGHT_FLUSH = 8; private Card[] cards = new Card[5]; public PokerHand(Card c1, Card c2, Card c3, Card c4, name=quot;queue/quickstart_simple_cbr_Requestquot; /> </jms-bus> <jms-bus Card c5) throws InvalidHandException { cards[0] = c1; cards[1] = c2; cards[2] = c3; busid=quot;quickstartEsbChannelquot;> <jms-message-filter dest-type=quot;QUEUEquot; dest- cards[3] = c4; cards[4] = c5; if (!isValid()) throw new InvalidHandException(cards); } name=quot;queue/Bquot; /> </jms-bus> <jms-bus busid=quot;CBRNormalShippingquot;> <jms-message- private boolean isValid() { Set<Card> set = new HashSet<Card>(); for (Card c : cards) filter dest-type=quot;QUEUEquot; dest-name=quot;queue/CBRNormalShippingquot; /> </jms-bus> set.add(c); if (set.size() != cards.length) return false; return true; } public int <jms-bus busid=quot;CBRExpressFreeShippingquot;> <jms-message-filter dest-type=quot;QUEUEquot; getGame() { Map<Integer, Integer> cardsCount = countCards(); Collection<Integer> combinations = cardsCount.values(); if (combinations.contains(3)) { if dest-name=quot;queue/CBRExpressFreeShippingquot; /> </jms-bus></jms-provider> </ (combinations.contains(2)) { return FULL_HAND; } return THREE_OF_A_KIND; } if providers><services><!-- ESB CBR Service --> <service (combinations.remove(2)) { if (combinations.contains(2)) { return TWO_PAIRS; } else category=quot;MyFirstCBRServicesESBquot; name=quot;FirstCBRServiceESBquot; description=quot;ESB { return ONE_PAIR; } } if(combinations.contains(4)){ return FOUR_OF_A_KIND; } Listenerquot; > <listeners> <!-- Gateway --> <jms-listener name=quot;the-gatewayquot; Map<Integer, Integer> suitCounter = countSuits(); if (isStraight()){ if busidref=quot;quickstartGwChannelquot; is-gateway=quot;truequot; /> <jms-listener (suitCounter.values().contains(5)){ return STRAIGHT_FLUSH; } else { return STRAIGHT; } } name=quot;XPathContentBasedRouterquot; busidref=quot;quickstartEsbChannelquot;> </jms-listener> if (suitCounter.values().contains(5)){ return FLUSH; } return HIGH_CARD; } private Map<Integer, Integer> countSuits() { Map<Integer, Integer> suitCounter = new </listeners> <actions mep=quot;OneWayquot;> <action HashMap<Integer, Integer>(); for (Card card : cards) { if class=quot;org.jboss.soa.esb.actions.ContentBasedRouterquot; name=quot;ContentBasedRouterquot;> (suitCounter.get(card.getSuit()) == null) { suitCounter.put(card.getSuit(), 1); } else <property name=quot;ruleSetquot; value=quot;SimpleCBRRules-XPath.drlquot;/> <property programaticamente declarativamente { suitCounter.put(card.getSuit(), suitCounter.get(card.getSuit()) + 1); } } return name=quot;ruleLanguagequot; value=quot;XPathLanguage.dslquot;/> <property name=quot;ruleReloadquot; suitCounter; } /** * [ [k, 2], * [q, 2], * [T, 1]] * @return */ private Map<Integer, value=quot;truequot;/> <property name=quot;destinationsquot;> <route-to destination- Integer> countCards() { Map<Integer, Integer> counter = new HashMap<Integer, Integer>(); for (Card card : cards) { if (counter.get(card.getNumber()) == null) name=quot;expressquot; service-category=quot;ExpressShippingquot; service- { counter.put(card.getNumber(), 1); } else { counter.put(card.getNumber(), name=quot;ExpressShippingServicequot;/> <route-to destination-name=quot;normalquot; service- counter.get(card.getNumber()) + 1); }} return counter; }private boolean isStraight() category=quot;NormalShippingquot; service-name=quot;NormalShippingServicequot;/> </property> { Arrays.sort(cards); int i = 1; int limit; //Verifica sequencia onde o straight termina </action> </actions> </service><!-- Normal Shipping --> <service com ace if(cards[4].getNumber() == Card.ACE && cards[0].getNumber() == Card.TWO){ limit = category=quot;NormalShippingquot; name=quot;NormalShippingServicequot; description=quot;Normal 4; } else { limit = 5; } for (i=1 ; i < limit; i++) { if (cards[i - 1].getNumber() + 1 != Shipping Servicequot;> <listeners> <jms-listener name=quot;CBRNormalShippingquot; cards[i].getNumber()) return false; } return true; } @Override public String toString() { return quot; quot; + cards[0].getNumber() + quot; quot;+ cards[0].getSuit() + quot; - quot; + busidref=quot;CBRNormalShippingquot;/> </listeners> <actions mep=quot;OneWayquot;> <action cards[1].getNumber() + quot; quot;+ cards[1].getSuit() + quot; - quot; + cards[2].getNumber() + quot; quot;+ name=quot;testStorequot; class=quot;org.jboss.soa.esb.actions.TestMessageStorequot;/> <action cards[2].getSuit() + quot; - quot; + cards[3].getNumber() + quot; quot;+ cards[3].getSuit() + quot; - quot; + name=quot;displayMessageActionquot; cards[4].getNumber() + quot; quot;+ cards[4].getSuit(); } public Card[] getCards(){ return class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.MyJMSListenerActionquot; cards; } public int compareTo(PokerHand hand2) { int comparison = this.getGame()- process=quot;displayMessagequot; /> <!-- This can be replaced with notification --> hand2.getGame(); //desempate. if(comparison==0){ Integer[] criteriosHand2 = hand2.getCriteriosDesempate(); Integer[] criteriosThis = this.getCriteriosDesempate(); <action name=quot;routequot; for(int i=0;i<criteriosThis.length;i++){ comparison = criteriosThis[i]-criteriosHand2[i]; class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.RouteNormalShippingquot; if(comparison!=0){ break; } } } return comparison; } /** * Retorna um array com as cartas process=quot;sendResponsequot; /> </actions> </service><!-- Express Shipping --> na ordem em que s<o consideradas para o * desempate de duas m<os que tem o mesmo jogo. * <service category=quot;ExpressShippingquot; name=quot;ExpressShippingServicequot; * ex: KKKQQ retorna [K,Q] * ex: QQQKK retorna [Q,K] * ex: A2345 retorna [5, 4, 3, 2, A] * description=quot;Express Shipping Servicequot;> <listeners> <jms-listener ex: TT245 retorna [T,5,4,2] * ex: T2245 retorna [2,T,5,4] * ex: flush 2379T retorna [T, name=quot;CBRExpressFreeShippingquot; busidref=quot;CBRExpressFreeShippingquot;/> </listeners> 9,7,3,2] * * @return */ public Integer[] getCriteriosDesempate() { Map<Integer, Integer> mapa = this.countCards(); List<Entry> criterios = new ArrayList<Entry>(); <actions mep=quot;OneWayquot;> <action name=quot;testStorequot; criterios.addAll(mapa.entrySet()); Collections.sort(criterios, new Comparator<Entry>(){ / class=quot;org.jboss.soa.esb.actions.TestMessageStorequot;/> <action ** * Ordena primeiro pelo valor e depois pela chave * * @param o1 * @param o2 * @return name=quot;displayMessageActionquot; */ public int compare(Entry o1, Entry o2) { int comparacao = ((Integer)o2.getValue()) - class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.MyJMSListenerActionquot; ((Integer)o1.getValue()); if (comparacao == 0) { comparacao = ((Integer)o2.getKey()) - process=quot;displayMessagequot; /> <!-- This can be replaced with notification --> ((Integer)o1.getKey()); } return comparacao; } }); // extrai os keys dos entrysets ordenados Integer[] retorno = new Integer[criterios.size()]; for (int i=0 ; <action name=quot;routequot; i<criterios.size() ; i++) { retorno[i] = (Integer) criterios.get(i).getKey(); } // class=quot;org.jboss.soa.esb.samples.quickstart.simplecbr.RouteExpressShippingquot; straight comeando com ace if (isStraight() && retorno[4] == Card.TWO && retorno[0] == process=quot;sendResponsequot; /> </actions> </service> </services></jbossesb> Card.ACE) { return new Integer[]{Card.FIVE, Card.FOUR, Card.THREE, Card.TWO, Card.ACE}; } return retorno; } }

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Configuração declarativa de regras

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Pra isso, usa-se um Engine de Regras para declaração execução

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Pra isso, usa-se um Engine de Regras para declaração execução

regras fatos engine de regras decisão

regras + + engine de regras = decisão fatos

JBoss Rules Drools

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 Às vezes o processamento de uma mensagem envolve vários serviços, que precisam ser coordenados entre si.

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4 S5

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ! S1 S2 S3 ESB S4

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 S1 S2 S3 ESB S4

Lato Sensu em Sistemas Orientados a Objetos Laboratório de Tópicos Avançados - 2°/2008 ESB

Falta de coordenação pode levar à total perda de controle do ambiente

Torna-se então necessária a formalização de processos

Engine de Processos

Huguinho Zezinho Luizinho

JBoss jBPM

JBoss SOA Platform

P&R alexandre.gomes@seatecnologia.com.br blog.seatecnologia.com.br

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

JBoss Enterprise SOA 5.1 - infoq.com

Nesta palestra conheça arquiteturas de grandes ... arquiteturas orientadas a serviços (SOA), o JBoss ... JBoss Enterprise SOA Platform e JBoss ...
Read more

JBoss Developer Studio 2.0 liberado - infoq.com

... AJAX e Portlets como parte das Arquiteturas Orientadas a Serviços baseadas em padrões. ... JBoss Enterprise Application Platform; JBoss SOA Platform;
Read more

Mundo SOA | Tudo sobre o Arquitetura Orientada a Serviços ...

Resista à tentação de equiparar segmentos ou serviços com serviços, como em arquiteturas orientadas a ... projeto SOA Platform. ... JBoss versus IBM ...
Read more

Uma ferramenta de governança SOA - Conserpro 2013 by ...

Um dos maiores desafios ao implementar soluções de software em uma plataforma orientada a serviços (SOA) ... Issuu is a digital publishing platform ...
Read more

Arquitetura Orientada a Serviços Grátis Artigos Acadêmicos

Arquitetura Orientada Serviços – SOA. DA ARQUITETURA ORIENTADA A SERVIÇOS(SOA) COMO FERRAMENTA PARA INTERLIGAR OS SERVIÇOS, REALACIONADOS A...
Read more

Anderson Rodrigues Gomes | LinkedIn

View Anderson Rodrigues Gomes’ professional ... desenho e desenvolvimento de arquiteturas orientadas a serviços, ... Using too WebLogic and JBoss; ...
Read more

Alexandre Gomes - Hubslide

Hubslide is the easiest way to upload & share PowerPoint & PDF presentations online; embed in Blogs, Slideshows, Transcript & more
Read more