<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-743578218566083321</id><updated>2026-09-30T07:08:06.248-07:00</updated><category term="Healthcare"/><category term="REST"/><category term="JBOSS"/><category term="API"/><category term="RESTEasy"/><category term="SSL"/><category term="java"/><category term="PHR"/><category term="Web Service"/><category term="Web Services"/><category term="BlazeDS"/><category term="Cloud"/><category term="Flex"/><category term="HTTP"/><category term="MAVEN"/><category term="Rest API"/><category term="SOAP"/><category term="Ajax"/><category term="HL7"/><category term="ICW"/><category term="IT"/><category term="JSON"/><category term="POM"/><category term="Spring"/><category term="TLS"/><category term="Windows"/><category term="liferay"/><category term="portal"/><category term="soapUI"/><category term="CXF"/><category term="Cloud Computing"/><category term="Configuration"/><category term="DMP"/><category term="EHR"/><category term="Eclipse"/><category term="France"/><category term="Hadoop"/><category term="Health 2.0"/><category term="IHE"/><category term="JAX-RS"/><category term="JAXB"/><category term="LifeSensor"/><category term="MapReduce"/><category term="Maven 2"/><category term="Medical"/><category term="POST"/><category term="SOA"/><category term="SaaS"/><category term="San Francisco"/><category term="Security"/><category term="architecture"/><category term="authentication"/><category term="cURL"/><category term="conference"/><category term="console"/><category term="context"/><category term="deployment"/><category term="health care"/><category term="jsf"/><category term="management"/><category term="proxy"/><category term="record"/><category term="resteasy-jaxb-provider"/><category term="resteasy-jaxrs"/><category term="richfaces"/><category term="skin"/><category term="war"/><category term="web.xml"/><category term="2008"/><category term="ARRA"/><category term="ASP"/><category term="AWS"/><category term="Annotations"/><category term="Biosciences"/><category term="CCD"/><category term="CCOW"/><category term="CCR"/><category term="CDI"/><category term="CDM"/><category term="CLASSPATH"/><category term="Carefx"/><category term="Centricity"/><category term="Cloud Foundry"/><category term="Community One"/><category term="Containers"/><category term="DB"/><category term="DB2"/><category term="DB2 CLI ODBC Driver delete Database Alias Windows UNCATALOG Management Service db2cli.ini"/><category term="DBMS"/><category term="DELETE"/><category term="DI"/><category term="DICOM"/><category term="DOS"/><category term="Data"/><category term="Dependency Injection"/><category term="Diabetes"/><category term="Domino"/><category term="EC2"/><category term="EMR"/><category term="EXT"/><category term="Enterprise Architect"/><category term="FABridge"/><category term="GE"/><category term="GET"/><category term="GZIP"/><category term="Generic"/><category term="GenericEntity"/><category term="Google Health"/><category term="Google Health Data API PHR java authentication"/><category term="Google IO"/><category term="HIE"/><category term="HIMSS"/><category term="HIPAA"/><category term="HITECH"/><category term="HTTP 405"/><category term="HTTPS"/><category term="Health Records"/><category term="Healthcare REST API JSON XML CCD REStEasy marshall POJO HL7"/><category term="HttpServletRequest"/><category term="IP"/><category term="IaaS"/><category term="Interceptors"/><category term="Introspection"/><category term="J2EE"/><category term="JACKSON"/><category term="JDBC"/><category term="JMX"/><category term="JNDI"/><category term="JUnit"/><category term="Javascript"/><category term="Jonas Yuan"/><category term="Kaiser permanente"/><category term="Lab Results"/><category term="Liferay 5.2"/><category term="Liferay portal"/><category term="MAVEN plugin"/><category term="MXML ActionScript"/><category term="Marissa Mayer"/><category term="Meaningful Use"/><category term="MedCommons"/><category term="Messier"/><category term="Mobile Application"/><category term="NHIN Direct"/><category term="PHI"/><category term="POJO"/><category term="PUT"/><category term="PaaS"/><category term="Packt publishing"/><category term="Pivotal"/><category term="RDBMS"/><category term="REASTEasy"/><category term="RHIO"/><category term="RUN.BAT"/><category term="S3"/><category term="SAML"/><category term="SDK"/><category term="SSO"/><category term="Secure"/><category term="Sentillon"/><category term="Service Brokering"/><category term="ServletRequest"/><category term="Siemens"/><category term="Simple JNDI"/><category term="Software as a Service"/><category term="Speech"/><category term="TC3"/><category term="TJWS"/><category term="Trustore"/><category term="Twitter"/><category term="UML"/><category term="Usability"/><category term="Vic Gundotra"/><category term="WEB-INF"/><category term="X-HTTP Method override"/><category term="XML"/><category term="XSL"/><category term="XSLT"/><category term="acm"/><category term="adherence"/><category term="applications"/><category term="asynchronous"/><category term="atmosphere"/><category term="auditing"/><category term="background"/><category term="beans"/><category term="benefits"/><category term="best practice"/><category term="cURL cookies"/><category term="certificate"/><category term="choreography"/><category term="class"/><category term="cloudera"/><category term="code"/><category term="componentization"/><category term="configuration section"/><category term="constraint"/><category term="consumer"/><category term="cookies"/><category term="cost"/><category term="cross-domain"/><category term="css"/><category term="customization"/><category term="data presentation"/><category term="design patterns"/><category term="dictation"/><category term="div"/><category term="eHealth Applications"/><category term="event"/><category term="extendedDataTable"/><category term="facebook"/><category term="filter"/><category term="heade"/><category term="healthcare portal benefits services components"/><category term="hive"/><category term="import"/><category term="inject"/><category term="interaction"/><category term="interface"/><category term="jsfplate"/><category term="key store"/><category term="kp.prg"/><category term="libeay32.dll"/><category term="lifeline"/><category term="lifemasters"/><category term="linkedin"/><category term="log"/><category term="market"/><category term="mavenize"/><category term="medication"/><category term="message"/><category term="method"/><category term="multitenancy"/><category term="nuance"/><category term="object"/><category term="openEHealth"/><category term="openSSL"/><category term="operand"/><category term="operation"/><category term="orchestration"/><category term="personalization"/><category term="portecle"/><category term="portlet"/><category term="portlets"/><category term="pre-processor"/><category term="producer"/><category term="programming languages"/><category term="prompt"/><category term="push"/><category term="refactoring"/><category term="request"/><category term="resources.xml"/><category term="saxon"/><category term="sequence diagram"/><category term="services components"/><category term="signal"/><category term="ssleay32.dll"/><category term="status"/><category term="synchronous"/><category term="table"/><category term="technology"/><category term="technology. sensors"/><category term="theme"/><category term="tooltip"/><category term="transparency"/><category term="xhtml"/><category term="yummycode"/><category term="z-index"/><title type='text'>Another Story ...</title><subtitle type='html'>A forum and place to discuss Art History and Cultural Heritage after 30+ years in Technology and BioSciences, but this is another story ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-123441808299903287</id><published>2024-10-09T14:54:00.000-07:00</published><updated>2024-10-09T14:54:45.558-07:00</updated><title type='text'>Heraldry (1/4) : The origins</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiclvORD-Eo0PO1NFepFOoh9KvPJD6cuumlK9d4Q-eNvfclFKU-amUC0dfOieL6ICzqZML4SZWtGkIhYnF5Ufief8HpCY1p5I1kD4x04yxMEZQjt9oDiNWE-KFTQkEM_l_IR1N5FbMaKPGAQZUlGhDOlzvfA0w2LjavEqVsuoRkAcTCSIKaIWQkrpYkBK6X/s993/Geoffrey_of_Anjou_Monument.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;993&quot; data-original-width=&quot;520&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiclvORD-Eo0PO1NFepFOoh9KvPJD6cuumlK9d4Q-eNvfclFKU-amUC0dfOieL6ICzqZML4SZWtGkIhYnF5Ufief8HpCY1p5I1kD4x04yxMEZQjt9oDiNWE-KFTQkEM_l_IR1N5FbMaKPGAQZUlGhDOlzvfA0w2LjavEqVsuoRkAcTCSIKaIWQkrpYkBK6X/s320/Geoffrey_of_Anjou_Monument.jpg&quot; width=&quot;168&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;Did you know the real origin of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coat_of_arms&quot;&gt;coat of arms&lt;/a&gt;? There have been a lot of misconception about it. The picture just above is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Armorial_of_the_House_of_Plantagenet&quot;&gt;Plantagenet enamel&lt;/a&gt;, considered as the &lt;a href=&quot;https://fr.wikipedia.org/wiki/Émail_Plantagenêt&quot;&gt;oldest known coat of arms&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;It is in the 12th century that a new &lt;b&gt;emblem &lt;/b&gt;appeared in Europe that profoundly transformed the &lt;b&gt;symbolic &lt;/b&gt;uses of medieval society: the coat of arms. The coat of arms, through the code that constitutes its grammar: the &lt;b&gt;blazon&lt;/b&gt;, has influenced our value systems linked to &lt;b&gt;identity&lt;/b&gt;, &lt;b&gt;kinship &lt;/b&gt;and &lt;b&gt;belonging &lt;/b&gt;to a &lt;b&gt;group &lt;/b&gt;or a &lt;b&gt;community &lt;/b&gt;in general.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;So we are talking about emblems and symbols here. So what is the difference between an &lt;b&gt;emblem &lt;/b&gt;and a &lt;b&gt;symbol&lt;/b&gt;?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;An &lt;b&gt;emblem &lt;/b&gt;is a sign that indicates the identity of an individual or a group of individuals: the name, the uniform, the iconographic attribute, and the coat of arms are emblems.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;A &lt;b&gt;symbol&lt;/b&gt;, on the other hand, has as its signifier not a physical person, but an abstract entity, an idea, a notion, a concept. Time for example, love, justice, death are symbols. Sometimes, certain figures, certain colors, certain objects are both emblems and symbols. The blue, white, red flag is both the &lt;b&gt;emblem of France&lt;/b&gt;, but also the &lt;b&gt;symbol&lt;/b&gt; of a certain idea of ​​the republic, democracy and freedoms.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;&lt;b&gt;Coats of arms&lt;/b&gt; are therefore &lt;b&gt;emblems&lt;/b&gt;, even if they themselves often use symbols (for example, the use of the color red or golden yellow or an eagle or a wild animal can evoke power). The coat of arms as such symbolizes descent or a family alliance, land ownership, or even a profession.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;&lt;b&gt;What is the origin of heraldic art?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;In the Middle Ages, a &lt;b&gt;herald &lt;/b&gt;was a minor domestic officer in the service of a prince or nobleman whose mission was to &lt;b&gt;carry messages&lt;/b&gt;, &lt;b&gt;declare war&lt;/b&gt; or &lt;b&gt;announce tournaments&lt;/b&gt;. Over time, the &lt;b&gt;herald &lt;/b&gt;specialized in this activity, a bit like our modern sports reporters. To do this, he had to deepen his knowledge of coats of arms and the associated language to describe &lt;b&gt;blazons&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;But how did coats of arms and &lt;b&gt;blazons &lt;/b&gt;initially appear? Greek vases sometimes show warriors with circular shields decorated with animal or plant figures that look a bit like coats of arms. In fact, &lt;b&gt;neither the Greeks nor the Romans used coats of arms&lt;/b&gt;, because the same colours and figures were found from one group of individuals to another and did not sanction a particular belonging to a family, a deme or a city.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;Another origin often heard is that the coat of arms comes from a &lt;b&gt;Byzantine&lt;/b&gt; or &lt;b&gt;Muslim &lt;/b&gt;loan following the Crusades. This is false, since &lt;b&gt;the adoption of heraldic art&lt;/b&gt; in the&lt;b&gt; countries of the Middle East &lt;/b&gt;is&lt;b&gt; much later &lt;/b&gt;than its appearance in Western Europe.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;The origin of coats of arms is linked to&lt;b&gt; two phenomena&lt;/b&gt;: the &lt;b&gt;transformation of feudal society around the year 1000&lt;/b&gt;, as well as the &lt;b&gt;evolution of military equipment at that time&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;In the 11th century, most fighters were &lt;b&gt;covered with chainmail&lt;/b&gt; with a &lt;b&gt;hood&lt;/b&gt; and a &lt;b&gt;nasal helmet&lt;/b&gt; that made them &lt;b&gt;unrecognizable &lt;/b&gt;by friends or foes. They therefore took the habit of painting &lt;b&gt;geometric&lt;/b&gt;, &lt;b&gt;animal &lt;/b&gt;and &lt;b&gt;floral figures&lt;/b&gt; on their &lt;b&gt;large shields&lt;/b&gt;, which served as a sign of recognition in the heart of the fray. It should also be noted that shields were generally &lt;b&gt;reinforced &lt;/b&gt;with more or less wide &lt;b&gt;metal plates&lt;/b&gt;, and sometimes &lt;b&gt;even fur &lt;/b&gt;in order to &lt;b&gt;cushion&lt;/b&gt; the &lt;b&gt;blows of swords&lt;/b&gt;, &lt;b&gt;lances &lt;/b&gt;or &lt;b&gt;axes&lt;/b&gt;. We will see that all this will have an effect on the design and appearance of coats of arms.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;&lt;b&gt;Coats of arms&lt;/b&gt; are therefore initially a way for a group of warriors to &lt;b&gt;identify themselves&lt;/b&gt; as belonging to a &lt;b&gt;noble family&lt;/b&gt;, a &lt;b&gt;fief&lt;/b&gt;, or even a &lt;b&gt;suzerain&lt;/b&gt;. These coats of arms will be found not only on the shields of the fighters, but also on the &lt;b&gt;armor &lt;/b&gt;and &lt;b&gt;crest of the knight&lt;/b&gt;, the &lt;b&gt;caparison &lt;/b&gt;of their &lt;b&gt;steed&lt;/b&gt;, the &lt;b&gt;banners&lt;/b&gt;, as well as the seals that &lt;b&gt;seal official documents&lt;/b&gt;, and finally for principalities and kingdoms: on &lt;b&gt;coins&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;But this is another story ...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: medium;&quot;&gt;To know more (in French):&amp;nbsp;&lt;a href=&quot;https://www.amazon.fr/stores/Michel-Pastoureau/author/B001HMQS5G&quot;&gt;&lt;u&gt;&lt;span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Michel Pastoureau&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;,&lt;/a&gt;&amp;nbsp;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://www.amazon.fr/Lart-héraldique-au-Moyen-Age/dp/2021388077&quot;&gt;&lt;i&gt;L&#39;Art héraldique au Moyen Âge&lt;/i&gt;, Seuil, 2018&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/123441808299903287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/123441808299903287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/123441808299903287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/123441808299903287'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2024/10/heraldry-14-origins.html' title='Heraldry (1/4) : The origins'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiclvORD-Eo0PO1NFepFOoh9KvPJD6cuumlK9d4Q-eNvfclFKU-amUC0dfOieL6ICzqZML4SZWtGkIhYnF5Ufief8HpCY1p5I1kD4x04yxMEZQjt9oDiNWE-KFTQkEM_l_IR1N5FbMaKPGAQZUlGhDOlzvfA0w2LjavEqVsuoRkAcTCSIKaIWQkrpYkBK6X/s72-c/Geoffrey_of_Anjou_Monument.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-5335404855685471468</id><published>2019-02-28T05:23:00.000-08:00</published><updated>2019-02-28T05:23:41.354-08:00</updated><title type='text'>The French HealthCare Ecosystem in five infographics</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_tUJGDIqE_h0PV2cosrjbNIU9Ow29AKpalRu6ch2K-p4WNo5JeuIgFs2joulF1mZmAGgOXTVE1WH_PICZumJBCRUGa-xZyTu3mZG3Kas6TZHTpx-v60d7AcrbmyeDDLfbH03KZRTiJWo/s1600/HC_France_01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;371&quot; data-original-width=&quot;666&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_tUJGDIqE_h0PV2cosrjbNIU9Ow29AKpalRu6ch2K-p4WNo5JeuIgFs2joulF1mZmAGgOXTVE1WH_PICZumJBCRUGa-xZyTu3mZG3Kas6TZHTpx-v60d7AcrbmyeDDLfbH03KZRTiJWo/s1600/HC_France_01.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic-Bzend6ZLHFHz1n3j2tMyxgt-TfRwP19OMBLzT8wefpYrqJPlnE_bFbk7Oqxnp05zR52BicykKdaj6k3GKubPrQAqDz8Xg6yXnNw-WyynlMEWLFvy6fEfXCMftfyhE9kIbkbaqB6jGGO/s1600/HC_France_02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;372&quot; data-original-width=&quot;666&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic-Bzend6ZLHFHz1n3j2tMyxgt-TfRwP19OMBLzT8wefpYrqJPlnE_bFbk7Oqxnp05zR52BicykKdaj6k3GKubPrQAqDz8Xg6yXnNw-WyynlMEWLFvy6fEfXCMftfyhE9kIbkbaqB6jGGO/s1600/HC_France_02.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNFEPni50EWz2f7haLj9Bi-fXS1-D_Cb_NBmAHGPmY_ODwgfQAblaIAUu_UsOhgtCgbn7X2dbdTbmpUF5BsWXZdd7SRKEynngeS0LmEA69uf34SChhinEAWzp8RfEKD9rqPVEecq3eetyS/s1600/HC_France_03.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;376&quot; data-original-width=&quot;666&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNFEPni50EWz2f7haLj9Bi-fXS1-D_Cb_NBmAHGPmY_ODwgfQAblaIAUu_UsOhgtCgbn7X2dbdTbmpUF5BsWXZdd7SRKEynngeS0LmEA69uf34SChhinEAWzp8RfEKD9rqPVEecq3eetyS/s1600/HC_France_03.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YGZ712KqivmslWdQbTeaC2L_ZcC4KbmTVdYADPbh9-Uw0jjfjQyoUO51zEZtcANDydhQhac9nicxuHO5wNjF57EX9N1hHDW-5QOAgOeQZd1U7ViQBBjwmngtKdLL8n3j6PsP9RWMV1pt/s1600/HC_France_04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;372&quot; data-original-width=&quot;663&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8YGZ712KqivmslWdQbTeaC2L_ZcC4KbmTVdYADPbh9-Uw0jjfjQyoUO51zEZtcANDydhQhac9nicxuHO5wNjF57EX9N1hHDW-5QOAgOeQZd1U7ViQBBjwmngtKdLL8n3j6PsP9RWMV1pt/s1600/HC_France_04.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLydVjDN6BC47V8bzwyDOrG9Rx_H2x6EyU_Ryj_pdBertWvJI7UPmkTmIuMG2KLv6INcXFhm4tjD-jzEzpLUow2N2G7ZADrqASO8tOf5AtT2xs3fQhYMYaDVKD4Co1tO__8BkjJPjSmjoK/s1600/HC_France_05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;373&quot; data-original-width=&quot;666&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLydVjDN6BC47V8bzwyDOrG9Rx_H2x6EyU_Ryj_pdBertWvJI7UPmkTmIuMG2KLv6INcXFhm4tjD-jzEzpLUow2N2G7ZADrqASO8tOf5AtT2xs3fQhYMYaDVKD4Co1tO__8BkjJPjSmjoK/s1600/HC_France_05.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/5335404855685471468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/5335404855685471468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5335404855685471468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5335404855685471468'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2019/02/the-french-healthcare-ecosystem-in-five.html' title='The French HealthCare Ecosystem in five infographics'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_tUJGDIqE_h0PV2cosrjbNIU9Ow29AKpalRu6ch2K-p4WNo5JeuIgFs2joulF1mZmAGgOXTVE1WH_PICZumJBCRUGa-xZyTu3mZG3Kas6TZHTpx-v60d7AcrbmyeDDLfbH03KZRTiJWo/s72-c/HC_France_01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-3948600944434913328</id><published>2019-01-28T07:17:00.003-08:00</published><updated>2019-02-01T23:56:19.360-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DMP"/><category scheme="http://www.blogger.com/atom/ns#" term="France"/><category scheme="http://www.blogger.com/atom/ns#" term="Healthcare"/><category scheme="http://www.blogger.com/atom/ns#" term="Medical"/><category scheme="http://www.blogger.com/atom/ns#" term="PHR"/><category scheme="http://www.blogger.com/atom/ns#" term="record"/><title type='text'>The new National French PHR (Dossier Médical Partagé) – How does it work? - Part 2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0UCcjs-2I4IWPqv4PkMWl-fgxS6W1Plk466grrK3mJHK6SmQeSgvBZ3VFal0Fz7X6EwwcGQaVnd_Gt7EIAOxCUbRRtcLj51v9LZ0NzeX34-J8cE3ULTlSu506elD3CZ7lhwyos9DtBOmK/s1600/Keyboard_Pills_DMP.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;378&quot; data-original-width=&quot;611&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0UCcjs-2I4IWPqv4PkMWl-fgxS6W1Plk466grrK3mJHK6SmQeSgvBZ3VFal0Fz7X6EwwcGQaVnd_Gt7EIAOxCUbRRtcLj51v9LZ0NzeX34-J8cE3ULTlSu506elD3CZ7lhwyos9DtBOmK/s1600/Keyboard_Pills_DMP.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In &lt;a href=&quot;http://fandry.blogspot.com/2019/01/the-new-national-french-phr-dossier.html&quot;&gt;my preview post&lt;/a&gt;, I was describing how to create a record into the new National French PHR (Dossier Médical Partagé).&lt;br /&gt;
In this article, I will explore the content of the DMP and discuss the potential challenges of adding new data to it.&lt;br /&gt;
&lt;br /&gt;
First &lt;a href=&quot;https://www.dmp.fr/&quot;&gt;I log&amp;nbsp;with my credentials&lt;/a&gt; (login and password) and provide a 2 factor authentication 6 digits number sent to me either by email of SMS.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.dmp.fr/&quot;&gt;My DMP&lt;/a&gt; contains several tabs:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;RÉCAPITULATIF &lt;/b&gt;(summary)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DOCUMENTS &lt;/b&gt;(documents)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MES INFORMATIONS &lt;/b&gt;(my informations)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GESTION DU DMP&lt;/b&gt; (record management)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HISTORIQUE DES ACCÈS&lt;/b&gt; (Access log)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMbg6jeYzjmlzdtBUxWg7D9w-WA35dOJXPgVFqHKU8H4wpTj4MoRBgXclsiN0hBf0RmTpxt3IdYjNez5Etc1BjXaHohnoktJHEt6ItE2bpbJBV07UNm9cJ709rggGQ8z3Y0w1cErFzO198/s1600/DMP_1_recapitulatif.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;672&quot; data-original-width=&quot;939&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMbg6jeYzjmlzdtBUxWg7D9w-WA35dOJXPgVFqHKU8H4wpTj4MoRBgXclsiN0hBf0RmTpxt3IdYjNez5Etc1BjXaHohnoktJHEt6ItE2bpbJBV07UNm9cJ709rggGQ8z3Y0w1cErFzO198/s1600/DMP_1_recapitulatif.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Let&#39;s start by trying to add manually a document. For this, I have two options:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Typing a document&lt;/li&gt;
&lt;li&gt;Adding a file&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmV6RnWgYeWnzki9cxylRYJdHcEoFORc_iEwPr2REFRI2fgpGd4JxPHqSZkfIB0hcPUpE6Fzuv5IzzxicCZx_EwKsp1ytUO6SorQXuwr_DPtXvHaZdTmbb7zSa6pBIbenW6sBDkvE7LHU/s1600/DMP_1_recapitulatif_add_document.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;255&quot; data-original-width=&quot;866&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmV6RnWgYeWnzki9cxylRYJdHcEoFORc_iEwPr2REFRI2fgpGd4JxPHqSZkfIB0hcPUpE6Fzuv5IzzxicCZx_EwKsp1ytUO6SorQXuwr_DPtXvHaZdTmbb7zSa6pBIbenW6sBDkvE7LHU/s1600/DMP_1_recapitulatif_add_document.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Writing a document:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR3KO7M2OjDB24ZanSgCKXGFN1N1757E2a1Tv8mYnOfa55iqiFBs3eqcoftHAks2oDZdOSKyKp38ijVClpA7aLFpdDXiAKH21r0p5BWk0I27MPQCpmNSHkjRejAq6gjkYmtJU15vyycapz/s1600/DMP_1_recapitulatif_add_document_typing.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;634&quot; data-original-width=&quot;907&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR3KO7M2OjDB24ZanSgCKXGFN1N1757E2a1Tv8mYnOfa55iqiFBs3eqcoftHAks2oDZdOSKyKp38ijVClpA7aLFpdDXiAKH21r0p5BWk0I27MPQCpmNSHkjRejAq6gjkYmtJU15vyycapz/s1600/DMP_1_recapitulatif_add_document_typing.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR3KO7M2OjDB24ZanSgCKXGFN1N1757E2a1Tv8mYnOfa55iqiFBs3eqcoftHAks2oDZdOSKyKp38ijVClpA7aLFpdDXiAKH21r0p5BWk0I27MPQCpmNSHkjRejAq6gjkYmtJU15vyycapz/s1600/DMP_1_recapitulatif_add_document_typing.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR3KO7M2OjDB24ZanSgCKXGFN1N1757E2a1Tv8mYnOfa55iqiFBs3eqcoftHAks2oDZdOSKyKp38ijVClpA7aLFpdDXiAKH21r0p5BWk0I27MPQCpmNSHkjRejAq6gjkYmtJU15vyycapz/s1600/DMP_1_recapitulatif_add_document_typing.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Adding a file:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9jujyP5axKBFzN0u4JBh23MNEN_GR7rprG58XoCrOnN1UMQPEEc3m1loUNkxtqCWTNDRspWUrlz71ZLBeIyF8BDmApzPB8OvOXAndGoBK02cz0jvCWTPngM5dIR_lVWeqgBA8qMSod4K/s1600/DMP_1_recapitulatif_add_document_file.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;488&quot; data-original-width=&quot;938&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS9jujyP5axKBFzN0u4JBh23MNEN_GR7rprG58XoCrOnN1UMQPEEc3m1loUNkxtqCWTNDRspWUrlz71ZLBeIyF8BDmApzPB8OvOXAndGoBK02cz0jvCWTPngM5dIR_lVWeqgBA8qMSod4K/s1600/DMP_1_recapitulatif_add_document_file.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Coming back to the main &lt;b&gt;documents tab&lt;/b&gt;, we can see that it can potentially contain &lt;b&gt;various types&lt;/b&gt; of healthcare related documents:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Synthèses (s&lt;/b&gt;yntheses)&lt;/li&gt;
&lt;/blockquote&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Traitements et soins (t&lt;/b&gt;reatments and care)&lt;/li&gt;
&lt;/blockquote&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Compte-rendus&lt;/b&gt; (reports)&amp;nbsp;&lt;/li&gt;
&lt;/blockquote&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Imagerie médicale&lt;/b&gt; (medical imagerie)&amp;nbsp;&lt;/li&gt;
&lt;/blockquote&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Biologie&lt;/b&gt; (biology / Lab results)&amp;nbsp;&lt;/li&gt;
&lt;/blockquote&gt;
&lt;blockquote style=&quot;border-image: none; border: currentColor; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Prévention &lt;/b&gt;(prevention)&lt;/li&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj28iwSgDl-zL2N4vkyJ5hXjyFdggKkTT2cVZqvnomw_vV2buGLxggu8MB2atXUlBXd1llvH22KA7UO2f4QsJ3JNn013JjZbChEOsDrAzQ6Pmuy8iOCCHmg3jMN77vPiiIhGb9ihVGS4dKY/s1600/DMP_1_small.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;598&quot; data-original-width=&quot;1008&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj28iwSgDl-zL2N4vkyJ5hXjyFdggKkTT2cVZqvnomw_vV2buGLxggu8MB2atXUlBXd1llvH22KA7UO2f4QsJ3JNn013JjZbChEOsDrAzQ6Pmuy8iOCCHmg3jMN77vPiiIhGb9ihVGS4dKY/s1600/DMP_1_small.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
This page has a search section:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLAMTCwJvft7psfHt51T5hBT-eWJCdZLziQyP_sSN1djgasfLTyH8E91JP_1lwh1FBjxlCWoYrTbRMs8OWVaKhAvzWU98ZfjcqSgoe-Fr7Omi9Bj3bsc2Jo9d-OGM4wy2JAG91dzMhNDZP/s1600/DMP_1_documents_search.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;190&quot; data-original-width=&quot;947&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLAMTCwJvft7psfHt51T5hBT-eWJCdZLziQyP_sSN1djgasfLTyH8E91JP_1lwh1FBjxlCWoYrTbRMs8OWVaKhAvzWU98ZfjcqSgoe-Fr7Omi9Bj3bsc2Jo9d-OGM4wy2JAG91dzMhNDZP/s1600/DMP_1_documents_search.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;document section&lt;/b&gt; itself &lt;b&gt;can be expanded&lt;/b&gt; according to very precise &lt;b&gt;documents sub-types&lt;/b&gt;:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b style=&quot;font-weight: bold;&quot;&gt;Synthèses&lt;/b&gt; (syntheses)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;font-weight: bold;&quot;&gt;Synthèse&lt;/b&gt; (synthesis)&lt;/li&gt;
&lt;li&gt;&lt;b style=&quot;font-weight: bold;&quot;&gt;Synthèse d&#39;épisode de soins&lt;/b&gt; (summary episode of care)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Traitements et soins&lt;/span&gt; (treatments and care)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;CR ou fiche de suivi de soins par auxiliaire médical &lt;/b&gt;(report or medical assistant care follow-up card)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Dispensation médicamenteuse &lt;/span&gt;(Drug dispensing)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Dispensation autre&amp;nbsp;&lt;/span&gt;(Dispensation other)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Plan personnalisé de soins &lt;/span&gt;(Personalized care plan)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Prescription de médicaments &lt;/span&gt;(Prescription of drugs)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Prescription de soins &lt;/span&gt;(Prescription of care)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Prescription autre&amp;nbsp;&lt;/span&gt;(Prescription other)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Protocole de soins affection longue durée (ALD) &lt;/span&gt;(Long-term care protocol)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Comptes-rendus&lt;/b&gt; (reports)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;accouchement &lt;/b&gt;(delivery report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;acte diagnostique&lt;/b&gt; (diagnostic act report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;acte thérapeutique&lt;/b&gt; (therapeutic act report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;admission&lt;/b&gt; (admission report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;anesthésie&lt;/b&gt; (reports of anesthesia)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de bilan d&#39;évaluation de la perte d&#39;autonomie&lt;/b&gt; (assessment report reports of loss of autonomy)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de bilan fonctionnel par auxiliaire médical&lt;/b&gt; (reports of functional assessment by medical auxiliary)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de consultation pré-anesthésique&lt;/b&gt; (pre-anesthetic consultation report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de passage aux urgences&lt;/b&gt; (emergency room report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de réunion de concertation pluridisciplinaire&lt;/b&gt; (tumor board report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR de télé-médecine&lt;/b&gt; (telemedicine report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR séjour hospitalier&lt;/b&gt; (report of hospital stay)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR opératoire&lt;/b&gt; (surgery report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CR ou fiche de consultation ou de visite &lt;/b&gt;(visit report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Lettre de liaison à la sortie d&#39;un établissement de soins&lt;/b&gt; (Liaison letter exit of a care facility)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Imagerie médicale&lt;/b&gt; (medical imaging)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;CR d&#39;imagerie médicale&lt;/b&gt; (medical imaging report)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Document encapsulant une image d&#39;illustration non DICOM&lt;/b&gt; (document including a non-DICOM image)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Biologie &lt;/b&gt;(biology)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; &lt;b&gt;CR d&#39;anatomie et de cytologie pathologiques&lt;/b&gt; (anatomy and pathological cytology report)&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;b&gt;CR d&#39;examens biologiques&lt;/b&gt; (biological examination report)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Prévention &lt;/b&gt;(Prevention)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; &lt;b&gt;CR d&#39;acte diagnostique à visée préventive ou de dépistage &lt;/b&gt;(report of diagnostic act)&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;b&gt;CR d&#39;acte thérapeutique à visée préventive&lt;/b&gt; (Preventive action report)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
Now lets looks at the type of data I have in my record. These have been &lt;b&gt;pushed&lt;/b&gt; into my DMP by the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Health_care_in_France&quot;&gt;French national health insurance&lt;/a&gt; (Caisse d&#39;Assurance maladie) accessible via my account &lt;a href=&quot;https://www.ameli.fr/&quot;&gt;AMELI&lt;/a&gt; (Assurance Maladie En LIgne). Each patient in France has one unique &lt;a href=&quot;https://en.wikipedia.org/wiki/INSEE_code&quot;&gt;INSEE number&lt;/a&gt;&amp;nbsp;used for &lt;b&gt;healthcare tracking&lt;/b&gt; (children use their parents accounts) and other administrative purpose. Supplemental coverage is also usually provided by private mutual insurers.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So far it is not clear to me whether they provide any additional information to my record.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
A warning indicates that &lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;the displayed data is a reflection of information from reimbursement or support held by health insurance organizations mandatory for the last 24 months. They are provided for information purposes only and exhaustiveness can not be guaranteed, especially in the event of an administrative change during these 24 months&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are &lt;b&gt;5 possible sections&lt;/b&gt; (In my case the section &lt;b&gt;hospitalization &lt;/b&gt;is empty).&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Pharmacie / fournitures&lt;/b&gt; (Pharmacy and various supplies - e.g. optician / glasses)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hospitalisation&lt;/b&gt; (Hospitalization)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Soins médicaux et dentaires&lt;/b&gt; (Medical and dental care)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Radiologie&lt;/b&gt; (Radiology)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Biologie&lt;/b&gt; (Biology)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Here is how these sections look like (data has been modified/changed for obvious privacy concern).&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Let&#39;s start with the &lt;i&gt;&lt;b&gt;Pharmacy and Medical Supplies&lt;/b&gt;&lt;/i&gt; section:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRLQ-NUJ4qcxi44ubgMXVi7aLh_s21pn03_vUYrlHS-dig0tpilHOLz9sZTPAPheaKtVGN-3jK8TFKzSPINBQOUSLmeoD6plmMoU0_C7kxvR620mcJe5-EJaviik8Zkst4o6OYawFJ0He/s1600/DMP_1_doc_Pharmacy_Glasses.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;237&quot; data-original-width=&quot;802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRLQ-NUJ4qcxi44ubgMXVi7aLh_s21pn03_vUYrlHS-dig0tpilHOLz9sZTPAPheaKtVGN-3jK8TFKzSPINBQOUSLmeoD6plmMoU0_C7kxvR620mcJe5-EJaviik8Zkst4o6OYawFJ0He/s1600/DMP_1_doc_Pharmacy_Glasses.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The section &lt;i&gt;&lt;b&gt;Medical and Dental Care&lt;/b&gt;&lt;/i&gt;&amp;nbsp;includes medical care including &lt;b&gt;PCP&lt;/b&gt;, &lt;b&gt;physiotherapist&lt;/b&gt;, &lt;b&gt;nurse&lt;/b&gt;, &lt;b&gt;dentist&lt;/b&gt;, &lt;b&gt;dermatologist&lt;/b&gt;,&amp;nbsp; &lt;b&gt;ophthalmologist &lt;/b&gt;visits:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGgO7bNez4FDNva5GmWudlKecnzVa6sfIK8Z3ZNJ9cENWpaMctjBxI42uwdFBZj-XCpvZJvL9Na1FtDewtTJf2KpgaNsuqhYJKZFoO3Vv9HA6UsxMgv6Ngzz4rXZl7cWYsbpo8m355LWy3/s1600/DMP_1_doc_Dental_other.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;253&quot; data-original-width=&quot;804&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGgO7bNez4FDNva5GmWudlKecnzVa6sfIK8Z3ZNJ9cENWpaMctjBxI42uwdFBZj-XCpvZJvL9Na1FtDewtTJf2KpgaNsuqhYJKZFoO3Vv9HA6UsxMgv6Ngzz4rXZl7cWYsbpo8m355LWy3/s1600/DMP_1_doc_Dental_other.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
The section &lt;i&gt;&lt;b&gt;Radiology &lt;/b&gt;&lt;/i&gt;includes &lt;b&gt;body &lt;/b&gt;and &lt;b&gt;dental &lt;/b&gt;scans:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjd8z7oHUZyK69NopW03tZKmAVkKcIm6q-VPOZH6atc5L5BRgD4oaumx_xwbVcPvkk3ifv2CoYGPTq1fnWrScWZir8DcAvozCaU2TIRV1msvrijA0DniexJcfMOL6dbgyT1fS13XxafYkE/s1600/DMP_1_doc_Radiology.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;186&quot; data-original-width=&quot;813&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjd8z7oHUZyK69NopW03tZKmAVkKcIm6q-VPOZH6atc5L5BRgD4oaumx_xwbVcPvkk3ifv2CoYGPTq1fnWrScWZir8DcAvozCaU2TIRV1msvrijA0DniexJcfMOL6dbgyT1fS13XxafYkE/s1600/DMP_1_doc_Radiology.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
La section&amp;nbsp;&lt;i&gt;&lt;b&gt;Biology&amp;nbsp;&lt;/b&gt;&lt;/i&gt;includes&amp;nbsp;Labs data (only dates, coding act and types, not the results themselves):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDYBdPAhtNM4lvmu27KWcUO06TxVSc0ZQvyukgJqQIbt4Ok7JChQ13CCRDSIddK6tAay6CV02AeWjuR-2MI-1rep8BKR7_sLypoAb2BTUk2YhaqF6iEWAzGkYACFfJlryzsUHe7WorLsS1/s1600/DMP_1_doc_Biology.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;225&quot; data-original-width=&quot;803&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDYBdPAhtNM4lvmu27KWcUO06TxVSc0ZQvyukgJqQIbt4Ok7JChQ13CCRDSIddK6tAay6CV02AeWjuR-2MI-1rep8BKR7_sLypoAb2BTUk2YhaqF6iEWAzGkYACFfJlryzsUHe7WorLsS1/s1600/DMP_1_doc_Biology.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To sum-up my data is &lt;b&gt;well organized&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b&gt;easy to access&lt;/b&gt;. However &lt;b&gt;only the payer information is available&lt;/b&gt; (French national insurance)&amp;nbsp; which is not very different from what I could obtain directly from my&amp;nbsp;&lt;a href=&quot;https://www.ameli.fr/&quot;&gt;AMELI&lt;/a&gt;&amp;nbsp;account (Assurance Maladie En LIgne). There is &lt;b&gt;no useful clinical information&lt;/b&gt; that I could share with healthcare professionals, expect perhaps if &lt;b&gt;I had manually entered&lt;/b&gt; &lt;b&gt;some of the information myself&lt;/b&gt;. For example, I could have added my lab results from the paper report I had received from the labs or manually added over-the-counter drugs.&lt;br /&gt;
&lt;br /&gt;
In my next post I will look at &lt;b&gt;other features of my DMP&lt;/b&gt; such a &lt;b&gt;consent&lt;/b&gt;, &lt;b&gt;trusted people&lt;/b&gt; and &lt;b&gt;organ donation&lt;/b&gt; options.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/3948600944434913328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/3948600944434913328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3948600944434913328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3948600944434913328'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2019/01/the-new-national-french-phr-dossier_28.html' title='The new National French PHR (Dossier Médical Partagé) – How does it work? - Part 2'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0UCcjs-2I4IWPqv4PkMWl-fgxS6W1Plk466grrK3mJHK6SmQeSgvBZ3VFal0Fz7X6EwwcGQaVnd_Gt7EIAOxCUbRRtcLj51v9LZ0NzeX34-J8cE3ULTlSu506elD3CZ7lhwyos9DtBOmK/s72-c/Keyboard_Pills_DMP.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-6017964491987899791</id><published>2019-01-14T12:01:00.001-08:00</published><updated>2019-01-31T01:27:19.107-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DMP"/><category scheme="http://www.blogger.com/atom/ns#" term="France"/><category scheme="http://www.blogger.com/atom/ns#" term="Healthcare"/><category scheme="http://www.blogger.com/atom/ns#" term="Medical"/><category scheme="http://www.blogger.com/atom/ns#" term="PHR"/><category scheme="http://www.blogger.com/atom/ns#" term="record"/><title type='text'>The new National French PHR (Dossier Médical Partagé) – How does it work? - Part 1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEVMrC9XzlMk0aP73hvFufuN51oamvqLaRS1QDrN2hZpOcVx4TsUolcRbH032Tah8WJuMuX7HLVOlxhFb0rSShxOJfBZawjrG_MJ0oL4nQx_gUxEXeBeRP4NOspm5n5jML4uuZZ3hUaflq/s1600/Header_DMP.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;332&quot; data-original-width=&quot;555&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEVMrC9XzlMk0aP73hvFufuN51oamvqLaRS1QDrN2hZpOcVx4TsUolcRbH032Tah8WJuMuX7HLVOlxhFb0rSShxOJfBZawjrG_MJ0oL4nQx_gUxEXeBeRP4NOspm5n5jML4uuZZ3hUaflq/s1600/Header_DMP.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt;&quot;&gt;Since
&lt;/span&gt;&lt;a href=&quot;https://www.ameli.fr/paris/assure/actualites/dossier-medical-partage-dmp-la-memoire-de-votre-sante&quot; style=&quot;font-family: calibri, sans-serif; font-size: 11pt;&quot;&gt;November 2018&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt;&quot;&gt;, each &lt;/span&gt;&lt;a href=&quot;http://www.leparisien.fr/societe/sante/la-ministre-invite-tous-les-francais-a-se-doter-d-un-carnet-de-sante-numerique-05-11-2018-7936035.php&quot; style=&quot;font-family: calibri, sans-serif; font-size: 11pt;&quot;&gt;French patient&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt;&quot;&gt; can have access to a new national &lt;/span&gt;&lt;b style=&quot;font-family: calibri, sans-serif; font-size: 11pt;&quot;&gt;Patient
Health Record&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt;&quot;&gt; (PHR) called in French the &lt;/span&gt;&lt;a href=&quot;https://www.dmp.fr/&quot; style=&quot;font-family: calibri, sans-serif; font-size: 11pt;&quot;&gt;Dossier Médical Partagé or DMP&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt;&quot;&gt; (shared
medical file).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;b&gt;How does it work from an end-user perspective&lt;/b&gt;? In this post, I
describe my &lt;b&gt;first experience&lt;/b&gt; with this new healthcare application - with all security
and privacy precautions related to my protected health information (PHI).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
I have seen several large scale initiatives starting (e.g.
&lt;a href=&quot;https://www.healthvault.com/en-us/blog/&quot;&gt;Microsoft HealthVault&lt;/a&gt;, &lt;a href=&quot;http://fandry.blogspot.com/2009/04/himss-2009-how-consumers-user-phrs-kp.html&quot;&gt;KP&lt;/a&gt;/&lt;a href=&quot;https://healthy.kaiserpermanente.org/health/care/consumer/my-health-manager&quot;&gt;MyHealth Manager&lt;/a&gt;) with some initiatives including &lt;a href=&quot;https://www.informationweek.com/healthcare/electronic-health-records/5-reasons-why-google-health-failed/d/d-id/1098623&quot;&gt;GoogleHealth&lt;/a&gt; who &lt;a href=&quot;http://fandry.blogspot.com/2008/09/abcs-of-google-health-data-api.html&quot;&gt;was abandoned&lt;/a&gt; for some time and was reborn in another form&lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp; &lt;/span&gt;as &lt;a href=&quot;https://www.blog.google/products/google-cloud/google-cloud-healthcare-new-apis-customers-partners-and-security-updates/&quot;&gt;Google Cloud for Healthcare&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
I have been working in the medical data integration and processing field for many years now and even &lt;a href=&quot;https://patents.justia.com/patent/20180358115&quot;&gt;share a patent&lt;/a&gt; in this domain. By experience, I know that the most difficult part is not to design and create a scalable and secure structured medical repository, but to make sure that it is supplied with&lt;b&gt; up-to-date&lt;/b&gt; and &lt;b&gt;relevant data&lt;/b&gt;. I have a good knowledge of HL7, IHE profiles and other data integration standards and I recognize the&lt;b&gt; complexity of acquiring&lt;/b&gt; and &lt;b&gt;reconcile medical data &lt;/b&gt;to be used by &lt;b&gt;healthcare professionals&lt;/b&gt;. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;; font-size: small;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;First, &lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;l&lt;/span&gt;et’s start with the creation of my DMP. There are several options to create &lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;a&lt;/span&gt; national PHR/DMP in France. The first one is to ask &lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;a &lt;/span&gt;pharmacist to create &lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;it &lt;/span&gt;for you, the second option is to initiate the creation of the DMP yourself. This is the &lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif;&quot;&gt;later&lt;/span&gt; I have chosen. &lt;br /&gt;&lt;br /&gt;
From the main DMP web site creation page&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://www.dmp.fr/patient/creation/etape1&quot;&gt;https://www.dmp.fr/patient/creation/etape1&lt;/a&gt;, I was able to create my account in few minutes after providing a specific creation code generated by dmp.fr and my social security or &lt;a href=&quot;https://en.wikipedia.org/wiki/INSEE_code&quot;&gt;INSEE&amp;nbsp;number&lt;/a&gt;&amp;nbsp;(the main personal ID for patients in France).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEbfJ0_DOg6WMBNQW9DC3FOUr-0tvhaEgGNoelSEw9yfxJ1ZAgh_XJwFBI9YQ_3-NMrQ8iHD6FO9USPGaSKXltABhgUICWbrxUPn2gd0CYDFqzSvgsTD_nhl2I3FoE4ubuN4LolYX3zQM/s1600/DMP_Creation1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;409&quot; data-original-width=&quot;637&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEbfJ0_DOg6WMBNQW9DC3FOUr-0tvhaEgGNoelSEw9yfxJ1ZAgh_XJwFBI9YQ_3-NMrQ8iHD6FO9USPGaSKXltABhgUICWbrxUPn2gd0CYDFqzSvgsTD_nhl2I3FoE4ubuN4LolYX3zQM/s1600/DMP_Creation1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;times new roman&amp;quot;; font-size: small;&quot;&gt;&lt;/span&gt;I also need to add a 11 digit number that is located on my &lt;a href=&quot;https://en.wikipedia.org/wiki/Carte_Vitale&quot;&gt;Carte Vitale&lt;/a&gt;, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Health_insurance&quot; title=&quot;Health insurance&quot;&gt;health insurance&lt;/a&gt; &lt;a class=&quot;mw-redirect&quot; href=&quot;https://en.wikipedia.org/wiki/Smartcard&quot; title=&quot;Smartcard&quot;&gt;card&lt;/a&gt; of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Health_care_in_France&quot; title=&quot;Health care in France&quot;&gt;national health care system in France&lt;/a&gt;.&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2q4lFFPCAPHBPiORUq9fOOZv52s4zxYAhi0KgG8IllLXvCMpyP1nCMTR9wNuheDJSHSfzwDfbeDvpdnvgmrKGAC6jPsz-XgWlUzKVNK85fkX51VAjBMcxXjnWC1tgyB7A7apVjCk6ySXS/s1600/DMP_Creation1b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;453&quot; data-original-width=&quot;666&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2q4lFFPCAPHBPiORUq9fOOZv52s4zxYAhi0KgG8IllLXvCMpyP1nCMTR9wNuheDJSHSfzwDfbeDvpdnvgmrKGAC6jPsz-XgWlUzKVNK85fkX51VAjBMcxXjnWC1tgyB7A7apVjCk6ySXS/s1600/DMP_Creation1b.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;
&lt;br /&gt;
&amp;nbsp; ... some contact info (email and phone):&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXd0j0NPjQpcMziwukXw6o9Wmlb6EoXcrnnx1hHxMhvsJtSJHhm_DaIEED23kBF5GKCvAIZ7WiNpnWD-7Nadx8MXn4mXeUFEy2dqtd1RbgKVywECGe1aH2WKWS6KFtSRRfiknh4OneGSVS/s1600/DMP_Creation2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;340&quot; data-original-width=&quot;363&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXd0j0NPjQpcMziwukXw6o9Wmlb6EoXcrnnx1hHxMhvsJtSJHhm_DaIEED23kBF5GKCvAIZ7WiNpnWD-7Nadx8MXn4mXeUFEy2dqtd1RbgKVywECGe1aH2WKWS6KFtSRRfiknh4OneGSVS/s1600/DMP_Creation2.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
and very important, consent:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;

&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKKJrGXGhCeu0a_6xD_P466EOlGv4VP58KZVdl95XJ0drr9-qmKSVX1WrPskZCj3-YnwN7vknVLL0pzQrxdDB2Zd2tKcggONSeQxgINZekZuZ7WIhw6iipoGLwIUrz7pwmXlE8RiM0wb0p/s1600/DMP_Creation3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;191&quot; data-original-width=&quot;663&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKKJrGXGhCeu0a_6xD_P466EOlGv4VP58KZVdl95XJ0drr9-qmKSVX1WrPskZCj3-YnwN7vknVLL0pzQrxdDB2Zd2tKcggONSeQxgINZekZuZ7WIhw6iipoGLwIUrz7pwmXlE8RiM0wb0p/s1600/DMP_Creation3.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
and my account is created (credentials have been modified for obvious reasons).&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;

&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFzl7VZNeV30jRAEssGEybDULmU3HoPnVWWNDGuIxnNSA502Mx9oCXoDWKZtEvw4m88mUyTsZTePrjFRvorHzTsUmVuqVDCMgSkexKh0q1Y_bGjgork2fKEVei40cCtUJAcrZnsVIpVt9r/s1600/DMP_Creation5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;315&quot; data-original-width=&quot;606&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFzl7VZNeV30jRAEssGEybDULmU3HoPnVWWNDGuIxnNSA502Mx9oCXoDWKZtEvw4m88mUyTsZTePrjFRvorHzTsUmVuqVDCMgSkexKh0q1Y_bGjgork2fKEVei40cCtUJAcrZnsVIpVt9r/s1600/DMP_Creation5.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Additional information is requested (e.g. address etc):&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimqmjTne7UiwdKGMJjZt72kKU1ufmSsa8lTRlfoHF3B9bDwuZecNrvwQGlvVhqVdX_hh5dmekQoK0x_Fob0cQGC4XSHNiEBV5U2qLYwVUl4rccBab-qQIxCKnSFmuLUQb3mZU56Xd2gr1X/s1600/DMP_Creation6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;668&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimqmjTne7UiwdKGMJjZt72kKU1ufmSsa8lTRlfoHF3B9bDwuZecNrvwQGlvVhqVdX_hh5dmekQoK0x_Fob0cQGC4XSHNiEBV5U2qLYwVUl4rccBab-qQIxCKnSFmuLUQb3mZU56Xd2gr1X/s1600/DMP_Creation6.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;

&lt;br /&gt;
&lt;br /&gt;
Now that my account has been created, I am able to access it using my personal credentials:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;/span&gt;

&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMtjqL-UwRD0yGkNCWgjkvGVwrfiarzTh-Xsf2ETH0D8ZX-obgTuTL8e9XDage0KJqh-ZOArmfh5TvMD9TxTbO_tiTLgEpwD-MR8FcQK2ivM2NnLVMHOWn0IXpFdxmmdJvw0ggt-oMhPhB/s1600/DMP_Access_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;405&quot; data-original-width=&quot;681&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMtjqL-UwRD0yGkNCWgjkvGVwrfiarzTh-Xsf2ETH0D8ZX-obgTuTL8e9XDage0KJqh-ZOArmfh5TvMD9TxTbO_tiTLgEpwD-MR8FcQK2ivM2NnLVMHOWn0IXpFdxmmdJvw0ggt-oMhPhB/s1600/DMP_Access_1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A two factor numeric ID is also sent to my cell phone (or email account) can be requested: 
 
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA8GRzCwDqPEtmotBlf_kjdn8eQa68CiK2_7c4P5akmvw7SrGIaK28AwYRQlMyAKkRDiSljJxysypwYiIDj44J3erk3qrejLS9XzN2tjciDtlezRJNk_2SN5k5IoASqExMdEByvlkw3cb8/s1600/DMP_Access_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;234&quot; data-original-width=&quot;672&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA8GRzCwDqPEtmotBlf_kjdn8eQa68CiK2_7c4P5akmvw7SrGIaK28AwYRQlMyAKkRDiSljJxysypwYiIDj44J3erk3qrejLS9XzN2tjciDtlezRJNk_2SN5k5IoASqExMdEByvlkw3cb8/s1600/DMP_Access_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;and used for additional security:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R_tFPFfgpN0YGWJvGtgQ98mP7atTljmosUkkIlOi8-Qxg8EDSbhi7SFKq5F8Vg-iDOY-VELhYHRXw410Twl1ylk7YrbF33EVTs5EKWfo3gFJ1WBRAWCFS4agCj64BypkibC8XQ-23I-C/s1600/DMP_Access_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;216&quot; data-original-width=&quot;696&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R_tFPFfgpN0YGWJvGtgQ98mP7atTljmosUkkIlOi8-Qxg8EDSbhi7SFKq5F8Vg-iDOY-VELhYHRXw410Twl1ylk7YrbF33EVTs5EKWfo3gFJ1WBRAWCFS4agCj64BypkibC8XQ-23I-C/s1600/DMP_Access_3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
For the first connection, I have the option to change some of my account settings:
 
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtD4FGhFtR4scTTS_gO1PjJmZOaMcnFuEe2x90k3l_I-HghnpJIH3h2_XsTkp96llnRJ9X_RFBbYI8ObSc6uZPHuPvgAndzY5xLoPYjLHlcpFcRUZ0j1D7LgPBGoDBWuefp5Z1rNGgIPKB/s1600/DMP_Access_4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;500&quot; data-original-width=&quot;915&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtD4FGhFtR4scTTS_gO1PjJmZOaMcnFuEe2x90k3l_I-HghnpJIH3h2_XsTkp96llnRJ9X_RFBbYI8ObSc6uZPHuPvgAndzY5xLoPYjLHlcpFcRUZ0j1D7LgPBGoDBWuefp5Z1rNGgIPKB/s1600/DMP_Access_4.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJguBpfnSVVwir_hvnBGQky0xX1ICVaMn7cc0k0RZ-mDUPzNne2gIM05yZoOBQSA7ZN6eXCMxutIAso7nTwKQDVtzk-O8Kv5p5aHJgIEQ8psBSq6s4tMHJGXOnacWoz9DFw_rqNhclOhp2/s1600/DMP_Access_5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;429&quot; data-original-width=&quot;696&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJguBpfnSVVwir_hvnBGQky0xX1ICVaMn7cc0k0RZ-mDUPzNne2gIM05yZoOBQSA7ZN6eXCMxutIAso7nTwKQDVtzk-O8Kv5p5aHJgIEQ8psBSq6s4tMHJGXOnacWoz9DFw_rqNhclOhp2/s1600/DMP_Access_5.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
and some &quot;break-the-glass&quot; type authorization settings: 
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbttSeaRbLCxRgP5ew1sKv3QuV24TeS0CR9kPVjz6a3qoEHaPdwI-ndLnc69OkmfFXMnVFhTr3mkJDQBJzN0m-Ilrf_09ax60BKQAciHTAZHozA0YQkfVQCkqS0BiB3_DNLScQWPIg5mUf/s1600/DMP_Access_7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;228&quot; data-original-width=&quot;552&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbttSeaRbLCxRgP5ew1sKv3QuV24TeS0CR9kPVjz6a3qoEHaPdwI-ndLnc69OkmfFXMnVFhTr3mkJDQBJzN0m-Ilrf_09ax60BKQAciHTAZHozA0YQkfVQCkqS0BiB3_DNLScQWPIg5mUf/s1600/DMP_Access_7.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Overall the experience of creating my DMP/PHR account was quite easy and without any particular problem. It was fast and secure. The initial performance of the application seems good, having in mind that this is just the beginning and that only a small number of patients of the French population have a DMP account.&lt;br /&gt;
&lt;br /&gt;
In my &lt;a href=&quot;http://fandry.blogspot.com/2019/01/the-new-national-french-phr-dossier_28.html&quot;&gt;next post&lt;/a&gt;, I will explore the functionalities and the type of data that could be part of a DMP.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 107%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;


&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/6017964491987899791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/6017964491987899791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6017964491987899791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6017964491987899791'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2019/01/the-new-national-french-phr-dossier.html' title='The new National French PHR (Dossier Médical Partagé) – How does it work? - Part 1'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEVMrC9XzlMk0aP73hvFufuN51oamvqLaRS1QDrN2hZpOcVx4TsUolcRbH032Tah8WJuMuX7HLVOlxhFb0rSShxOJfBZawjrG_MJ0oL4nQx_gUxEXeBeRP4NOspm5n5jML4uuZZ3hUaflq/s72-c/Header_DMP.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-6478635683519548547</id><published>2015-09-25T13:26:00.003-07:00</published><updated>2015-09-25T13:26:42.932-07:00</updated><title type='text'>jBPM and BPMN 2.0 workflow creation </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85rSiymtsfaKpjLRwhH4-8hga28V3clRIHiycCY52YMHi3vIoXQbedV9pAtWngcCiGBqgMPgA-WGK88FfZ0mmXBw3yd-QIiriPvKl7mPAA8whBJLXDkgHbeRxg9pFoZU6gNVu93QUj0a0/s1600/US_Weather_Jet_Stream.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85rSiymtsfaKpjLRwhH4-8hga28V3clRIHiycCY52YMHi3vIoXQbedV9pAtWngcCiGBqgMPgA-WGK88FfZ0mmXBw3yd-QIiriPvKl7mPAA8whBJLXDkgHbeRxg9pFoZU6gNVu93QUj0a0/s1600/US_Weather_Jet_Stream.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85rSiymtsfaKpjLRwhH4-8hga28V3clRIHiycCY52YMHi3vIoXQbedV9pAtWngcCiGBqgMPgA-WGK88FfZ0mmXBw3yd-QIiriPvKl7mPAA8whBJLXDkgHbeRxg9pFoZU6gNVu93QUj0a0/s1600/US_Weather_Jet_Stream.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In my &lt;a href=&quot;http://fandry.blogspot.com/2015/08/first-steps-with-jbpm-and-bpmn-20.html&quot;&gt;previous post&lt;/a&gt; I was describing how to install and run jBPM console.&lt;br /&gt;
&lt;br /&gt;
In this one post, I would like to describe h&lt;b&gt;ow quickly create a workflow&lt;/b&gt; calling a &lt;b&gt;web service&lt;/b&gt;.&lt;br /&gt;
I will be using a&amp;nbsp;&lt;a href=&quot;http://openweathermap.org/current&quot;&gt;public weather web service based API&lt;/a&gt;&amp;nbsp;(&lt;a href=&quot;http://openweathermap.org/api&quot;&gt;OpenWeatherMap&lt;/a&gt;) for convenience.&lt;br /&gt;
&lt;br /&gt;
With this &lt;a href=&quot;https://en.wikipedia.org/wiki/Representational_state_transfer&quot;&gt;restful based API&lt;/a&gt;, I can easily query the current weather in a city or a zip code area:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;   &lt;span style=&quot;color: #38761d;&quot;&gt;http://api.openweathermap.org/data/2.5/weather?q=Paris

   http://api.openweathermap.org/data/2.5/weather?zip=94404,us&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
I will now start by creating a new project called &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Meteo &lt;/b&gt;&lt;/span&gt;via the &lt;a href=&quot;http://fandry.blogspot.com/2015/08/first-steps-with-jbpm-and-bpmn-20.html&quot;&gt;jBPM KIE console&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJS7peJaMwOC4Ky6kSnTigA34-H-KqxkFGKhBmfbr0EK_Y4DHXBx1gKeSj4LirnUvZkD3FWHiufJtk0fmH-4WoB40anvOTlM48zsHP_x2wYxwMt1bcTJfW3zou5rrWkH76w6Gg3FARelOe/s1600/Meteo_1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJS7peJaMwOC4Ky6kSnTigA34-H-KqxkFGKhBmfbr0EK_Y4DHXBx1gKeSj4LirnUvZkD3FWHiufJtk0fmH-4WoB40anvOTlM48zsHP_x2wYxwMt1bcTJfW3zou5rrWkH76w6Gg3FARelOe/s640/Meteo_1.png&quot; width=&quot;459&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv6F2Od7BcJJzK2aAQFStxGXc5VyXjO7fbdKIE-XDpPkZ3sxCvaLdVwPzNPjzT7fk8yAAPryX2y70AabE1xM_pMClTo4oFCnd0GZWl-2IWSgQDNLHnKowpAym-Xn0fBqRWf-qiDaIcaZUi/s1600/Meteo_2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv6F2Od7BcJJzK2aAQFStxGXc5VyXjO7fbdKIE-XDpPkZ3sxCvaLdVwPzNPjzT7fk8yAAPryX2y70AabE1xM_pMClTo4oFCnd0GZWl-2IWSgQDNLHnKowpAym-Xn0fBqRWf-qiDaIcaZUi/s400/Meteo_2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyQGxeijToFI-XJxrRk4N5tnJDd8uke3BiOZW-JSvvyZHPWFzuPfaul4O4k1jSuraoeVOMBNJPab8pd3kj3OD5OaxGtk1LX7JVrQ7YlZ4leCS8hBw8PXTDTb7JjrBb_kK9vH3bkIv8enA3/s1600/Meteo_3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyQGxeijToFI-XJxrRk4N5tnJDd8uke3BiOZW-JSvvyZHPWFzuPfaul4O4k1jSuraoeVOMBNJPab8pd3kj3OD5OaxGtk1LX7JVrQ7YlZ4leCS8hBw8PXTDTb7JjrBb_kK9vH3bkIv8enA3/s1600/Meteo_3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
This will create a project where you will be able to add &lt;b&gt;business processes&lt;/b&gt; and &lt;b&gt;task forms&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Next, I am creating a &lt;b&gt;business process&lt;/b&gt;&amp;nbsp;called &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;ObtainWeatherForecast &lt;/span&gt;&lt;/b&gt;to &lt;b&gt;enter a city or zip code&lt;/b&gt;, &lt;b&gt;call the web service&lt;/b&gt; and display the corresponding &lt;b&gt;weather forecast&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf2J7BAGL-YryncKp5w_58KuKL2TiePx4pRYkJvI7tkvMnQc2ZNgz1g6DAlQSI6-rbnTDrrhcApmhzCFCQDSGS8Oflt8s9AzGFdtLE07ty4w349LW6dsZEGmbUj2wXC9v-srZCJ8Ozr2h4/s1600/Meteo_5.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf2J7BAGL-YryncKp5w_58KuKL2TiePx4pRYkJvI7tkvMnQc2ZNgz1g6DAlQSI6-rbnTDrrhcApmhzCFCQDSGS8Oflt8s9AzGFdtLE07ty4w349LW6dsZEGmbUj2wXC9v-srZCJ8Ozr2h4/s400/Meteo_5.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Automatically, the &lt;b&gt;Process Modelling / Shape Repository panel&lt;/b&gt; opens with an initial default &lt;b&gt;Start Event&lt;/b&gt; generated.&lt;br /&gt;
&lt;br /&gt;
Two &lt;b&gt;side panes&lt;/b&gt; are quite useful to add:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;On the left the &lt;b&gt;Object library&lt;/b&gt;.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;On the right side, the &lt;b&gt;Properties &lt;/b&gt;of the BPMN diagram elements.You click on the top buttons to show the panes.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJSbZZ5ISiXCLq42yrIvAuBnT4hlhapSHvIQQw_hD4pjYU-WuXUVr2HIWdl1o9fAV4jRIsumg3oxSn5k9zmK18OIHPL_CB5hUqq0GCXPYv0CqvTqeRIBKYzub1ZF6P3rGwQbCFjXU4-q1/s1600/Meteo_6.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJSbZZ5ISiXCLq42yrIvAuBnT4hlhapSHvIQQw_hD4pjYU-WuXUVr2HIWdl1o9fAV4jRIsumg3oxSn5k9zmK18OIHPL_CB5hUqq0GCXPYv0CqvTqeRIBKYzub1ZF6P3rGwQbCFjXU4-q1/s1600/Meteo_6.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First I am going to define a&lt;b&gt; set of variables&lt;/b&gt; that will be available in the process to maintain internal values so I can &lt;b&gt;share information between nodes&lt;/b&gt;.&lt;br /&gt;
For this I click on the background of the business process and edit the &lt;b&gt;Variable Definitions Properties&lt;/b&gt; of the &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;ObtainWeatherForecast &lt;/span&gt;&lt;/b&gt;business process.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCfek4LK8ZlpUJZfTZVzlXFd_NH3E1WFiMxloXAA6SNGlM_wTzhHVRRORe8huIqXx20oikDsjrXsU7AS7sd8ogEf60-PtyKUL9xR8lqgT1rS8poHvg60pgz3uw5-AaBnY1i-T70hB3uvt5/s1600/Meteo_7.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCfek4LK8ZlpUJZfTZVzlXFd_NH3E1WFiMxloXAA6SNGlM_wTzhHVRRORe8huIqXx20oikDsjrXsU7AS7sd8ogEf60-PtyKUL9xR8lqgT1rS8poHvg60pgz3uw5-AaBnY1i-T70hB3uvt5/s1600/Meteo_7.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0uqLkdXW-j33Jb6a58t4Vaz9NsuhCDcvpSwzyO1SB-yJ_WmHXp2vbV1H91i6a8S8WcCkiN3787-JZmnXwwsdq7vMHzYtykR-cihUNWLgCzxO3Om-9Q6r7VoqXau1v6bFi6VnHfLRWYpK/s1600/Meteo_8.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0uqLkdXW-j33Jb6a58t4Vaz9NsuhCDcvpSwzyO1SB-yJ_WmHXp2vbV1H91i6a8S8WcCkiN3787-JZmnXwwsdq7vMHzYtykR-cihUNWLgCzxO3Om-9Q6r7VoqXau1v6bFi6VnHfLRWYpK/s1600/Meteo_8.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfwl2nhf4UV_sWsuPg1XPHlWStUJkerYTX5hi7h9CsKYwHQVJkOagmeDg_yX998Y0llzDTXlezmxGvn31_ZvXxeOibYeziYeaAGW060RObDNH0bL-_yDmeTi9mqg29DGvkqo4cIxKdEZh/s1600/Meteo_9.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfwl2nhf4UV_sWsuPg1XPHlWStUJkerYTX5hi7h9CsKYwHQVJkOagmeDg_yX998Y0llzDTXlezmxGvn31_ZvXxeOibYeziYeaAGW060RObDNH0bL-_yDmeTi9mqg29DGvkqo4cIxKdEZh/s1600/Meteo_9.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the&amp;nbsp;&lt;b&gt;Process&amp;nbsp;Modelling &lt;/b&gt;panel, when you select a node (event or task), you can select some very useful context icons&lt;br /&gt;
such as View the BPMN Node Source, create a new task or event, link nodes etc ...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-jaTtlJUVacXW7d41le9tUMXTps-oGH6OSAG4koG0ig1rsGJB_y3coGhtPPfgnpqhk_1e9fIg9FADWZVG8vP_roSj85B0FeJG_oKi51D-K3ylS9g4fqWMdv_kvFEAJozIDnZjfUZoi8HW/s1600/Meteo_11.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-jaTtlJUVacXW7d41le9tUMXTps-oGH6OSAG4koG0ig1rsGJB_y3coGhtPPfgnpqhk_1e9fIg9FADWZVG8vP_roSj85B0FeJG_oKi51D-K3ylS9g4fqWMdv_kvFEAJozIDnZjfUZoi8HW/s1600/Meteo_11.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghkPf18pGfcxmV8RG_hwXFPfpar_FyBzJMrHmj9e8xt2lMHwRIoIcgs0GifwEGRuC7qhA7ztHkUFvuBZ05sBEOS36YXwbzI5T2XR3gEPd30LldQ64ZQy8-MhOM_6jWIOyUQkhuX8TFbt-X/s1600/Meteo_12.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghkPf18pGfcxmV8RG_hwXFPfpar_FyBzJMrHmj9e8xt2lMHwRIoIcgs0GifwEGRuC7qhA7ztHkUFvuBZ05sBEOS36YXwbzI5T2XR3gEPd30LldQ64ZQy8-MhOM_6jWIOyUQkhuX8TFbt-X/s1600/Meteo_12.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When adding a new task, you have various ways to do this.&lt;br /&gt;
&lt;br /&gt;
If the task is one of the &lt;b&gt;8 basic Tasks&lt;/b&gt; (&lt;b&gt;User, Send, Receive, Manual, Service, Business Rule, Script, None&lt;/b&gt;),&lt;br /&gt;
then you can either click on the&lt;b&gt; task context icon&lt;/b&gt; to create the next task node (as a &lt;b&gt;generic/none type&lt;/b&gt;)&lt;br /&gt;
from an existing event node or a task node (&lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;1a&lt;/b&gt;&lt;/span&gt;) and specify one of the other 7 basic type if needed using the &lt;b&gt;tool context icon&lt;/b&gt; for a more specific one (&lt;b&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;1b&lt;/span&gt;&lt;/b&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0e8eGI2FVrGQY65uzTaQK_Oc3H8s015DOq9HDphZ9zdfz4xjOWd8o_wVsjDnM5QKiVKRDwa0TgGFvnO-298672HqLtoldGTSD4c20qArRJ0iPKUgd0_cTtFK716O6qBgncoX2g-rDFSG0/s1600/Meteo_13a.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0e8eGI2FVrGQY65uzTaQK_Oc3H8s015DOq9HDphZ9zdfz4xjOWd8o_wVsjDnM5QKiVKRDwa0TgGFvnO-298672HqLtoldGTSD4c20qArRJ0iPKUgd0_cTtFK716O6qBgncoX2g-rDFSG0/s1600/Meteo_13a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use the&amp;nbsp;&lt;b&gt;Object library&lt;/b&gt;&amp;nbsp;and drag/drop the task (&lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;) and link the nodes via the &lt;b&gt;link context icon (&lt;span style=&quot;color: #cc0000;&quot;&gt;3&lt;/span&gt;).&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If you want to add a more specific&lt;b&gt; Service Task&lt;/b&gt; (&lt;b&gt;Email, Log, REST, WS&lt;/b&gt;), then you can use the &lt;b&gt;Object Library&lt;/b&gt; and select the corresponding&amp;nbsp;&lt;b&gt;Service Task&lt;/b&gt; (&lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/span&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-5w7gUrD5YBjh5HkHV9QUCqrg3RrVXzl37L4j4FWc5UABANfms-_Nk-2dmei2VydHbg99iS1AIjQHIDLJ23g-musBNQprLstb8UxJgMiS19WR_NC3v5fNn91eQZGUrH1L8jiuwwP3bPW/s1600/Meteo_13b.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-5w7gUrD5YBjh5HkHV9QUCqrg3RrVXzl37L4j4FWc5UABANfms-_Nk-2dmei2VydHbg99iS1AIjQHIDLJ23g-musBNQprLstb8UxJgMiS19WR_NC3v5fNn91eQZGUrH1L8jiuwwP3bPW/s1600/Meteo_13b.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;REST Service task&lt;/b&gt; has its&lt;b&gt; Data Input&lt;/b&gt; (info associated to RESTful call) and &lt;b&gt;Data Output&lt;/b&gt; (result from the call) &lt;b&gt;properties&lt;/b&gt; already populated:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibQMUUAjjs6O1Tw-aKuSFeEuwg3LqHXxxynZoits-nkf0YNiwyYemAyap-PjRtkEw3gMRWv-PocFWhh77S7Ykx5sLQn68GMUMKYbiEr5dfvh7t2r_sLpp0uNiYSaAfiqqNBOE3go43RZ2i/s1600/Meteo_13b1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibQMUUAjjs6O1Tw-aKuSFeEuwg3LqHXxxynZoits-nkf0YNiwyYemAyap-PjRtkEw3gMRWv-PocFWhh77S7Ykx5sLQn68GMUMKYbiEr5dfvh7t2r_sLpp0uNiYSaAfiqqNBOE3go43RZ2i/s1600/Meteo_13b1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgncSkUc-dpDDHLTy1_pQKAPwC1jGeTXoIsJ5bELCr3aKNPLewIYkfuFRubqrPYQTqEfamKVAnu_SpWFv9qhQaCk1Uh7H-hCAfHtSbfeBj0IQyheZ4o9FPmd8tOJmfPmtgZURd2xyATt4h1/s1600/Meteo_13c.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgncSkUc-dpDDHLTy1_pQKAPwC1jGeTXoIsJ5bELCr3aKNPLewIYkfuFRubqrPYQTqEfamKVAnu_SpWFv9qhQaCk1Uh7H-hCAfHtSbfeBj0IQyheZ4o9FPmd8tOJmfPmtgZURd2xyATt4h1/s1600/Meteo_13c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the &lt;b&gt;Data Assignment variables&lt;/b&gt;, we are going to set the &lt;b&gt;Method&lt;/b&gt; to &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;GET&lt;/b&gt; &lt;/span&gt;and for a quick hard-coded test,&lt;br /&gt;
we are going to set the url to&amp;nbsp;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;http://api.openweathermap.org/data/2.5/weather?q=Paris&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Then we are going to map the object &lt;b&gt;Result &lt;/b&gt;of the call (use [Output Mapping]) to our process variable &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;forecast&lt;/b&gt;&lt;/span&gt;.&lt;br /&gt;
Later we will be able to use the forecast JSON output and extract and display the associated information.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4FI7jbugT5jcMH5YQ-4WALdV1mVSCf_xnPfL2zpaFP7dyg0D6nCElFII4BJzmR5QJki5Z5IU9ItBLnSwYCqahHZ94rXcthBfcWS_PZi6oZi-Ja7pf0xwiv6OEYZG8dZ4EDegJGlUIna0g/s1600/Meteo_13d.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4FI7jbugT5jcMH5YQ-4WALdV1mVSCf_xnPfL2zpaFP7dyg0D6nCElFII4BJzmR5QJki5Z5IU9ItBLnSwYCqahHZ94rXcthBfcWS_PZi6oZi-Ja7pf0xwiv6OEYZG8dZ4EDegJGlUIna0g/s1600/Meteo_13d.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point you can add another &lt;b&gt;Script Task&lt;/b&gt; for displaying the weather forecast result and complete the business process workflow&lt;br /&gt;
with a &lt;b&gt;Terminate End Event, &lt;/b&gt;link all nodes and add useful properties such as names.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlT6Hk2DXUbjbSCCPTUSGoTuKT3BQRmSDhu9ORbaQyvn6Kx_qgVqfZ9R-M6ueStd9R2b1VP6NYkIcg_1xXQtF24CfHO2v40LEVInLnezRagipw4J6PfxmeeITQizdDyIvzSKbDW55ZLWtm/s1600/Meteo_13e.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlT6Hk2DXUbjbSCCPTUSGoTuKT3BQRmSDhu9ORbaQyvn6Kx_qgVqfZ9R-M6ueStd9R2b1VP6NYkIcg_1xXQtF24CfHO2v40LEVInLnezRagipw4J6PfxmeeITQizdDyIvzSKbDW55ZLWtm/s1600/Meteo_13e.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To &lt;b&gt;deploy&lt;/b&gt; your &lt;b&gt;Project&lt;/b&gt; and &lt;b&gt;Business Process&lt;/b&gt;, select &lt;b&gt;Build &amp;amp; Deploy.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFvAHQd9Wf3To332EWLK5U2H-66wWAW9c7xNNtwhMUaYqLm3o3IspeyigZ3dGZ1oTzLy8m1pWDYzApL8m2nENSzd_4dTCRBM8SLN27YCIUfMwL_ZbHHZpvCS7e5LOHz1qFPFak1cAg5Tl/s1600/Meteo_14.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDFvAHQd9Wf3To332EWLK5U2H-66wWAW9c7xNNtwhMUaYqLm3o3IspeyigZ3dGZ1oTzLy8m1pWDYzApL8m2nENSzd_4dTCRBM8SLN27YCIUfMwL_ZbHHZpvCS7e5LOHz1qFPFak1cAg5Tl/s1600/Meteo_14.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After your project is successfully deployed, you select &lt;b&gt;Deploy|Process Deployments&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPE9aJqK8YRiHSja0fuj3SvlCU7QL9N04WSn9yl6kdouCegYwMNxzRhdUfeqlpqYhvJAF6dEreH56z1Q5RqwNg_bUep0z21RipFdOFlvombrBTJgzKBaTkdq_sB1quOoP-2wOhM1j6ZU2K/s1600/Meteo_15.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPE9aJqK8YRiHSja0fuj3SvlCU7QL9N04WSn9yl6kdouCegYwMNxzRhdUfeqlpqYhvJAF6dEreH56z1Q5RqwNg_bUep0z21RipFdOFlvombrBTJgzKBaTkdq_sB1quOoP-2wOhM1j6ZU2K/s1600/Meteo_15.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can then see your deployed project with the option to &lt;b&gt;Deactivate&lt;/b&gt; it or &lt;b&gt;Undeploy&lt;/b&gt; it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0m2STLv6ZqDS-Ami2C_JMpxW2x9DXoKwbWPbWgxgJP7ImQmU1yfNgowgZFLQl4-BJvRrhqGZLdv__CJk3Dw1UcllUlXJfk0n9_QElp1hsYdpjqRi-D20I3O5UYL-JZkrSFDc7LLytIjDi/s1600/Meteo_16.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0m2STLv6ZqDS-Ami2C_JMpxW2x9DXoKwbWPbWgxgJP7ImQmU1yfNgowgZFLQl4-BJvRrhqGZLdv__CJk3Dw1UcllUlXJfk0n9_QElp1hsYdpjqRi-D20I3O5UYL-JZkrSFDc7LLytIjDi/s1600/Meteo_16.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you can check the Process Definitions and start &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;ObtainWeatherForecast&lt;/span&gt;&lt;/b&gt; business process by clicking on the &lt;b&gt;Start &lt;/b&gt;button:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqBpA7JFwQmsQDqjKMsMq3l5afXoLXReuuMupCEA-1fYa4xAAe22dpGlToqHx32_Wd0RFPfc6VuCqXX51PiZ7lNn21X0stJ1mGntevQ7WFS95S9nR_ShrLqCiXOo_1OdmQsUFjxd-T9vtz/s1600/Meteo_17.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqBpA7JFwQmsQDqjKMsMq3l5afXoLXReuuMupCEA-1fYa4xAAe22dpGlToqHx32_Wd0RFPfc6VuCqXX51PiZ7lNn21X0stJ1mGntevQ7WFS95S9nR_ShrLqCiXOo_1OdmQsUFjxd-T9vtz/s1600/Meteo_17.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span id=&quot;goog_1593650434&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1593650435&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrd7ZV_kEwHmNHzvs6j_cKha03eCpej3uZhxfyfovYg4NHeZiA_Yln-0RK3LukSoZ0cfmrTd0LRFIlaBqAcNYFXeuQz1MsDdJJShSoHJpCaqUVWGwps6MpF04fWN8q16MGRgJ8Oogw_33H/s1600/Meteo_18.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrd7ZV_kEwHmNHzvs6j_cKha03eCpej3uZhxfyfovYg4NHeZiA_Yln-0RK3LukSoZ0cfmrTd0LRFIlaBqAcNYFXeuQz1MsDdJJShSoHJpCaqUVWGwps6MpF04fWN8q16MGRgJ8Oogw_33H/s1600/Meteo_18.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After execution of the process, if you look at your &lt;b&gt;Process Variables&lt;/b&gt; as part of the &lt;b&gt;process definition&lt;/b&gt;, you can obtain the current weather in Paris (JSON returned object):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9v4Zw4EcmwtOQtjyEsATuV3VtL4w4PVBTcrW3J04WABl0uwoEPBGjb0jZuhfjw05a6_zWV1KeW1K_BU66YB8CgSMeS8E0L5ao-7cNjc2625ZrdAghyphenhypheny5x4ZqLK0umejnrl9geRh2aFJjh/s1600/Meteo_18a.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9v4Zw4EcmwtOQtjyEsATuV3VtL4w4PVBTcrW3J04WABl0uwoEPBGjb0jZuhfjw05a6_zWV1KeW1K_BU66YB8CgSMeS8E0L5ao-7cNjc2625ZrdAghyphenhypheny5x4ZqLK0umejnrl9geRh2aFJjh/s1600/Meteo_18a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;b style=&quot;color: #38761d; white-space: pre-wrap;&quot;&gt;{&quot;coord&quot;:{&quot;lon&quot;:2.35,&quot;lat&quot;:48.85},&quot;weather&quot;:[{&quot;id&quot;:803,&quot;main&quot;:&quot;Clouds&quot;,&quot;description&quot;:&quot;broken clouds&quot;,&quot;icon&quot;:&quot;04n&quot;}],&quot;base&quot;:&quot;cmc stations&quot;,&quot;main&quot;:{&quot;temp&quot;:287.89,&quot;pressure&quot;:1024,&quot;humidity&quot;:67,&quot;temp_min&quot;:286.15,&quot;temp_max&quot;:289.26},&quot;wind&quot;:{&quot;speed&quot;:2.6,&quot;deg&quot;:20},&quot;clouds&quot;:{&quot;all&quot;:75},&quot;dt&quot;:1443208502,&quot;sys&quot;:{&quot;type&quot;:1,&quot;id&quot;:5615,&quot;message&quot;:0.0054,&quot;country&quot;:&quot;FR&quot;,&quot;sunrise&quot;:1443159717,&quot;sunset&quot;:1443202883},&quot;id&quot;:2988507,&quot;name&quot;:&quot;Paris&quot;,&quot;cod&quot;:200}&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;white-space: pre-wrap; word-wrap: break-word;&quot;&gt;&lt;/pre&gt;
&lt;br /&gt;
One last tip on this first hands-on experience. If your &lt;b&gt;Project Explorer&lt;/b&gt; goes away for some reasons (it seems there is &lt;a href=&quot;https://developer.jboss.org/thread/254098&quot;&gt;a bug in 6.2.0 final&lt;/a&gt;&amp;nbsp;related to this). Try to click on the reset perspective button:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQgAOXiSBB2cjngRX1XFS4feWz5r_4H0j3CInbIuhABq87Un5EsHZjjFXX2eOBi2RjH-Buh-8Lzewzj4mTyp0lhPIuR00_SoVTDl9Rpx65uHViPJFv6Yr2xRTidcc4kggrgPBesdGbzhuO/s1600/Meteo_19.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQgAOXiSBB2cjngRX1XFS4feWz5r_4H0j3CInbIuhABq87Un5EsHZjjFXX2eOBi2RjH-Buh-8Lzewzj4mTyp0lhPIuR00_SoVTDl9Rpx65uHViPJFv6Yr2xRTidcc4kggrgPBesdGbzhuO/s1600/Meteo_19.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCYbGdiaE2SeOBSG4CfzPzc3cVIpd4gMtrOx6kByIcxrnzEBaf9QOQY-N_wPDMGXlf9LbEb13Lrtti2M1RhVhgVbYYCXIdjhhZpcspcSiDRO2-DCeI2j8Nd7GsQ7QwnG6PUAF3Rgk0Y05r/s1600/Meteo_20.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCYbGdiaE2SeOBSG4CfzPzc3cVIpd4gMtrOx6kByIcxrnzEBaf9QOQY-N_wPDMGXlf9LbEb13Lrtti2M1RhVhgVbYYCXIdjhhZpcspcSiDRO2-DCeI2j8Nd7GsQ7QwnG6PUAF3Rgk0Y05r/s1600/Meteo_20.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/6478635683519548547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/6478635683519548547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6478635683519548547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6478635683519548547'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2015/09/jbpm-and-bpmn-20-workflow-creation.html' title='jBPM and BPMN 2.0 workflow creation '/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85rSiymtsfaKpjLRwhH4-8hga28V3clRIHiycCY52YMHi3vIoXQbedV9pAtWngcCiGBqgMPgA-WGK88FfZ0mmXBw3yd-QIiriPvKl7mPAA8whBJLXDkgHbeRxg9pFoZU6gNVu93QUj0a0/s72-c/US_Weather_Jet_Stream.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-7593302622961107569</id><published>2015-08-07T16:46:00.000-07:00</published><updated>2015-08-19T11:08:45.861-07:00</updated><title type='text'>First Steps with jBPM and BPMN 2.0 Modelization Tools</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rSECEfFu6K5Xl8TPjvtebkX8EiWEtvbjaOkT-OIzhrqnonXz-mThNBzFrNImJ_kTma110OjVWvXrQRb-VC_mQlWF9nK6eKDc2UvzDb84NwULKuB3aRisP9pOziyNCo5WRNR-3jlc_tmp/s1600/workflow_design.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rSECEfFu6K5Xl8TPjvtebkX8EiWEtvbjaOkT-OIzhrqnonXz-mThNBzFrNImJ_kTma110OjVWvXrQRb-VC_mQlWF9nK6eKDc2UvzDb84NwULKuB3aRisP9pOziyNCo5WRNR-3jlc_tmp/s1600/workflow_design.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
In this post, I would like to share my initial experience with &lt;a href=&quot;https://en.wikipedia.org/wiki/JBPM&quot;&gt;&lt;b&gt;jBPM&lt;/b&gt;&lt;/a&gt; and &lt;b&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Business_Process_Model_and_Notation&quot;&gt;BPMN&lt;/a&gt; 2.0&lt;/b&gt; modelization tools in general. &lt;b style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://www.jbpm.org/&quot;&gt;jBPM&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt; is an open-source &lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Workflow_engine&quot; style=&quot;text-align: left;&quot; title=&quot;Workflow engine&quot;&gt;workflow engine&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt; written in &lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Java_(programming_language)&quot; style=&quot;text-align: left;&quot; title=&quot;Java (programming language)&quot;&gt;Java&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt; that can execute business processes described in &lt;/span&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;https://en.wikipedia.org/wiki/BPMN&quot; style=&quot;text-align: left;&quot; title=&quot;BPMN&quot;&gt;&lt;b&gt;BPMN&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt; 2.0&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Business_Process_Model_and_Notation&quot;&gt;&lt;b&gt;Business Process Model and Notation&lt;/b&gt; (&lt;b&gt;BPMN&lt;/b&gt;)&lt;/a&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Information_visualization&quot; title=&quot;Information visualization&quot;&gt;graphical representation&lt;/a&gt; for specifying &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_process&quot; title=&quot;Business process&quot;&gt;business processes&lt;/a&gt; in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Business_process_modeling&quot; title=&quot;Business process modeling&quot;&gt;business process model&lt;/a&gt;. As an architect, I have been using BPMN as a language for business process modeling (e.g. for the functional breakdown of complex processing pipelines for &lt;a href=&quot;https://en.wikipedia.org/wiki/Genomics&quot;&gt;genomics systems&lt;/a&gt;).&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
They are different ways to &lt;a href=&quot;http://www.jbpm.org/download/download.html&quot;&gt;install jBPM&lt;/a&gt;. The quickest installations options include:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;downloading a zip file and install it on a PC or&lt;/li&gt;
&lt;li&gt;downloading and using a docker image (particularly suitable for Mac OS)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
In this post, I will describe option #1 (basic &lt;a href=&quot;http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.2.0.Final/&quot;&gt;zip based install&lt;/a&gt;). In this case, what you obtain is a zip file - e.g. &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;jbpm-6.2.0.Final-installer-full.zip&lt;/b&gt;&lt;/span&gt; - latest version as of&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;8/7/2015.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;First make sure you have installed &lt;/span&gt;&lt;a href=&quot;http://ant.apache.org/&quot; style=&quot;text-align: justify;&quot;&gt;Apache Ant&lt;/a&gt;&lt;span style=&quot;text-align: justify;&quot;&gt; and it is on your &lt;/span&gt;&lt;a href=&quot;http://www.computerhope.com/issues/ch000549.htm&quot; style=&quot;text-align: justify;&quot;&gt;Windows Path&lt;/a&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;To install type the following command at the prompt in the&lt;b&gt; jbpm-installer&lt;/b&gt; folder:&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;$ ant install.demo&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhABcn3aa-xpUQVdTKBcovXOqbfcsrL_XSBTEAlS5Kw0EKRlfhdKZ3WzbeokplwOYrt9lHL6-5yLV10SJpdl2sE-n5NSZOVnSCFsjsyv7GCWDD5mKSCR4J9_HFMB_eYcpIjr8T5rjurEWvc/s1600/ant_install.demo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhABcn3aa-xpUQVdTKBcovXOqbfcsrL_XSBTEAlS5Kw0EKRlfhdKZ3WzbeokplwOYrt9lHL6-5yLV10SJpdl2sE-n5NSZOVnSCFsjsyv7GCWDD5mKSCR4J9_HFMB_eYcpIjr8T5rjurEWvc/s1600/ant_install.demo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;
After few minutes, all dependencies are fully downloaded and jBPM is installed.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQ0gnEK5qiHR8TBwFZ-tO45nItg03kyGej5jEYKBLbVHbUtvrGo1xVJ8n8z3GeNlhFCf7LOPyQRrUhJpClwtvdMcISU6xCSbUFrJpNdclSNcGpiUlw982_qU2KQH3h0PHnJaCQ4iizWxl/s1600/ant_install.demo_done.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQ0gnEK5qiHR8TBwFZ-tO45nItg03kyGej5jEYKBLbVHbUtvrGo1xVJ8n8z3GeNlhFCf7LOPyQRrUhJpClwtvdMcISU6xCSbUFrJpNdclSNcGpiUlw982_qU2KQH3h0PHnJaCQ4iizWxl/s1600/ant_install.demo_done.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;You are now ready to start the web-based &lt;a href=&quot;http://docs.jboss.org/drools/release/6.2.0.CR4/drools-docs/html/KIEChapter.html&quot;&gt;Knowledge Is Everything&lt;/a&gt;&amp;nbsp;&lt;b&gt;KIE&amp;nbsp;&lt;/b&gt;&lt;b&gt;workbench &lt;/b&gt;(there is also an &lt;a href=&quot;http://docs.jboss.org/jbpm/v6.0/userguide/jBPMEclipseJBPM.html&quot;&gt;Eclipse IDE plugin&lt;/a&gt; available with the download that you can use).&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;$ ant start.demo&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Alternatively you can also download and start the demo &lt;b&gt;without eclipse&lt;/b&gt;:&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b style=&quot;color: #38761d;&quot;&gt;$ ant install.demo.noeclipse&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;$ ant start.demo.noeclipse&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQpcXXpfiaf723l1pdsNK2CVOaURGOq_9A-SWi0FErfaZ-PsOao4UYIdvKiAA_wA2lLNH87qeHHJU9zUqP5qxlweToyYtyDobZjf_P9SS7rsHdXq_yQl-bY31QLUcLvyE926SR6Jac-BrE/s1600/ant_start.demo_done.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQpcXXpfiaf723l1pdsNK2CVOaURGOq_9A-SWi0FErfaZ-PsOao4UYIdvKiAA_wA2lLNH87qeHHJU9zUqP5qxlweToyYtyDobZjf_P9SS7rsHdXq_yQl-bY31QLUcLvyE926SR6Jac-BrE/s1600/ant_start.demo_done.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-weight: bold; text-align: left;&quot;&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Issues deploying&amp;nbsp;&lt;b style=&quot;text-align: justify;&quot;&gt;jbpm-console.war&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: inline !important; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;if &lt;b&gt;jbpm-console.war&lt;/b&gt; cannot be deployed in JBoss &lt;a href=&quot;http://wildfly.org/&quot;&gt;wildfly&lt;/a&gt;&amp;nbsp;application server (former &lt;a href=&quot;https://en.wikipedia.org/wiki/WildFly&quot;&gt;JBoss AS&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;see folder: .&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;..\jBPM\jbpm-installer\wildfly-8.1.0.Final\standalone\deployments&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;and check log file: .&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;..\jBPM\jbpm-installer\wildfly-8.1.0.Final\standalone\log\server.log&lt;/b&gt;&lt;/span&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;You might have encounter an &lt;b&gt;issue with your proxy!!!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;There are &lt;a href=&quot;https://developer.jboss.org/thread/256392&quot;&gt;several ways to fix this&lt;/a&gt;, including&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;installing KIE outside your firewall/proxy server influence (not from our office!)&lt;/li&gt;
&lt;li&gt;modify your file &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;...\jBPM\jbpm-installer\build.xml file&lt;/b&gt;&lt;/span&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;pre&gt;                 &lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&amp;lt;exec executable=&quot;${jboss.full.path.win}&quot; spawn=&quot;yes&quot; osfamily=&quot;windows&quot;&amp;gt;
                      &amp;lt;env key=&quot;JAVA_OPTS&quot; value=&quot;-XX:MaxPermSize=256m -Xms256m -Xmx512m&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;-b&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;${jboss.bind.address}&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;--server-config=standalone-full.xml&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;-Dorg.kie.demo=true&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;-Dorg.kie.example=false&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;-Dhttp.proxyHost=....&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;-Dhttp.proxyPort=8999&quot; /&amp;gt;
                      &amp;lt;arg value=&quot;c standalone-full.xml&quot;/&amp;gt;&lt;/b&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: inline !important; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: inline !important; text-align: center;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;Using KIE&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;If successfully deployed, go to your browser (use Chrome for better experience!) and enter&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;http://localhost:8080/jbpm-console/kie-wb.html&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: inline !important; text-align: center;&quot;&gt;
&lt;b style=&quot;color: #38761d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b style=&quot;color: #38761d;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;You should have access to the &lt;b&gt;jBPM KIE console&lt;/b&gt; (see also&amp;nbsp;&lt;a href=&quot;http://people.redhat.com/kverlaen/jbpm6F-installer-console.swf&quot;&gt;video demo here&lt;/a&gt;&amp;nbsp;and look at &lt;a href=&quot;https://www.packtpub.com/networking-and-servers/jbpm-6-developer-guide&quot;&gt;jBPM6 Developer Guide&lt;/a&gt;).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbQJIqRVLZrwuJSnPclO6La-8h1LbQSvB-0Vh8JfjOHVy-IcCD0tvZHcEkZIqlZrmWLVH6jzZdqtcjaId9Vm3iavXA8mOo74nlGj-2Lj4v2xcGZehhLw3JW6GPBAyuwu8PRmsT-PeF-uy3/s1600/KIE_jBPM_Console.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;315&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbQJIqRVLZrwuJSnPclO6La-8h1LbQSvB-0Vh8JfjOHVy-IcCD0tvZHcEkZIqlZrmWLVH6jzZdqtcjaId9Vm3iavXA8mOo74nlGj-2Lj4v2xcGZehhLw3JW6GPBAyuwu8PRmsT-PeF-uy3/s320/KIE_jBPM_Console.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; The default user name and password are &#39;&lt;span style=&quot;color: #38761d; font-weight: bold;&quot;&gt;admin&lt;/span&gt;&#39;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHwGfj5zHYxB25f8bxnuEstdjwX2fdmeegGPut3BCz2yeeoFGqd4pcRidkpTw94_n6W2i9233b1QoAnALb7ebgReFLSZ6uNOsPL_dv-S6XwnDOUZcazVS10vH7AcnN23vt7nrLfgwMBIo/s1600/KIE_workbench.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHwGfj5zHYxB25f8bxnuEstdjwX2fdmeegGPut3BCz2yeeoFGqd4pcRidkpTw94_n6W2i9233b1QoAnALb7ebgReFLSZ6uNOsPL_dv-S6XwnDOUZcazVS10vH7AcnN23vt7nrLfgwMBIo/s640/KIE_workbench.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
To have access to the business process demos click &lt;b&gt;Authoring/Project &lt;/b&gt;and choose &lt;b&gt;async-examples&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjOeNm_yhyphenhyphenyq_G6tFStP-WOKEhBIDqDxRKFFcVf-SI62cejbHMClDhfkElBzk0C7UJZBS44_Eb7kNG0ZRwWIfOUcCDInsuYFkM3mVNfpH0RADH4CU0pWgj-MWr7tluSy8cVX91shoVS0rN/s1600/KIE_workbench_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjOeNm_yhyphenhyphenyq_G6tFStP-WOKEhBIDqDxRKFFcVf-SI62cejbHMClDhfkElBzk0C7UJZBS44_Eb7kNG0ZRwWIfOUcCDInsuYFkM3mVNfpH0RADH4CU0pWgj-MWr7tluSy8cVX91shoVS0rN/s1600/KIE_workbench_1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Then &lt;b&gt;Business Processes/check weather&lt;/b&gt; (one of the demos - this one is very simple and fun!).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHEyhJ8sTKP3TOygPLuaqh1FbhRpjYfqK8ezHYefiNKT3F51pKrqbS_Ul72TIQk0fI1t52Yg7yuML_wnkLCloXvVth_0blKtbRj5C1OA0Yz3gGEhFGhp1_tC_Z6hKMtIywFYTaqErzeGYr/s1600/KIE_workbench_2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHEyhJ8sTKP3TOygPLuaqh1FbhRpjYfqK8ezHYefiNKT3F51pKrqbS_Ul72TIQk0fI1t52Yg7yuML_wnkLCloXvVth_0blKtbRj5C1OA0Yz3gGEhFGhp1_tC_Z6hKMtIywFYTaqErzeGYr/s1600/KIE_workbench_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;This displays a &lt;b&gt;very simple business process &lt;/b&gt;where the user can enter a &lt;b&gt;zip code&lt;/b&gt; and obtain the &lt;b&gt;weather forecast&lt;/b&gt; associated to the zip code in question:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TlmUM5qYK5Dzefug-KALotd1bFabA73IhDS-BdXF9BjSo1YqMvwvyHZDJhM0mTDYsmXOEI-eAXeO2YfUtmeZYhzUfdAP9LasgiHUMsrsoidQTB2VwszlBiFoOmMyNxn_H_a1KSRdkJtK/s1600/KIE_workbench_3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TlmUM5qYK5Dzefug-KALotd1bFabA73IhDS-BdXF9BjSo1YqMvwvyHZDJhM0mTDYsmXOEI-eAXeO2YfUtmeZYhzUfdAP9LasgiHUMsrsoidQTB2VwszlBiFoOmMyNxn_H_a1KSRdkJtK/s1600/KIE_workbench_3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Open the &lt;b&gt;properties pane&lt;/b&gt;&amp;nbsp;&amp;nbsp;if not displayed by clicking the &lt;b&gt;double arrow&lt;/b&gt; on the top right side of the application.&lt;br /&gt;
&lt;br /&gt;
You can initially do a&amp;nbsp;&lt;b&gt;copy of the demo&lt;/b&gt;&amp;nbsp;in case you want to make some&amp;nbsp;&lt;b&gt;modifications to the demo process.&amp;nbsp;&lt;/b&gt;You will need to modify the &lt;b&gt;ID&lt;/b&gt; and the &lt;b&gt;Version&lt;/b&gt; of the business process and save a copy.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LPnGKDFV3n3v45IlGM6hFrpF1lvWriuwUpjBhV034pYdE1uDBMAx6vOWnX8nYrv881Z-hZ8-IQ58AFg7TSQrsi8tE7N57GY9tnIblnG7NqGp37XjQFm3yPpqf_Wq5p_0-7yIHULc6Xca/s1600/KIE_workbench_4a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LPnGKDFV3n3v45IlGM6hFrpF1lvWriuwUpjBhV034pYdE1uDBMAx6vOWnX8nYrv881Z-hZ8-IQ58AFg7TSQrsi8tE7N57GY9tnIblnG7NqGp37XjQFm3yPpqf_Wq5p_0-7yIHULc6Xca/s1600/KIE_workbench_4a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0amGFYMCbEjwv3NGAxEZZLl5xyHaChk2IgI-np3yflvYg3OcccsME4U6YfLmDa6Rv_QvEwro2G8RpeF5nhKEZW3Yr81BAU3N7lYz_b_MWkami0nuA8u2cptul-WKM9NwqDHGwD5Vm4r5t/s1600/KIE_workbench_3a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0amGFYMCbEjwv3NGAxEZZLl5xyHaChk2IgI-np3yflvYg3OcccsME4U6YfLmDa6Rv_QvEwro2G8RpeF5nhKEZW3Yr81BAU3N7lYz_b_MWkami0nuA8u2cptul-WKM9NwqDHGwD5Vm4r5t/s1600/KIE_workbench_3a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj20xHsx85djYlUrq8fw7yJCkMkrLZHSG2-TVkRRvlf93_CROMEl7DK9qe-uXtl7uqzugt46qb9f4FhcINM6mDaaWaureUd6vtyspBrwDXewV2eUC4BUTbAidkLEViVZQuaDv79ieGl8ksc/s1600/KIE_workbench_4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj20xHsx85djYlUrq8fw7yJCkMkrLZHSG2-TVkRRvlf93_CROMEl7DK9qe-uXtl7uqzugt46qb9f4FhcINM6mDaaWaureUd6vtyspBrwDXewV2eUC4BUTbAidkLEViVZQuaDv79ieGl8ksc/s1600/KIE_workbench_4.png&quot; style=&quot;cursor: move;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter &lt;b&gt;a new name&lt;/b&gt; and optionally &lt;b&gt;some comments&lt;/b&gt; for the new version of the process:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIrCgHMxU-SuD9s3-bUmNfo3DvfB3DDOQat51KoUgcOGq8-QqIcN1ZYcomgQgQ6ef3ejnLrfQjQadJntgyC2FhrLOKOcoj9-B9AzSdr6AVAVCEIkTjAwy5oa_N2i9x1ODiuI_HkvgeDE2k/s1600/KIE_workbench_5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIrCgHMxU-SuD9s3-bUmNfo3DvfB3DDOQat51KoUgcOGq8-QqIcN1ZYcomgQgQ6ef3ejnLrfQjQadJntgyC2FhrLOKOcoj9-B9AzSdr6AVAVCEIkTjAwy5oa_N2i9x1ODiuI_HkvgeDE2k/s1600/KIE_workbench_5.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; The copy should now appear in the list of &lt;b&gt;business processes:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6TnXOwet2PoDXmmvWi6KLcD2flNiz4kl1OnCG_pmgsaZebxlcaPI-SsWWxFePzjUHsLCIPBP6nZwMgeNnPkwwH6iKKVZ11QO7_WMSTvMUJkRiCxCTlqixsYvfoRxbjGVEDvwhQu2s7UWy/s1600/KIE_workbench_6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6TnXOwet2PoDXmmvWi6KLcD2flNiz4kl1OnCG_pmgsaZebxlcaPI-SsWWxFePzjUHsLCIPBP6nZwMgeNnPkwwH6iKKVZ11QO7_WMSTvMUJkRiCxCTlqixsYvfoRxbjGVEDvwhQu2s7UWy/s1600/KIE_workbench_6.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Deployment of a Process is done by opening the &lt;b&gt;Project&lt;/b&gt; and select &lt;b&gt;Build/Build &amp;amp; Deploy&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7C_p9HqnXeSfe9kQYnB_qAPOiZm5jrxGNIUO75WQnbYA_-zqBgWEGODT9LaiqxBbRvzTbwwxQ44jJ5xybRJtHp7BvtRTa5oAKhI4WnQzGIbGoof5TeyUT5D7UYqo2MoxysV1fnBHuU2VQ/s1600/KIE_workbench_6b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7C_p9HqnXeSfe9kQYnB_qAPOiZm5jrxGNIUO75WQnbYA_-zqBgWEGODT9LaiqxBbRvzTbwwxQ44jJ5xybRJtHp7BvtRTa5oAKhI4WnQzGIbGoof5TeyUT5D7UYqo2MoxysV1fnBHuU2VQ/s1600/KIE_workbench_6b.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggcCrS99mcpU-wAcyahCqkqtCyHbWulFFLMPaJ9j4M7maAILRJC5mFolM6C-Zl33geTRpsqmF5QETYjB6tHVIWKlkIkPrGzKGpuZsFJ0cfIszoPOrAa6rTD8NobcSMNgX3f4vG5FKvGxzZ/s1600/KIE_workbench_6c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggcCrS99mcpU-wAcyahCqkqtCyHbWulFFLMPaJ9j4M7maAILRJC5mFolM6C-Zl33geTRpsqmF5QETYjB6tHVIWKlkIkPrGzKGpuZsFJ0cfIszoPOrAa6rTD8NobcSMNgX3f4vG5FKvGxzZ/s1600/KIE_workbench_6c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;To run the demo process, select &lt;b&gt;Process Management/Process Definitions&lt;/b&gt;&amp;nbsp;then select your process and click on the &lt;b&gt;start Action icon&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qMur5ZBye91MZNu22EEv6El5ciPNLJaWtXKSkdBQQOlIxj6FSB5IOIiIv9l7A5t6QMuYOLDVlFKTEDX8uICTXeg6DtNNApE1wrZfzhzHdyZpnjBYU4-R2gIUjHGVdE7PIe-MRDUAgmN8/s1600/KIE_workbench_7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qMur5ZBye91MZNu22EEv6El5ciPNLJaWtXKSkdBQQOlIxj6FSB5IOIiIv9l7A5t6QMuYOLDVlFKTEDX8uICTXeg6DtNNApE1wrZfzhzHdyZpnjBYU4-R2gIUjHGVdE7PIe-MRDUAgmN8/s1600/KIE_workbench_7.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp; Enter the user name (&#39;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/span&gt;&#39;) and a &lt;a href=&quot;https://tools.usps.com/go/ZipLookupAction_input&quot;&gt;US zip code&lt;/a&gt; - Here I am using 94036 (&lt;a href=&quot;http://www.cityofpaloalto.org/&quot;&gt;Palo Alto, CA&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiugTbIxl5fuSksdr5IvSzIrA9v3WkpjmxJImAcHx58dI6PLQ3qXnarnfwjSfQFiRnonR__9CYnoKDlsAka0JMWGrKW-g-F2OKmQ9-gkSfNjz_4_j429Tkm2y0Gi5i8-Cak8dR6EvKHp8N4/s1600/KIE_workbench_8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiugTbIxl5fuSksdr5IvSzIrA9v3WkpjmxJImAcHx58dI6PLQ3qXnarnfwjSfQFiRnonR__9CYnoKDlsAka0JMWGrKW-g-F2OKmQ9-gkSfNjz_4_j429Tkm2y0Gi5i8-Cak8dR6EvKHp8N4/s1600/KIE_workbench_8.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/7593302622961107569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/7593302622961107569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/7593302622961107569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/7593302622961107569'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2015/08/first-steps-with-jbpm-and-bpmn-20.html' title='First Steps with jBPM and BPMN 2.0 Modelization Tools'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rSECEfFu6K5Xl8TPjvtebkX8EiWEtvbjaOkT-OIzhrqnonXz-mThNBzFrNImJ_kTma110OjVWvXrQRb-VC_mQlWF9nK6eKDc2UvzDb84NwULKuB3aRisP9pOziyNCo5WRNR-3jlc_tmp/s72-c/workflow_design.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-1140002680151111577</id><published>2015-04-02T16:29:00.002-07:00</published><updated>2015-04-02T16:31:46.103-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Foundry"/><category scheme="http://www.blogger.com/atom/ns#" term="Containers"/><category scheme="http://www.blogger.com/atom/ns#" term="Healthcare"/><category scheme="http://www.blogger.com/atom/ns#" term="IHE"/><category scheme="http://www.blogger.com/atom/ns#" term="Pivotal"/><category scheme="http://www.blogger.com/atom/ns#" term="Service Brokering"/><title type='text'>Migrating Healthcare Applications to the Cloud through Containerization and Service Brokering</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Organizations that are building their own cloud infrastructure from scratch or rely uniquely only on an &lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/IaaS#Infrastructure_as_a_service_.28IaaS.29&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;infrastructure as a service (IaaS)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt; from a provider, risk spending valuable resources and time building a specialized platform instead of focusing on their core business. On the other hand, organizations who adopt a turnkey proprietary cloud stack will lack flexibility and may end up locked into a specific technology or vendor.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Instead of designing the cloud architecture from the bottom up or the top down, a better strategy is &lt;strong&gt;to design from the inside out&lt;/strong&gt;. By starting with the &lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/PaaS&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;platform as a service (PaaS)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt; as the central critical layer and creating ways to use various IaaS models and offerings in generic ways, it is possible to create a flexible and efficient lifecycle for the services and applications running on the platform.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;In Healthcare, &lt;strong&gt;PaaS technology&lt;/strong&gt; such as the one offered by &lt;/span&gt;&lt;a href=&quot;http://pivotal.io/platform-as-a-service/pivotal-cloud-foundry&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Pivotal Cloud Foundry&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt; facilitates the rapid creation and migration of existing applications towards better user engagement, increasing collaboration between care givers and improving the lives of patients, while &lt;strong&gt;reducing the total cost of ownership&lt;/strong&gt; (TCO).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;The main characteristics of this platform are:&lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;ul&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Application containerization&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Optimized application scaling&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Application to service brokering&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Abstraction of IaaS&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Excellent application lifecycle management&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Automatic middleware stack and operating system configuration&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;


&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Advanced application monitoring&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-size: small; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJAHi8805Uc2bTOK8nobHrhPPOGzjFT33cwdPReVD_a5dyMymGqkQ-_yWNzzxuToOBfQyoRKyWekHeW3ERooexccKFMNQIPpvGmmS8hKocUPNjAtA-dS2nyd7UdL08Pdcf25eQjYhNSrLo/s1600/ServiceBrokering.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJAHi8805Uc2bTOK8nobHrhPPOGzjFT33cwdPReVD_a5dyMymGqkQ-_yWNzzxuToOBfQyoRKyWekHeW3ERooexccKFMNQIPpvGmmS8hKocUPNjAtA-dS2nyd7UdL08Pdcf25eQjYhNSrLo/s1600/ServiceBrokering.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/div&gt;
&lt;div align=&quot;LEFT&quot;&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;In this architecture, backing services (e.g., databases, caching systems, other data services (e.g., &lt;a href=&quot;http://aws.amazon.com/s3/&quot;&gt;Amazon S3&lt;/a&gt;), messaging/queueing systems, &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol&quot;&gt;SMTP services&lt;/a&gt;,&amp;nbsp;various external APIs (Google Maps, terminology&amp;nbsp;services, healthcare registry services) are just&amp;nbsp;&lt;b&gt;attached resources&lt;/b&gt;. For example, there is a&amp;nbsp;distinction between a local digital imaging and&amp;nbsp;communications in medicine (&lt;a href=&quot;http://en.wikipedia.org/wiki/DICOM&quot;&gt;DICOM&lt;/a&gt;) local image&amp;nbsp;store and a remote, 3rd party DICOM picture&amp;nbsp;archiving and communication system (&lt;a href=&quot;http://en.wikipedia.org/wiki/Picture_Archiving_and_Communication_System&quot;&gt;PACS&lt;/a&gt;)&amp;nbsp;service hosted in the cloud.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;The type of platform is especially suitable managing &lt;/span&gt;&lt;a href=&quot;http://yobriefca.se/blog/2013/04/28/micro-service-architecture/&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;micro services&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;, which allows better &lt;strong&gt;componentization&lt;/strong&gt;, &lt;strong&gt;development and testing processes&lt;/strong&gt;, &lt;strong&gt;decentralized governance&lt;/strong&gt;, &lt;strong&gt;resilience&lt;/strong&gt; and &lt;strong&gt;maintainability&lt;/strong&gt;. These services, especially when they are based on a RESTful architecture, are extremely easy to build, integrate, test, extend, and maintain, and are extremely adapted for mobile applications integration.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-size: small; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHs5KkJrYCI0kRFOicOAfF0bSqDiLfCYQ5fbMbiUp8SvejEdCUvHA5VEYb7DZJaPFfs45ItmPGcc5-exru-BBy5A5B4i9z0gzILe45Mjl59Srx59tVUxGP3JCe3TCF9mpuYbUn2SxtNJwe/s1600/LifeCycleMgt.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHs5KkJrYCI0kRFOicOAfF0bSqDiLfCYQ5fbMbiUp8SvejEdCUvHA5VEYb7DZJaPFfs45ItmPGcc5-exru-BBy5A5B4i9z0gzILe45Mjl59Srx59tVUxGP3JCe3TCF9mpuYbUn2SxtNJwe/s1600/LifeCycleMgt.jpg&quot; height=&quot;640&quot; width=&quot;520&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/div&gt;
&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Good and efficient &lt;b&gt;lifecycle management &lt;/b&gt;is&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;important to produce and maintain high quality&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;software. This is particularly important in healthcare&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;where the patient life is at risk or a breach of privacy&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;could occur as a result of poor quality software.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;The advantage of &lt;strong&gt;abstracting the IaaS layer&lt;/strong&gt; access through a common API is that there no need to have multiple versions of application code for each deployment model. The &lt;strong&gt;same code&lt;/strong&gt; will work and be monitored the same way&lt;strong&gt; for all cloud deployment models&lt;/strong&gt;, including &lt;strong&gt;on premise and hybrid&lt;/strong&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-size: small; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_lzxSjSBy2JoNS5LFOPXt-_OqyU12dPqkT8C_fGnPoPEbqm4dcy8-ArNYZw1oLKjasln9u3ck4wHRD3a2DAgvwGaIHHmaus7hRinzqThUJQZpzaGCNbNlh7Tz3KIaEZpLNxG-aYv-wEaH/s1600/HSDPCloudLayers.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_lzxSjSBy2JoNS5LFOPXt-_OqyU12dPqkT8C_fGnPoPEbqm4dcy8-ArNYZw1oLKjasln9u3ck4wHRD3a2DAgvwGaIHHmaus7hRinzqThUJQZpzaGCNbNlh7Tz3KIaEZpLNxG-aYv-wEaH/s1600/HSDPCloudLayers.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-size: small; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: small;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;On top of the generic open PaaS infrastructure, we are adding &lt;strong&gt;generic&lt;/strong&gt; and &lt;strong&gt;cross-cutting capabilities&lt;/strong&gt; not &lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;part of the original platform including:&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Identity management&lt;/strong&gt; to allow customers, patients and consumers to be accurately and uniquely recognized by using an enterprise master patient index (eMPI) for patients and a lightweight directory access protocol (LDAP) based directory for healthcare providers and consumers.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Security/Identity Access Management&lt;/strong&gt;: authentication, authorization, and single sign-on, all critical to secure provider, patient, and consumer applications and in certain cases, can be addressed by declarative proxification of these services.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Cloud-based, connected device management&lt;/strong&gt;: device registration, discovery, routing, diagnostics, remote control, firmware provisioning, data collection, device-app-user pairing (we are currently supporting 6 million active consumer devices).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Open cloud based clinical &lt;strong&gt;workflow collaboration capabilities&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Secure cloud-based &lt;strong&gt;big data store and analytics capability&lt;/strong&gt; (e.g., to store patient’s observations and genomic data.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGCzVwaRhLHreR5-bObwq6W8eBRxoZTAvyVsNXTl58fV_VxloVRm7LfWrPwFlJtJuepv550M5sXHx6BAi5fvkeWByjddEdb3MU2LbHsP0T8RQIHAj3QkhJx5JOvdIxkXV_-aqNo85L3Xn/s1600/UseCase.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGCzVwaRhLHreR5-bObwq6W8eBRxoZTAvyVsNXTl58fV_VxloVRm7LfWrPwFlJtJuepv550M5sXHx6BAi5fvkeWByjddEdb3MU2LbHsP0T8RQIHAj3QkhJx5JOvdIxkXV_-aqNo85L3Xn/s1600/UseCase.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;We are also creating and exposing &lt;b&gt;healthcare&lt;/b&gt; and &lt;b&gt;wellness&lt;/b&gt; related services that applications can consume:&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;a href=&quot;http://www.ihe.net/Profiles/&quot;&gt;IHE-based demographic, clinical, providers web services&lt;/a&gt; (e.g., &lt;a href=&quot;http://www.ihe.net/Technical_Framework/upload/IHE_ITI_Suppl_PIX_PDQ_HL7v3_Rev2-1_TI_2010-08-10.pdf&quot;&gt;PIX/PDQ&lt;/a&gt;, &lt;a href=&quot;http://wiki.ihe.net/index.php?title=Cross-Enterprise_Document_Sharing&quot;&gt;XDS&lt;/a&gt;, &lt;a href=&quot;http://www.ihe.net/uploadedFiles/Documents/ITI/IHE_ITI_Suppl_HPD.pdf&quot;&gt;HPD&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;A &lt;strong&gt;virtual longitudinal healthcare record (VHR)&lt;/strong&gt; and associated services&lt;br /&gt;&amp;nbsp;- &lt;a href=&quot;http://wiki.ihe.net/index.php?title=Audit_Trail_and_Node_Authentication&quot;&gt;ATNA&lt;/a&gt;-based &lt;strong&gt;auditing services&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;- &lt;strong&gt;Consent and delegation services&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Our &lt;a href=&quot;http://www.usa.philips.com/healthcare-innovation/about-health-suite&quot;&gt;&lt;b&gt;Health&lt;/b&gt;Suite Digital&lt;b&gt; &lt;/b&gt;platform&lt;/a&gt; also offers &lt;b&gt;high availability&lt;/b&gt;, &lt;b&gt;scalability&lt;/b&gt;, &lt;b&gt;privacy&lt;/b&gt; and&lt;b&gt; security compliance with regulations&lt;/b&gt; (e.g., &lt;strong&gt;HIPAA, HITECH&lt;/strong&gt;) and standards (e.g., &lt;strong&gt;NIST SP800-53, ISO 27001&lt;/strong&gt;) using &lt;b&gt;multitenancy&lt;/b&gt;, &lt;b&gt;redundancy&lt;/b&gt;, &lt;b&gt;24/7 monitoring and operations&lt;/b&gt;, and &lt;b&gt;disaster recovery&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b style=&quot;font-size: small;&quot;&gt;
&lt;/b&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: small; font-weight: bold;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #38761d; font-weight: bold;&quot;&gt;More on&lt;/span&gt;&lt;b&gt;: &amp;nbsp;&lt;/b&gt;F. Andry, R. Ridolfo, J. Huffman&lt;b&gt;, &lt;/b&gt;&lt;a href=&quot;http://www.fandry.net/pub/ANDRY_ET_AL_HealthINF15.pdf&quot;&gt;Migrating Healthcare Applications to the Cloud through Containerization and Service Brokering&lt;/a&gt;, 8th International Conference on Health Informatics (&lt;a href=&quot;http://www.healthinf.biostec.org/?y=2015&quot;&gt;HealthINF 2015&lt;/a&gt;), pp.
164-171, Lisbon, Portugal, January 2015.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0in 0in 0pt; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;&quot;&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: small;&quot;&gt;

&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div align=&quot;LEFT&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-size: small;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/1140002680151111577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/1140002680151111577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1140002680151111577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1140002680151111577'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2015/04/migrating-healthcare-applications-to.html' title='Migrating Healthcare Applications to the Cloud through Containerization and Service Brokering'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJAHi8805Uc2bTOK8nobHrhPPOGzjFT33cwdPReVD_a5dyMymGqkQ-_yWNzzxuToOBfQyoRKyWekHeW3ERooexccKFMNQIPpvGmmS8hKocUPNjAtA-dS2nyd7UdL08Pdcf25eQjYhNSrLo/s72-c/ServiceBrokering.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-1718285469993179377</id><published>2013-06-06T16:58:00.000-07:00</published><updated>2013-06-14T10:04:27.575-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="best practice"/><category scheme="http://www.blogger.com/atom/ns#" term="class"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="design patterns"/><category scheme="http://www.blogger.com/atom/ns#" term="interface"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="method"/><category scheme="http://www.blogger.com/atom/ns#" term="refactoring"/><title type='text'>Java Code Refactoring</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAmJyW7YsK3sSVZgysSSxtS4agRhcUNNgMcWQhwyKz77a55VLLKPSNB1Cb5vjCK8zNkfxgMQ87hIFGdKD7dmfye1nSQpuqgS5dB7eqvTz7Qnld0G9XXL8OuHfsF0I8HvXLekoRp7IyT7LN/s1600/bricks_wall.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAmJyW7YsK3sSVZgysSSxtS4agRhcUNNgMcWQhwyKz77a55VLLKPSNB1Cb5vjCK8zNkfxgMQ87hIFGdKD7dmfye1nSQpuqgS5dB7eqvTz7Qnld0G9XXL8OuHfsF0I8HvXLekoRp7IyT7LN/s1600/bricks_wall.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I recently browsed again the &lt;b&gt;excellent book&lt;/b&gt; &lt;a href=&quot;http://cc2e.com/&quot;&gt;&lt;i&gt;Code Complete&lt;/i&gt; from Steve McConnell&lt;/a&gt; while in the middle of several &lt;b&gt;Java code reviews&lt;/b&gt;. Although the book is nor specifically dedicated to Java code, I still found it quite useful and inspiring.&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;chapter &lt;/b&gt;on &lt;b&gt;refactoring &lt;/b&gt;in particular offers a very practical perspective that all programmer should have in mind when it comes to infuse a dose of evolution in the life cycle of their software.&lt;br /&gt;
&lt;br /&gt;
What I found particularly valuable are the &lt;b&gt;checklists &lt;/b&gt;that the author has put together:&lt;b&gt; reasons to refactor&lt;/b&gt;, &lt;b&gt;specific re-factorings&lt;/b&gt; (data level, statement level, routine-level, class-implementation, class-interface, system-level), &lt;b&gt;refactoring safely&lt;/b&gt;, &lt;b&gt;strategies&lt;/b&gt;, &lt;b&gt;summary&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
In this post, I would like to illustrate some of these &lt;b&gt;refactoring techniques&lt;/b&gt; with &lt;b&gt;java code snippets&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Since I do not have time to comment every item in these checklists, I decided to pick-up those that are not trivial or obvious and might bring the best return on your refactoring investment. These &lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;items&lt;/span&gt;&lt;/b&gt; are&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;b&gt;high-lighted in green&lt;/b&gt;&lt;/span&gt; and developed in sections at the end of this article.&lt;br /&gt;
&lt;br /&gt;
If you think that &lt;b&gt;missing items&lt;/b&gt; are worth explaining, &lt;b&gt;please add a comment to this post&lt;/b&gt; and I will be glad to add a specific paragraph for those as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;http://cc2e.com/Page.aspx?hid=262&quot;&gt;Checklist: Reasons to Refactor&lt;/a&gt;&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Code is duplicate&lt;/li&gt;
&lt;li&gt;A routine is too long&lt;/li&gt;
&lt;li&gt;A loop is too long or too deeply nested&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A class/interface/method has poor cohesion &lt;/span&gt;&lt;/b&gt;⇐&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A class interface does not provide a consistent level of abstraction&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A parameter list has too many parameters&lt;/span&gt;&lt;/b&gt;  ⇐&lt;/li&gt;
&lt;li&gt;Changes within a class tend to be compartmentalized&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Changes require parallel modifications to multiple classes&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;Inheritance hierarchies have to be modified in parallel&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Related data items that are used together are not organized into classes&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;A routine uses more features of another class than of its own class&lt;/li&gt;
&lt;li&gt;A primitive data type is overloaded&lt;/li&gt;
&lt;li&gt;A class doesn&#39;t do very much&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A chain of routines passes tramp data&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;A middle man object isn&#39;t doing anything&lt;/li&gt;
&lt;li&gt;One class is overly intimate with another&lt;/li&gt;
&lt;li&gt;A routine has a poor name&lt;/li&gt;
&lt;li&gt;Data members are public&lt;/li&gt;
&lt;li&gt;A subclass uses only a small percentage of its parents&#39; routines&lt;/li&gt;
&lt;li&gt;Comments are used to explain difficult code&lt;/li&gt;
&lt;li&gt;Global variables are used&lt;/li&gt;
&lt;li&gt;A routine uses setup code before a routine call or takedown code after a routine call&lt;/li&gt;
&lt;li&gt;A program contains code that seems like it might be needed someday &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&amp;nbsp;&lt;a href=&quot;http://cc2e.com/Page.aspx?hid=261&quot;&gt;Checklist: Summary of Refactorings&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Data Level Refactoring&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Replace a magic number with a named constant&lt;/b&gt;&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Rename a variable with a clearer or more informative name&lt;/li&gt;
&lt;li&gt;Move an expression inline&lt;/li&gt;
&lt;li&gt;Replace an expression with a routine&lt;/li&gt;
&lt;li&gt;Introduce an intermediate variable&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Convert a multi-use variable to a multiple single-use variables&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;Use a local variable for local purposes rather than a parameter&lt;/li&gt;
&lt;li&gt;Convert a data primitive to a class&lt;/li&gt;
&lt;li&gt;Convert a set of type codes to a class&lt;/li&gt;
&lt;li&gt;Convert a set of type codes to a class with subclasses&lt;/li&gt;
&lt;li&gt;Change an array to an object&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Encapsulate a collection&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;Replace a traditional record with a data class&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Statement Level Refactorings&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Decompose a boolean expression&lt;/li&gt;
&lt;li&gt;Move a complex boolean expression into a well-named boolean function&lt;/li&gt;
&lt;li&gt;Consolidate fragments that are duplicated within different parts of a conditional&lt;/li&gt;
&lt;li&gt;Use break or return instead of a loop control variable&lt;/li&gt;
&lt;li&gt;Return as soon as you know the answer instead of assigning a return value within nested if-then-else statements&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Replace conditionals with polymorphism (especially repeated case statement&lt;/b&gt;s)&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Create and use null objects instead of testing for null values&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Routine Level Refactorings&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Extract a routine&lt;/li&gt;
&lt;li&gt;Move a routine&#39;s code inline&lt;/li&gt;
&lt;li&gt;Convert a long routine to a class&lt;/li&gt;
&lt;li&gt;Substitute a simple algorithm for a complex algorithm&lt;/li&gt;
&lt;li&gt;Add a parameter&lt;/li&gt;
&lt;li&gt;Remove a parameter&lt;/li&gt;
&lt;li&gt;Separate query operations from modification operations&lt;/li&gt;
&lt;li&gt;Combine similar routines by parameterizing them&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Separate routines whose behavior depends on parameters passed in&lt;/b&gt;&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Pass a whole object rather than specific fields&lt;/li&gt;
&lt;li&gt;Pass specific fields rather than a whole object&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Encapsulate downcasting&lt;/span&gt;&lt;/b&gt; ⇐&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Class Implementation Refactorings&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Change value objects to reference objects&lt;/li&gt;
&lt;li&gt;Change reference objects to value objects&lt;/li&gt;
&lt;li&gt;Replace virtual routines with data initialization &lt;/li&gt;
&lt;li&gt;Change member routine or data placement&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Extract specialized code into a subclass&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;Combine similar code into a superclass&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Class Interface Refactorings&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Move a routine to another class&lt;/li&gt;
&lt;li&gt;Convert one class to two&lt;/li&gt;
&lt;li&gt;Eliminate a class&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Hide a delegate&lt;/span&gt;&lt;/b&gt; ⇐&lt;/li&gt;
&lt;li&gt;Replace inheritance with delegation&lt;/li&gt;
&lt;li&gt;Replace delegation with inheritance&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Remove a middle man&lt;/b&gt;&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Introduce a foreign routine&lt;/li&gt;
&lt;li&gt;Introduce a class extension&lt;/li&gt;
&lt;li&gt;Encapsulate an exposed member variable&lt;/li&gt;
&lt;li&gt;Remove Set() routines for fields that cannot be changed&lt;/li&gt;
&lt;li&gt;Hide routines that are not intended to be used outside the class&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Encapsulate unused routines&lt;/b&gt;&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Collapse a superclass and subclass if their implementations are very similar&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;System Level Refactorings&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Duplicate data you can&#39;t control&lt;/b&gt;&lt;/span&gt; ⇐&lt;/li&gt;
&lt;li&gt;Change unidirectional class association to bidirectional class association&lt;/li&gt;
&lt;li&gt;Change bidirectional class association to unidirectional class association&lt;/li&gt;
&lt;li&gt;Provide a factory routine rather than a simple constructor&lt;/li&gt;
&lt;li&gt;Replace error codes with exceptions or vice versa&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;u&gt;&lt;b&gt;Selected items refactoring samples in java&lt;/b&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A class/interface/method has poor cohesion&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;b&gt;class&lt;/b&gt;, &lt;b&gt;interface &lt;/b&gt;or &lt;b&gt;method &lt;/b&gt;should be only &lt;b&gt;responsible &lt;/b&gt;for a &lt;b&gt;precise and meaningful set of functionality&lt;/b&gt; and &lt;b&gt;behavior&lt;/b&gt;. For example,the interface &lt;span style=&quot;color: #741b47;&quot;&gt;KitchenAppliance &lt;/span&gt;below lacks cohesion. A generic kitchen appliance should not allow to wash both clothes and dishes. &lt;/li&gt;
&amp;nbsp;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;public interface KitchenAppliance {
 public float waterConsumption = 0;
 public float energyConsumption = 0;
 void washClothes();
 void washDishes();
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
⇒
&lt;/h2&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public interface WashingKitchenAppliance {
 public float waterConsumption = 0;
 public float energyConsumption = 0;
 void wash();
}&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A class interface does not provide a consistent level of abstraction&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;In Java, a &lt;b&gt;consistent level of abstraction&lt;/b&gt; is usually obtained when the objects that represent abstract actors perform work, report on, change their state and communicate with other java objects in a a &lt;b&gt;compatible &lt;/b&gt;and &lt;b&gt;comparable &lt;/b&gt;way.&lt;br /&gt;The use of &lt;b&gt;inheritance&lt;/b&gt;, &lt;b&gt;encapsulation &lt;/b&gt;and &lt;b&gt;polymorphism &lt;/b&gt;is usually the key to a consistent &lt;a href=&quot;http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29&quot;&gt;level of abstraction&lt;/a&gt; and is at the core of good &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_design_pattern&quot;&gt;design patterns&lt;/a&gt;. In the example below, an intermediary level of abstraction, e.g. DairyAnimal (cows, goats) and MeatAnimal (pigs, steers), could be created to avoid&amp;nbsp; specifying the type of food for each animal and focus on more specific features for the sub-classes.&lt;/li&gt;
&amp;nbsp;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;public class Animal extends LivingThing
{
 private Location loc;
 private double energyReserves;

 public boolean isHungry() {
  return energyReserves &amp;lt; 2.5;
 }
 public void eat(Food food) {
  energyReserves += food.getCalories();
 }
 public void moveTo(Location location) {
  this.loc = location;
 }
}

thePig = new Animal();
theCow = new Animal();
if (thePig.isHungry()) {
    thePig.eat(tableScraps);
}
if (theCow.isHungry()) {
    theCow.eat(grass);
}
theCow.moveTo(theBarn);&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;h2&gt;
⇒&lt;/h2&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public class DairyAnimal extends Animal {
 private Double milkProduction;

 public Double getMilkProduction() {
  return milkProduction;
 }
        ...
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A parameter list has too many parameters&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Methods with too many parameters is an indication that the code has either been badly designed initially (lack of abstraction) or has evolved over the months or years without proper refactoring. One elegant solution for creational methods/constructor requiring a large number of parameters is to use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Builder_pattern&quot;&gt;builder pattern&lt;/a&gt; well define in &lt;a href=&quot;http://www.amazon.com/Effective-Java-Edition-Series-ebook/dp/B000WJOUPA/ref=dp_kinw_strp_1&quot;&gt;Joshua Bloch&lt;i&gt;&#39;s Effective Java&lt;/i&gt;&lt;/a&gt; and offers a way to use optional parameters:&lt;/li&gt;
&amp;nbsp;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;public NutritionFacts(int servingSize, int servings, int sodium, int iron, int fat, int carbs) {
     this.servingSize = servingSize;
     this.sodium = sodium;
     this.servingSize = servingSize;
     this.iron = iron;
     this.fat = fat;
     this.carbs = carbs;
}

NutritionFacts soda = new NutritionFacts(240, 8, 35, 13, 0, 27);&lt;/span&gt;
&lt;/pre&gt;
&lt;h2&gt;
⇒&lt;/h2&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public class NutritionFacts {
 private int servingSize = 0;
 private int servings  = 0;
 private int sodium  = 0;
 private int iron  = 0;
 private int fat  = 0;
 private int carbs  = 0;

 public static class Builder {
  private int servingSize;
  private int servings;
  private int sodium;
  private int iron;
  private int fat;
  private int carbs;

  public Builder(int servingSize, int servings) {
   this.servingSize = servingSize;
   this.servings = servings;
  }
  
  public Builder sodium(int val) {
   this.sodium = val;
   return this;
  }
  
  public Builder iron(int val) {
   this.iron = val;
   return this;
  }

  public Builder fat(int val) {
   this.fat = val;
   return this;
  }

  public Builder carbs(int val) {
   this.carbs = val;
   return this;
  }
  
  public NutritionFacts build() {
   return new NutritionFacts(this);
  }
 }
 
 private NutritionFacts(Builder builder) {
  servingSize = builder.servingSize;
  servings = builder.servings;
  sodium = builder.sodium;
  iron = builder.iron;
  fat = builder.fat;
  carbs = builder.carbs;
 }
}

NutritionFacts soda = new NutritionFacts(240, 8).build();
or
NutritionFacts soda = new NutritionFacts(240, 8).sodium(35).iron(13).fat(0).carbs(27).build();
or
NutritionFacts soda = new NutritionFacts(240, 8).sodium(35).iron(13).carbs(27).build();&lt;/span&gt;

&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Changes require parallel modifications to multiple classes&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;If you&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;regularly have to modify the &lt;b&gt;same set of classes&lt;/b&gt; then try to refactor these classes with the correct level of &lt;b&gt;abstraction &lt;/b&gt;and &lt;b&gt;factorization &lt;/b&gt;so changes only affect one class.&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Related data items that are used together are not organized into classes&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Recurrent set of operations can be combined in its own class: &lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;theCow = new DairyAnimal();
theCow.brush();
theCow.feed();
theCow.milk();
theCow.feed();&lt;/span&gt;
&lt;/pre&gt;
&lt;h2&gt;
⇒&lt;/h2&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public class DairyAnimalOperation {
 public void tend(DairyAnimal dairyAnimal) {
  dairyAnimal.brush();
  dairyAnimal.feed();
  dairyAnimal.milk();
  dairyAnimal.feed();
};&lt;/span&gt;
&lt;/pre&gt;
Even better, refactoring can include the use of a flexible strategy pattern, if the recurrent process needs to be dynamically.
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;A chain of routines passes tramp data&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Tramp data&quot; refers to passing data to one method so it can be passed to another one (&lt;a href=&quot;http://books.google.com/books/about/The_practical_guide_to_structured_system.html?id=WOYmAAAAMAAJ&quot;&gt;Page-Jones 1988&lt;/a&gt;). This can be solved by introducing a better level of abstraction in the interfaces in question&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Replace a magic number with a named constant&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;The word &lt;b&gt;&lt;i&gt;magic &lt;/i&gt;&lt;/b&gt;refers to the use of numeric or string literal. Use &lt;b&gt;constants &lt;/b&gt;or &lt;a href=&quot;http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html&quot;&gt;Enums&lt;/a&gt; instead.&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;public double areaOfCircle (double radius)  {  
    return Math.pow(radius * 3.14159, 2);  
}  &lt;/span&gt;
&lt;/pre&gt;
&lt;h2&gt;
⇒&lt;/h2&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;private static final double PI = 3.14159;

public double areaOfCircle (double radius)  {  
    return Math.pow(radius * PI, 2);  
} &lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Convert a multi-use variable to a multiple single-use variables&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Common offenders are variable names like&lt;span style=&quot;color: #741b47;&quot;&gt; i,j, temp&lt;/span&gt;. These need to be replaced by specific names (e.g. &lt;span style=&quot;color: #38761d;&quot;&gt;row&lt;/span&gt;, &lt;span style=&quot;color: #38761d;&quot;&gt;column&lt;/span&gt;).&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;for (int i=0;i&amp;amp;tl;N;i++) {
    for (int j=0;j&amp;amp;tl;M;j++) {
       matrix[i][j] = 0; 
    }
}&lt;/span&gt;
&lt;/pre&gt;
&lt;h2&gt;
⇒&lt;/h2&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;for (int row=0;row&amp;amp;tl;numRows;row++) {
    for (int colum=0;colum&amp;amp;tl;numColumns;colum++) {
        matrix[row][colum] = 0; 
    }
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Encapsulate a collection&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Instead of returning the &lt;a href=&quot;http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html&quot;&gt;collection&lt;/a&gt; itself, encapsulate a read-only collection instance with specific methods to add or remove elements in the original collection. You can leverage&lt;a href=&quot;http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#unmodifiableCollection%28java.util.Collection%29&quot;&gt; unmodifiable view methods&lt;/a&gt; that are part of the collection class for this:&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public static &amp;lt;T&amp;gt; Collection&amp;lt;T&amp;gt; unmodifiableCollection(Collection&amp;lt;? extends T&amp;gt; c)
public static &amp;lt;T&amp;gt; Set&amp;lt;T&amp;gt; unmodifiableSet(Set&amp;lt;? extends T&amp;gt; s)
public static &amp;lt;T&amp;gt; SortedSet&amp;lt;T&amp;gt; unmodifiableSortedSet(SortedSet&amp;lt;T&amp;gt; s)
public static &amp;lt;T&amp;gt; List&amp;lt;T&amp;gt; unmodifiableList(List&amp;lt;? extends T&amp;gt; list)
public static &amp;lt;K,V&amp;gt; Map&amp;lt;K,V&amp;gt; unmodifiableMap(Map&amp;lt;? extends K,? extends V&amp;gt; m)
public static &amp;lt;K,V&amp;gt; SortedMap&amp;lt;K,V&amp;gt; unmodifiableSortedMap(SortedMap&amp;lt;K,? extends V&amp;gt; m)&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Replace conditionals with polymorphism&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;With &lt;a href=&quot;http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html&quot;&gt;polymorphism&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;subclasses of a class possesses their own specific behaviors and share also some of the functionality of their parent class. Refactor conditionals, especially&lt;a href=&quot;http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html&quot;&gt; complex case statements&lt;/a&gt; with polymorphism design:&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;Bike myBike = new Bike();
String bikeType = &quot;default&quot;;
witch(myBike.getTireWidth()) {
 case 23 : 
  if (myBike.getSuspension().compareToIgnoreCase(&quot;Simple&quot;) == 0) {
   bikeType = &quot;Road bike&quot;;
  }
 break;
 default : 
  if (myBike.getSuspension().compareToIgnoreCase(&quot;Dual&quot;) == 0) {
   bikeType = &quot;Mountain bike&quot;;
  }
 break;
}&lt;/span&gt;&lt;/pre&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ⇒&lt;/h2&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public class MountainBike extends Bicycle {
    private String suspension;

    public MountainBike(
               int startCadence,
               int startSpeed,
               int startGear,
               String suspensionType){
        super(startCadence,
              startSpeed,
              startGear);
        this.setSuspension(suspensionType);
    }

    public String getSuspension(){
      return this.suspension;
    }

    public void setSuspension(String suspensionType) {
        this.suspension = suspensionType;
    }
} 

public class RoadBike extends Bicycle{
    private int tireWidth;

    public RoadBike(int startCadence,
                    int startSpeed,
                    int startGear,
                    int newTireWidth){
        super(startCadence,
              startSpeed,
              startGear);
        this.setTireWidth(newTireWidth);
    }

    public int getTireWidth(){
      return this.tireWidth;
    }

    public void setTireWidth(int newTireWidth){
        this.tireWidth = newTireWidth;
    }
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Separate routines whose behavior depends on parameters passed in&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: black;&quot;&gt;If you have a method which executes different statements based on a particular parameter value, figure out if you can break the method into separate ones without passing the parameter in question.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Encapsulate downcasting&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Objects returned by a method should use the most specific type possible.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public class A {
 public String doSomething() {
  return &quot;Do something.&quot;;
 }
}

public class B extends A {
 public String doSomethingMoreSpecific() {
  return &quot;Do something more specific.&quot;;
 }
}
&lt;/span&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;public class DownCast {

 private List&amp;lt;A&amp;gt; list;
 
 &lt;span style=&quot;color: #741b47;&quot;&gt;public List&amp;lt;A&amp;gt; getList() {
  return list;
 }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
&lt;b&gt; public List&amp;lt;B&amp;gt; getMostSpecificList() {
  return (List&amp;lt;B&amp;gt;) (List&amp;lt;?&amp;gt;) list;
 }&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;
 public void setList(List&amp;lt;A&amp;gt; list) {
  this.list = list;
 }

 public DownCast() {
  list = new ArrayList&amp;lt;A&amp;gt;();
  for (int i=0;i&amp;lt;10;i++) {
   list.add(new B());
  }
 }

}&lt;/span&gt;

&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public static void main(String[] args) {
  
 DownCast obj = new DownCast();
 List&amp;lt;A&amp;gt; listOfA = obj.getList();&lt;/span&gt;
 &lt;span style=&quot;color: #741b47;&quot;&gt;System.out.println(listOfA.get(0).doSomething());&lt;/span&gt;
   
&lt;b&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;List&amp;lt;B&amp;gt; listOfB = obj.getMostSpecificList();
 System.out.println(listOfB.get(0).doSomethingMoreSpecific());&lt;/span&gt;&lt;/b&gt;
    
&lt;span style=&quot;color: #38761d;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Extract specialized code into a subclass&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Refactor specialized code into specific own subclasses if the code in question is only used in a subset of initial classes.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;Hide a delegate&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;If Class A calls B then C while A was supposed to only call B and B calls C, then dissociates C from A and have B calls C only.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Remove a middle man&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;On the other hand, if you think that A should call C directly as long as the role of B is still clearly defines, does not have overlap with C and can be used independently of C.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Encapsulate unused methods&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Create new interfaces for the most common used set of methods&lt;/li&gt;
&lt;pre&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;public class Bird {
 
 private String species;
 private String eggColor;
 private String food;
 private int flySpeed;
 private int flyHeight;
 private String dragType;
 private String wingType;
 
 public String getSpecies() {
  return species;
 }
 public void setSpecies(String species) {
  this.species = species;
 }
 public String getEggColor() {
  return eggColor;
 }
 public void setEggColor(String eggColor) {
  this.eggColor = eggColor;
 }
 public String getFood() {
  return food;
 }
 public void setFood(String food) {
  this.food = food;
 }
 public int getFlySpeed() {
  return flySpeed;
 }
 public void setFlySpeed(int flySpeed) {
  this.flySpeed = flySpeed;
 }
        ...
}&lt;/span&gt;&lt;/pre&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ⇒&lt;/h2&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public interface BirdFlight {
 public int getFlySpeed();
 public void setFlySpeed(int flySpeed);
 public int getFlyHeight();
 public void setFlyHeight(int flyHeight);
 public String getDragType();
 public void setDragType(String dragType);
 public String getWingType() ;
 public void setWingType(String wingType);
}

public class Bird implements BirdFlight {
 
 private String species;
 private String eggColor;
 private String food;
 
 public String getSpecies() {
  return species;
 }
 public void setSpecies(String species) {
  this.species = species;
 }
 public String getEggColor() {
  return eggColor;
 }
 public void setEggColor(String eggColor) {
  this.eggColor = eggColor;
 }
 public String getFood() {
  return food;
 }
 public void setFood(String food) {
  this.food = food;
 }
 
 @Override
 public int getFlySpeed() {
  ...
 }
 @Override
 public void setFlySpeed(int flySpeed) {
  ...
 }
 @Override
 public int getFlyHeight() {
  ...
 }
 @Override
 public void setFlyHeight(int flyHeight) {
  ...
 }
 ...
  
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;Duplicate data you can&#39;t control&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;As long as layering principles are not violated, wrap or access data maintain by the system via a consistent way/interface/API. A typical examples is data shares in GUI control in the front-end layer. Try to find a way to copy/mirror the data in question and treat it as reference source of data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/1718285469993179377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/1718285469993179377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1718285469993179377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1718285469993179377'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2013/06/java-code-refactoring.html' title='Java Code Refactoring'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAmJyW7YsK3sSVZgysSSxtS4agRhcUNNgMcWQhwyKz77a55VLLKPSNB1Cb5vjCK8zNkfxgMQ87hIFGdKD7dmfye1nSQpuqgS5dB7eqvTz7Qnld0G9XXL8OuHfsF0I8HvXLekoRp7IyT7LN/s72-c/bricks_wall.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-4434762544679231177</id><published>2013-05-17T15:04:00.000-07:00</published><updated>2014-01-17T08:29:08.765-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asynchronous"/><category scheme="http://www.blogger.com/atom/ns#" term="constraint"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise Architect"/><category scheme="http://www.blogger.com/atom/ns#" term="interaction"/><category scheme="http://www.blogger.com/atom/ns#" term="lifeline"/><category scheme="http://www.blogger.com/atom/ns#" term="message"/><category scheme="http://www.blogger.com/atom/ns#" term="object"/><category scheme="http://www.blogger.com/atom/ns#" term="operand"/><category scheme="http://www.blogger.com/atom/ns#" term="operation"/><category scheme="http://www.blogger.com/atom/ns#" term="sequence diagram"/><category scheme="http://www.blogger.com/atom/ns#" term="signal"/><category scheme="http://www.blogger.com/atom/ns#" term="synchronous"/><category scheme="http://www.blogger.com/atom/ns#" term="UML"/><title type='text'>Advanced UML Sequence Diagrams</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A &lt;a href=&quot;http://www.ibm.com/developerworks/rational/library/3101.html&quot;&gt;Sequence Diagram&lt;/a&gt; is a type of &lt;a href=&quot;http://en.wikipedia.org/wiki/Unified_Modeling_Language&quot;&gt;UML&lt;/a&gt; Interaction Diagram that is used to model objects that need to pass &lt;a href=&quot;http://pic.dhe.ibm.com/infocenter/rsawshlp/v7r5m0/index.jsp?topic=%2Fcom.ibm.xtools.sequence.doc%2Ftopics%2Fclifel_v.html&quot;&gt;messages &lt;/a&gt;to accomplish a task.&lt;br /&gt;
&lt;br /&gt;
The messages are usually defined in the order of the execution.&lt;br /&gt;
&lt;br /&gt;
Objects interactions can include:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;creation and termination&lt;/li&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;invoke object operations&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;/ul&gt;
In
 the very simple &lt;b&gt;sequence diagram&lt;/b&gt; below, a user sends a query to a health IT 
application that retrieve a clinical document to an XDS Repository. The 
clinical data is returned back to the user (an actor in this type of 
diagram).&lt;br /&gt;
&lt;br /&gt;
Object colors can indicates a different scope between objects
 (e.g gray here indicate a component that is part of a different sub-system, or out-of-scope for the current document or release 
etc). &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFg3LrI4npsIgk06APnHaFFQzn_cqTmHz0j1HopwKDI6gIMfrrP7ltAynln4nlx-GtqhDwPQqgMY7zHx5Q_dji0KG43y3ifGKwGpMyg44exFbOxzkN0L4Dk4iVGmAZwprc6YoGpdl-C46E/s1600/SeqDiag1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFg3LrI4npsIgk06APnHaFFQzn_cqTmHz0j1HopwKDI6gIMfrrP7ltAynln4nlx-GtqhDwPQqgMY7zHx5Q_dji0KG43y3ifGKwGpMyg44exFbOxzkN0L4Dk4iVGmAZwprc6YoGpdl-C46E/s1600/SeqDiag1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFg3LrI4npsIgk06APnHaFFQzn_cqTmHz0j1HopwKDI6gIMfrrP7ltAynln4nlx-GtqhDwPQqgMY7zHx5Q_dji0KG43y3ifGKwGpMyg44exFbOxzkN0L4Dk4iVGmAZwprc6YoGpdl-C46E/s1600/SeqDiag1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://pic.dhe.ibm.com/infocenter/rsawshlp/v7r5m0/index.jsp?topic=%2Fcom.ibm.xtools.sequence.doc%2Ftopics%2Fclifel_v.html&quot;&gt;Lifelines&lt;/a&gt; are vertical dashed lines with the object positioned at the top. &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://pic.dhe.ibm.com/infocenter/rsawshlp/v7r5m0/index.jsp?topic=%2Fcom.ibm.xtools.sequence.doc%2Ftopics%2Fclifel_v.html&quot;&gt;Messages&lt;/a&gt; are horizontal lines with arrows pointing in the direction in which the
message is sent with annotation (method, parameters, arguments, return value, type of control flow etc ...)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCdbo8v9n7c_XTDht3N1HM8uRhHTc736hbmh_EdBwlGKqA4ESkBHUHTk-naHTDJTEe4f-9qiRG93A8cExXmD6Q3JtokYELPEk4mIMeb3E1HhRbW8W_1EmaMlM2LrvnJlTZgCVOWIIqgTFP/s1600/Message.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCdbo8v9n7c_XTDht3N1HM8uRhHTc736hbmh_EdBwlGKqA4ESkBHUHTk-naHTDJTEe4f-9qiRG93A8cExXmD6Q3JtokYELPEk4mIMeb3E1HhRbW8W_1EmaMlM2LrvnJlTZgCVOWIIqgTFP/s1600/Message.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UML 2.0 has &lt;b&gt;two forms of messages&lt;/b&gt;:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;operation call&lt;/b&gt; : the invocation of an operation of a receiving object  (either synchronous or asynchronous)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;signal &lt;/b&gt;: a message object sen out by one object and handle by another one (always asynchronous)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5qqxv_hL-kmki0VIJ0hLzpIC2chwZact-kPtauZaGpF0UWBK0wb-O7Kb4YPFRi9oz1tWJX29Y8RQvZPPcfSJmJ5fTV5sFN16KIrWpZWstFNm3TUUGqbf4bETof2Ld0ESbuHI9LDdte-Gu/s1600/Call.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5qqxv_hL-kmki0VIJ0hLzpIC2chwZact-kPtauZaGpF0UWBK0wb-O7Kb4YPFRi9oz1tWJX29Y8RQvZPPcfSJmJ5fTV5sFN16KIrWpZWstFNm3TUUGqbf4bETof2Ld0ESbuHI9LDdte-Gu/s1600/Call.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn8SBzTNtqNTjzvQqmIUYuM4ebxb9vLVUKO9s_UlS3qKdx1a2_Z7CXVeSvf5CXhBUxJ8XUZnw530vSj9KJnlE3UshGkPuDWxYvkMIs1oNPzPd7ytx_-6gc2OAxYDbc7bUsyH1bosWJIiAy/s1600/Signal.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn8SBzTNtqNTjzvQqmIUYuM4ebxb9vLVUKO9s_UlS3qKdx1a2_Z7CXVeSvf5CXhBUxJ8XUZnw530vSj9KJnlE3UshGkPuDWxYvkMIs1oNPzPd7ytx_-6gc2OAxYDbc7bUsyH1bosWJIiAy/s1600/Signal.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Synchronous messages usually have solid arrows (by the way, in the tool I use, return synchronous messages for not have a solid arrow). Asynchronous message use dashed arrows.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7csJ-7kIPDOBQ7YQ_FQ3kcr_Js9nsBgWxJfBXczRvB0t_qlTLNicMeWitzmL_C48jZ46R0Ez0cuL7eiwB03YLxjkpZ1vJFOOCkHedFr_xjoLwzolpSTumVN10oWSh3CaGbZCv9Zus-sc7/s1600/Message_types.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7csJ-7kIPDOBQ7YQ_FQ3kcr_Js9nsBgWxJfBXczRvB0t_qlTLNicMeWitzmL_C48jZ46R0Ez0cuL7eiwB03YLxjkpZ1vJFOOCkHedFr_xjoLwzolpSTumVN10oWSh3CaGbZCv9Zus-sc7/s1600/Message_types.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An &lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/rtnlhelp/v6r0m0/index.jsp?topic=%2Fcom.ibm.xtools.viz.java.doc%2Ftopics%2Fcintoperand_v.html&quot;&gt;interaction operand&lt;/a&gt; is a container that groups the interaction
fragments and uses an optional &lt;b&gt;guard expression&lt;/b&gt; or &lt;b&gt;interaction constraint. &lt;/b&gt;When the guard condition is not present, the interaction is always executed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Interaction operators&lt;/b&gt; include:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Alternative (alt)&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Option (opt) :&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Break (break) : &lt;/li&gt;
&lt;li&gt;Parallel (par)&lt;/li&gt;
&lt;li&gt;Loop (loop)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Critical (critical) or (region)&lt;/li&gt;
&lt;li&gt;Negative (neg)&lt;/li&gt;
&lt;li&gt;Assertion (assert) &lt;/li&gt;
&lt;li&gt;Strict Sequence (strict)&lt;/li&gt;
&lt;li&gt;Weak Sequence (seq)&lt;/li&gt;
&lt;li&gt;Ignore (ignore)&lt;/li&gt;
&lt;li&gt;Consider (consider)&lt;/li&gt;
&lt;/ul&gt;
Lets consider a simple &lt;b&gt;alternative &lt;/b&gt;(alt) &lt;b&gt;operand&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Imagine that in the initial sequence diagram, that we want to request a document, we request a clinical document from an external source (CCD producer system).&lt;br /&gt;
&lt;br /&gt;
In this case, the first thing is to add a&lt;b&gt; combined fragment &lt;/b&gt;on top of the existing diagram, and choose the &lt;b&gt;alt&lt;/b&gt; type:&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGeKE2auO5gaEgpyOHqbMhcqCaV_8lfLv9XErA2VxQ5JcMVu0RTTDvTTL9HGPusKm8-DorzQlOYhbTPcq1N_UpfNp_7beFEKfijE_54feRDqyl9vkZUKRpuuzNZqg5ElS-IaUuawbfu8R0/s1600/CombineFragments.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGeKE2auO5gaEgpyOHqbMhcqCaV_8lfLv9XErA2VxQ5JcMVu0RTTDvTTL9HGPusKm8-DorzQlOYhbTPcq1N_UpfNp_7beFEKfijE_54feRDqyl9vkZUKRpuuzNZqg5ElS-IaUuawbfu8R0/s1600/CombineFragments.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEmS4PznFBR8k3kx-oboZ3ikC0w8MQruRGlCI4LofwHJXYNCvR4P6L2W0O6-_EbterKopJ4VGE7bV9THLza1TwmYnbhhNPfgNdN-awtj3y-BiPif84DC0tbcCuknq2zbcUZcO9wQQKtxgF/s1600/Alt1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEmS4PznFBR8k3kx-oboZ3ikC0w8MQruRGlCI4LofwHJXYNCvR4P6L2W0O6-_EbterKopJ4VGE7bV9THLza1TwmYnbhhNPfgNdN-awtj3y-BiPif84DC0tbcCuknq2zbcUZcO9wQQKtxgF/s1600/Alt1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpRoDa8-lzyreszPHKvTnGtAowGeemF33xGZHJ0lH7PuQFLfKnUP_6p7e5HQ9xYCqW7TDC28cK4bdmv9gHKP1Mpnep8Ynd9IuVg7whTsz5Snq_PQwYY1IbOtujC8W1cDEsETYZQU4t-fSg/s1600/Alt3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Then conditions are added (if and else equivalent):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUnk_nRVE1NVToUmreCe3U93_x6vu9ziFRVgGnH2sdr2Vlzu7dmQgSj1uLjnXugVM4SfyIl5EnfGtqnn5QGKOtji6j3dOB5cOmrIYau9IYN0WpijcymR8brmnYmIiaMqdPFGOJrHDrtmLt/s1600/Alt2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUnk_nRVE1NVToUmreCe3U93_x6vu9ziFRVgGnH2sdr2Vlzu7dmQgSj1uLjnXugVM4SfyIl5EnfGtqnn5QGKOtji6j3dOB5cOmrIYau9IYN0WpijcymR8brmnYmIiaMqdPFGOJrHDrtmLt/s1600/Alt2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can add the new alternative message (to the external &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuity_of_Care_Document&quot;&gt;CCD&lt;/a&gt; producer system) and re-organize the layout of the diagram : placing the combined fragment below the incoming message and moving the else clause separation (dotted line) below the first alternative (accessing the &lt;a href=&quot;http://wiki.ihe.net/index.php?title=Cross-Enterprise_Document_Sharing&quot;&gt;XDS&lt;/a&gt; repository). In my tool, you can use ALT-Left-Mouse click for this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwBv9n4pUfHqSYED4hSPwp1h33AaVlnAaCZxHaB3Hl8U3vES3q1d9rO7UyT9zK74GnfqhvuBXsx3cb09PT8h__4PRUNI8JwhUmx4rcTcyKia0Kxk14jGBiQg9kiZXe8HjQOOf0zlqZtKpG/s1600/Alt3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwBv9n4pUfHqSYED4hSPwp1h33AaVlnAaCZxHaB3Hl8U3vES3q1d9rO7UyT9zK74GnfqhvuBXsx3cb09PT8h__4PRUNI8JwhUmx4rcTcyKia0Kxk14jGBiQg9kiZXe8HjQOOf0zlqZtKpG/s1600/Alt3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are numerous &lt;a href=&quot;http://modeling-languages.com/uml-tools/&quot;&gt;UML modeling tools&lt;/a&gt; available (commercial or free). For his post, I used &lt;a href=&quot;http://www.sparxsystems.com/platforms/software_development.html&quot;&gt;Enterprise Architect&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/4434762544679231177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/4434762544679231177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/4434762544679231177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/4434762544679231177'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2013/05/advanced-uml-sequence-diagrams.html' title='Advanced UML Sequence Diagrams'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFg3LrI4npsIgk06APnHaFFQzn_cqTmHz0j1HopwKDI6gIMfrrP7ltAynln4nlx-GtqhDwPQqgMY7zHx5Q_dji0KG43y3ifGKwGpMyg44exFbOxzkN0L4Dk4iVGmAZwprc6YoGpdl-C46E/s72-c/SeqDiag1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-565452322095059937</id><published>2013-03-28T09:25:00.001-07:00</published><updated>2013-04-15T22:28:05.373-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="atmosphere"/><category scheme="http://www.blogger.com/atom/ns#" term="CDI"/><category scheme="http://www.blogger.com/atom/ns#" term="consumer"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="inject"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="JBOSS"/><category scheme="http://www.blogger.com/atom/ns#" term="jsf"/><category scheme="http://www.blogger.com/atom/ns#" term="producer"/><category scheme="http://www.blogger.com/atom/ns#" term="push"/><category scheme="http://www.blogger.com/atom/ns#" term="richfaces"/><category scheme="http://www.blogger.com/atom/ns#" term="xhtml"/><title type='text'>Richfaces Ajax CDI Push and JBoss</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
You may not know it, but when you go to a restaurant, you most likely to be served via a method called &lt;a href=&quot;http://en.wikipedia.org/wiki/Service_%C3%A0_la_russe&quot;&gt;service à la russe&lt;/a&gt; (service in the &lt;b&gt;Russian Style&lt;/b&gt;). This is in contradiction to the much older traditional &lt;a href=&quot;http://en.wikipedia.org/wiki/Service_%C3%A0_la_fran%C3%A7aise&quot;&gt;service à la française&lt;/a&gt; (service in the&lt;b&gt; French Style&lt;/b&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJX-4dwuvWExr6-_zaqoHz6El3NbqQzjDVtLn72VYIziT74EIbgv8oj6QodV5YWYFfXCF7ptZWRBMk2Ah9mPqycEyZEtWu9sgMoPjCaqHkW1TEQGzmrEaFoN0KMxk3Z3MIfxOjAoPWm38/s1600/service_a_la_francaise.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJX-4dwuvWExr6-_zaqoHz6El3NbqQzjDVtLn72VYIziT74EIbgv8oj6QodV5YWYFfXCF7ptZWRBMk2Ah9mPqycEyZEtWu9sgMoPjCaqHkW1TEQGzmrEaFoN0KMxk3Z3MIfxOjAoPWm38/s320/service_a_la_francaise.png&quot; width=&quot;232&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
In the original &lt;b&gt;French Style&lt;/b&gt;, all the food was brought from the kitchen into the dining room of the aristocrats or high clergy and served all at once. Then the cooks who lost their jobs during the &lt;a href=&quot;http://en.wikipedia.org/wiki/French_revolution&quot;&gt;French revolution&lt;/a&gt;, end-up opening places call &lt;a href=&quot;http://en.wikipedia.org/wiki/Restaurant&quot;&gt;restaurants&lt;/a&gt; to make a living when common people could come to eat and relax (from the verb &lt;b&gt;se restaurer&lt;/b&gt; in French), meaning &quot;&lt;b&gt;to restore itself&lt;/b&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
French serving style remains in some high class restaurants where small tables or &lt;a href=&quot;http://en.wikipedia.org/wiki/Gu%C3%A9ridon&quot;&gt;guéridons&lt;/a&gt; are moved close to the guest&#39;s table where the food preparation is completed and served.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Buffet&quot;&gt;buffet&lt;/a&gt; is a variation of the &lt;/span&gt;&lt;/span&gt;&lt;b&gt;French Style&lt;/b&gt; where the guests help themselves from the table (in French it is traditionally a &lt;a href=&quot;https://www.google.com/search?q=furniture%20french%20buffet&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;hl=en&amp;amp;tbm=isch&amp;amp;source=og&amp;amp;sa=N&amp;amp;tab=wi&amp;amp;ei=CVZTUYy9I-vliwLb_YGQCQ&amp;amp;biw=1680&amp;amp;bih=893&amp;amp;sei=DlZTUavfJ4ejiQKQqYHICw&quot;&gt;piece of furniture &lt;/a&gt;that looks like a table with drawers &lt;a href=&quot;https://www.google.com/search?q=furniture%20french%20buffet&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;hl=en&amp;amp;tbm=isch&amp;amp;source=og&amp;amp;sa=N&amp;amp;tab=wi&amp;amp;ei=CVZTUYy9I-vliwLb_YGQCQ&amp;amp;biw=1680&amp;amp;bih=893&amp;amp;sei=DlZTUavfJ4ejiQKQqYHICw&quot;&gt;called in fact buffet&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the other hand, the &lt;b&gt;Russian Style&lt;/b&gt; that comes from Russia &lt;a href=&quot;http://en.wikipedia.org/wiki/Service_%C3%A0_la_russe&quot;&gt;was introduced&lt;/a&gt; in the French restaurants during the 19th century where courses are brought to the table sequentially by the waiter. This is now the style in which most modern western &lt;a href=&quot;http://en.wikipedia.org/wiki/Restaurant&quot; title=&quot;Restaurant&quot;&gt;restaurants&lt;/a&gt; serve food (with some significant modifications). &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd3tCaCs3gKt87s9N_RZRNT5zFBccNKmyBiwKsHJm7NE-NW0fHET-R5ssg4FhWH48ZmGkgTdu0RU5K5zIFzp_qUctkNEBMT14ZIJbiR5rA-ieufLdXJXaJTc3yd-4Iw9BqpKueyx5eIN8_/s1600/service_a_la_russe.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;249&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd3tCaCs3gKt87s9N_RZRNT5zFBccNKmyBiwKsHJm7NE-NW0fHET-R5ssg4FhWH48ZmGkgTdu0RU5K5zIFzp_qUctkNEBMT14ZIJbiR5rA-ieufLdXJXaJTc3yd-4Iw9BqpKueyx5eIN8_/s320/service_a_la_russe.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The place setting (called a cover) for each guest includes a &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Service_plate&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Service plate (page does not exist)&quot;&gt;service plate&lt;/a&gt;, all the necessary &lt;a href=&quot;http://en.wikipedia.org/wiki/Cutlery&quot; title=&quot;Cutlery&quot;&gt;cutlery&lt;/a&gt; except those required for dessert, and stemmed glasses for water, &lt;a href=&quot;http://en.wikipedia.org/wiki/Wine&quot; title=&quot;Wine&quot;&gt;wines&lt;/a&gt; and &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Champagne_%28wine%29&quot; title=&quot;Champagne (wine)&quot;&gt;champagne&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Guests immediately remove their napkins and place them in their laps.&lt;br /&gt;
&lt;br /&gt;
The rule is as such: a filled plate is always replaced with an empty 
one, and no place goes without a plate until just before the dessert 
course.&lt;br /&gt;
&lt;br /&gt;
Directly before dessert everything is removed from the place settings but the wine and water glasses. Crumbs are cleared and dessert is served. &lt;br /&gt;
&lt;br /&gt;
As you can see, both styles have &lt;b&gt;very precise rules and mechanisms&lt;/b&gt; that must be followed to ensure the best service. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Richfaces &lt;/b&gt;itself offers several &lt;a href=&quot;http://docs.jboss.org/richfaces/latest_4_X/Component_Reference/en-US/html/chap-Component_Reference-Actions.html#sect-Component_Reference-Actions-a4jpush&quot;&gt;Ajax server-side push mechanisms&lt;/a&gt; to bring data from the server to the client.&lt;br /&gt;
&lt;br /&gt;
Interesting to point-out by the way, that a &lt;a href=&quot;http://en.wikipedia.org/wiki/Waiter&quot;&gt;waiter&lt;/a&gt; in french is called &quot;un &lt;b&gt;serveur&lt;/b&gt;&quot; (someone who serves) and that the same word is used to design a &lt;a href=&quot;http://en.wikipedia.org/wiki/Server_%28computing%29&quot;&gt;server&lt;/a&gt; in computer science.&lt;br /&gt;
&lt;br /&gt;
These three&lt;b&gt; Ajax Push methods&lt;/b&gt; are: &lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;TopicsContext&lt;/b&gt; - accesses a RichFaces message queue directly&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Push CDI&lt;/b&gt; - uses the CDI Event mechanism to fire messages&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Push JMS&lt;/b&gt; - the RichFaces Push consumes messages from an enterprise messaging system and exposes them to the client (tightly coupled with the JMS runtime)&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
In a previous article I was explaining how &lt;a href=&quot;http://www.fandry.blogspot.com/2013/02/advanced-richfaces-extended-data-tables.html&quot;&gt;RichFaces Extended Data Tables can be enhanced&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In this article, I will describe how Richfaces Ajax Push CDI can be implemented and deployed specifically on a JBoss container (I am using &lt;a href=&quot;http://www.jboss.org/jbossas.html&quot;&gt;JBoss application server 7.0&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpu8jhAD3LmUuwtevp0QfB8dIFDcCSH3CAzL4NYpz24_kFX5CKc5xPnRIWPLMAaRVYl1AxcFRcYLW9KkZsk3uQ1LYW7x8GpTTUD4ow8-QoEzwv9OwMyS8dexTMzSSM4Bg2xd9xm4b2eyrs/s1600/CDI_facets.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpu8jhAD3LmUuwtevp0QfB8dIFDcCSH3CAzL4NYpz24_kFX5CKc5xPnRIWPLMAaRVYl1AxcFRcYLW9KkZsk3uQ1LYW7x8GpTTUD4ow8-QoEzwv9OwMyS8dexTMzSSM4Bg2xd9xm4b2eyrs/s1600/CDI_facets.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRAHCtz-_IltW6jefgn0ICBxAic6f4vPkicR_IlLCRAAms-6DuPYDhk7zs4xzl2zE8I3Y6MBY231ARS2CscsBR9rcuVH6CwcpJ09X_GmwerrunQdS0TKiRKMkuGsTQ37gRsSYNGUdSdIPL/s1600/CDI_facets.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=push&amp;amp;sample=pushCdi&amp;amp;skin=blueSky&quot;&gt;Richfaces showcase&lt;/a&gt; describes well as usual the java and JSF code needed to implements the CDI Ajax Push.&amp;nbsp; One thing though, the Push JMS mechanism in not explicated in the show case, but described in the &lt;a href=&quot;http://docs.jboss.org/richfaces/latest_4_X/Component_Reference/en-US/html/chap-Component_Reference-Actions.html#sect-Component_Reference-Actions-a4jpush&quot;&gt;chapter 3 of the documentation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
First what does &lt;b&gt;CDI&lt;/b&gt; means?&lt;br /&gt;
&lt;br /&gt;
If you look at your project&amp;nbsp; facets (I am using &lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;Eclipse IDE&lt;/a&gt;), you will see that CDI stands for &lt;b&gt;Context and Dependency Injection&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Container/Context Dependency Injection&lt;/b&gt; in Java EE 6 &lt;a href=&quot;http://weblogs.java.net/blog/jjviana/archive/2010/04/14/decoupling-event-producers-and-event-consumers-java-ee-6-using-cdi-a&quot;&gt;decouples the processing threads of&amp;nbsp; event producers and event consumers&lt;/a&gt; by using the &lt;a href=&quot;http://en.wikipedia.org/wiki/Observer_pattern&quot;&gt;Observer pattern&lt;/a&gt; in the form of event broadcasting.&lt;br /&gt;
&lt;br /&gt;
An event in CDI is just a regular &lt;a href=&quot;http://en.wikipedia.org/wiki/POJO&quot;&gt;POJO&lt;/a&gt; that can be fired by any class through the use of the Event implementation injected automatically by the container via the &lt;a href=&quot;http://docs.oracle.com/javaee/6/api/javax/inject/Inject.html&quot;&gt;@Inject&lt;/a&gt; annotation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt; 

&lt;span style=&quot;color: #38761d;&quot;&gt;import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Event;

import javax.inject.Inject;
import javax.inject.Named;

import org.richfaces.cdi.push.Push;

@Named
@RequestScoped
public class PushCdiBean implements Serializable {

 private static final long serialVersionUID = 6414191802542861042L;
 public static final String PUSH_CDI_TOPIC = &quot;pushCdi&quot;;
 private String message = &quot;&quot;;

 @Inject
 @Push(topic = PUSH_CDI_TOPIC)
 Event&amp;lt;string&amp;gt;pushEvent;
 
 
 public void sendMessage() throws Exception {
  if (pushEvent == null) {
  } else {
   pushEvent.fire(message);
  }
  message = &quot;&quot;;
 }

 public String getMessage() {
  return message;
 }

 public void setMessage(String message) {
  this.message = message;
 }
}&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
If you download the &lt;a href=&quot;http://www.jboss.org/richfaces/download/stable.html&quot;&gt;source code of the Richfaces showcase&lt;/a&gt; (I am using richfaces-4.3.1.Final), you will see that the &lt;b&gt;readme &lt;/b&gt;file located under&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;b&gt; .\richfaces-4.3.1.Final\examples\richfaces-showcase&lt;/b&gt;&lt;/span&gt; describes useful steps necessary to deploy the sample application on various containers, including JBoss.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First, you need your Maven pom file to have both the Java API CDI and the &lt;a href=&quot;http://www.ibm.com/developerworks/web/library/wa-reverseajax4/&quot;&gt;atmosphere&lt;/a&gt; dependencies:&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;javax.enterprise&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;cdi-api&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;1.1-20130222&amp;lt;/version&amp;gt; 
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.atmosphere&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;atmosphere-runtime&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;1.0.10&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
To be able to inject your CDI bean, your WEB-INF folder needs to contain a bean.xml file:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
    &amp;lt;beans xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; 
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:weld=&quot;http://jboss.org/schema/weld/beans&quot; 
    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee 
       http://docs.jboss.org/cdi/beans_1_0.xsd 
       http://jboss.org/schema/weld/beans 
       http://jboss.org/schema/weld/beans_1_1.xsd&quot;&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
On your deployment platform, you need JBoss standalone configuration located in &lt;b&gt;.\standalone\configuration\standalone-full.xml&lt;/b&gt; to have a JMS topic that match your Push CDI topic:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
&amp;lt;jms-destinations&amp;gt;
 &amp;lt;jms-queue name=&quot;testQueue&quot;&amp;gt;       
  &amp;lt;entry name=&quot;queue/test&quot;/&amp;gt;  
  &amp;lt;entry name=&quot;java:jboss/exported/jms/queue/test&quot;/&amp;gt;
        &amp;lt;/jms-queue&amp;gt;  
 &amp;lt;jms-topic name=&quot;pushCdi&quot;&amp;gt;
         &amp;lt;entry name=&quot;topic/pushCdi&quot;/&amp;gt;  
 &amp;lt;/jms-topic&amp;gt;     
&amp;lt;/jms-destinations&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
You also need to start the JBoss server in full configuration:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc2dqJvuBMfD1l9KI-bG-YVLURqJNyzq0gFfVpHgZU11HaifMqBnCY77a8CZvsSfQLbescRS0R8odhutD0lEwvC2SdvDkfthXL00K7c9wepPJg1IK5WqqdlE-Eyj-MVSPQuUivD0F2fnGX/s1600/startJBOSS_7_full.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc2dqJvuBMfD1l9KI-bG-YVLURqJNyzq0gFfVpHgZU11HaifMqBnCY77a8CZvsSfQLbescRS0R8odhutD0lEwvC2SdvDkfthXL00K7c9wepPJg1IK5WqqdlE-Eyj-MVSPQuUivD0F2fnGX/s1600/startJBOSS_7_full.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another necessary step is&amp;nbsp; to create the JMS user account/password:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhznUcdiQLxGG0PFMt9drPhvJ-hq068_TBOBGQ2WEdObO7SHhil4Zhoybjt7aCHzOv6UT9fIBs8yrLLVM4CPaj-VXghAUsdlHbZfItUHAaFtplFcFVS7fU1VJinZ3PHnnFjOPQ2h10bDtZd/s1600/create_JSM_user.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhznUcdiQLxGG0PFMt9drPhvJ-hq068_TBOBGQ2WEdObO7SHhil4Zhoybjt7aCHzOv6UT9fIBs8yrLLVM4CPaj-VXghAUsdlHbZfItUHAaFtplFcFVS7fU1VJinZ3PHnnFjOPQ2h10bDtZd/s1600/create_JSM_user.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From there, you should be able to test your Ajax CDI push application. In my case, the consumer is a popup window that I launch by clicking a button (see code below):&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Producer code:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;ui:define name=&quot;body&quot;&amp;gt;
 &amp;lt;h:form id =&quot;from&quot;&amp;gt;
  &amp;lt;a4j:commandButton value=&quot;Message Consumer&quot;
   oncomplete=&quot;#{rich:component(&#39;cdi_message_consumer_popup&#39;)}.show();&quot; /&amp;gt;
  &amp;lt;h:panelGrid columns=&quot;4&quot;&amp;gt;
   &amp;lt;h:outputLabel value=&quot;Message:&quot; /&amp;gt;
   &amp;lt;h:inputText id=&quot;messageInput&quot; value=&quot;#{pushCdiBean.message}&quot;/&amp;gt;
   &amp;lt;a4j:commandButton value=&quot;Send&quot; 
    action=&quot;#{pushCdiBean.sendMessage}&quot;
    execute=&quot;@form&quot; 
    render=&quot;messageInput&quot; 
    oncomplete=&quot;#{rich:element(&#39;messageInput&#39;)}.value=&#39;&#39;&quot;/&amp;gt;
  &amp;lt;/h:panelGrid&amp;gt;
 &amp;lt;/h:form&amp;gt;
 &amp;lt;ui:include src=&quot;rf_ajax_push_consumer_popup.xhtml&quot; /&amp;gt;
&amp;lt;/ui:define&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;u&gt;Consumer code:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;rich:popupPanel 
 id=&quot;cdi_message_consumer_popup&quot; 
 modal=&quot;false&quot;
 resizeable=&quot;false&quot; top=&quot;100&quot; 
 left=&quot;300&quot; 
 autosized=&quot;true&quot;
 domElementAttachment=&quot;parent&quot;&amp;gt;
 &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
  &amp;lt;h:outputText value=&quot;Ajax Push/CDI Message Consumer &amp;nbsp;&amp;nbsp;&amp;nbsp;&quot; /&amp;gt;
 &amp;lt;/f:facet&amp;gt;
 &amp;lt;f:facet name=&quot;controls&quot;&amp;gt;
  &amp;lt;h:outputLink value=&quot;#&quot;
   onclick=&quot;#{rich:component(&#39;cdi_message_consumer_popup&#39;)}.hide(); return false;&quot;&amp;gt;
   &amp;lt;h:outputText value=&quot;X&quot; styleClass=&quot;textHeader&quot; /&amp;gt;
  &amp;lt;/h:outputLink&amp;gt;
 &amp;lt;/f:facet&amp;gt;
 &amp;lt;h:form&amp;gt;
  &amp;lt;h:panelGrid columns=&quot;3&quot;&amp;gt;
   &amp;lt;a4j:push address=&quot;pushCdi&quot; 
    onerror=&quot;alert(&#39;error: &#39; + event.rf.data)&quot;
    ondataavailable=&quot;jQuery(&#39;&amp;lt;li /&amp;gt;&#39;).prependTo(&#39;#messages&#39;).text(event.rf.data)&quot;&amp;gt;
   &amp;lt;/a4j:push&amp;gt;
   &amp;lt;ul id=&quot;messages&quot; /&amp;gt;
  &amp;lt;/h:panelGrid&amp;gt;
 &amp;lt;/h:form&amp;gt;
&amp;lt;/rich:popupPanel&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrTeykonQjJj0KwWlK41Fb1ezEZ9c5CYye-tb5_b3Crdz8rj-tRyyBQju40I0zfNqHxbBadhHwNiBamzYj5dLJsEDZHVS6r3AEtdyxz67dKRTEp0t91y79hkNHM1bslp2tIBb_-ER9hGBF/s1600/push_1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrTeykonQjJj0KwWlK41Fb1ezEZ9c5CYye-tb5_b3Crdz8rj-tRyyBQju40I0zfNqHxbBadhHwNiBamzYj5dLJsEDZHVS6r3AEtdyxz67dKRTEp0t91y79hkNHM1bslp2tIBb_-ER9hGBF/s1600/push_1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The message (simple string) is send to the server and pushed back to the browser. The original message is then cleaned:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrYDOIB6f-GQpctFpXpNMiClnx_x0Hexh2CJ64hwKfpNO6jhXQ-nYVC8U5UMwQzBuJyX1wskjVXht2lK206AZ1qsDV_BRuOfkVX0OqFsFHJM3lxo5bGOFaxr1ZXU9EB79THiltvBqfdBmT/s1600/push_2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrYDOIB6f-GQpctFpXpNMiClnx_x0Hexh2CJ64hwKfpNO6jhXQ-nYVC8U5UMwQzBuJyX1wskjVXht2lK206AZ1qsDV_BRuOfkVX0OqFsFHJM3lxo5bGOFaxr1ZXU9EB79THiltvBqfdBmT/s1600/push_2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A big thank to my colleague &lt;a href=&quot;http://www.facebook.com/asha.ambikavijayakumaran&quot;&gt;&lt;b&gt;Asha Ambikavijayakumaran&lt;/b&gt;&lt;/a&gt; for figuring out all the tricky details for the JBoss deployment for this Richfaces showcase! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All ingredients and open source code related to this recipe can be found at &lt;a href=&quot;http://code.google.com/p/yummycode/&quot;&gt;YummyCode&lt;/a&gt; on the &lt;a href=&quot;http://code.google.com/p/yummycode/source/browse/#svn%2Ftrunk%2Fjsfplate&quot;&gt;JSF Plate&lt;/a&gt; project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/565452322095059937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/565452322095059937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/565452322095059937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/565452322095059937'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2013/03/richfaces-ajax-cdi-push-and-jboss.html' title='Richfaces Ajax CDI Push and JBoss'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheJX-4dwuvWExr6-_zaqoHz6El3NbqQzjDVtLn72VYIziT74EIbgv8oj6QodV5YWYFfXCF7ptZWRBMk2Ah9mPqycEyZEtWu9sgMoPjCaqHkW1TEQGzmrEaFoN0KMxk3Z3MIfxOjAoPWm38/s72-c/service_a_la_francaise.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-5169826251527903191</id><published>2013-02-09T09:53:00.001-08:00</published><updated>2013-02-09T18:40:46.565-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="css"/><category scheme="http://www.blogger.com/atom/ns#" term="data presentation"/><category scheme="http://www.blogger.com/atom/ns#" term="extendedDataTable"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="jsf"/><category scheme="http://www.blogger.com/atom/ns#" term="jsfplate"/><category scheme="http://www.blogger.com/atom/ns#" term="richfaces"/><category scheme="http://www.blogger.com/atom/ns#" term="skin"/><category scheme="http://www.blogger.com/atom/ns#" term="status"/><category scheme="http://www.blogger.com/atom/ns#" term="table"/><category scheme="http://www.blogger.com/atom/ns#" term="tooltip"/><category scheme="http://www.blogger.com/atom/ns#" term="yummycode"/><title type='text'>Advanced RichFaces Extended Data Tables</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&amp;nbsp;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRvYiuncRcAl1EonuVujLe4OF-YUPpc077eqAhbMBsZj2sIsxG5vGmNtXIvn4umCnvGJfGcY-l6-IPpzLT1v6Nd_LeqNKsg_kcrNhCf90R6yWK4yOJE6LWHdFwY_VdQ-2Sy9kK7w36pwnf/s1600/crepes.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRvYiuncRcAl1EonuVujLe4OF-YUPpc077eqAhbMBsZj2sIsxG5vGmNtXIvn4umCnvGJfGcY-l6-IPpzLT1v6Nd_LeqNKsg_kcrNhCf90R6yWK4yOJE6LWHdFwY_VdQ-2Sy9kK7w36pwnf/s1600/crepes.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
With &lt;a href=&quot;http://en.wikipedia.org/wiki/Mardi_gras&quot;&gt;Mardi Gras&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Carnival&quot;&gt;Carnival&lt;/a&gt; around the corner, this is &lt;a href=&quot;http://en.wikipedia.org/wiki/Crepe&quot;&gt;crêpe&lt;/a&gt; season!&lt;br /&gt;
&lt;br /&gt;
This post is the first of a set of recipes that describe useful tips and reusable code and patterns related to &lt;b&gt;Java&lt;/b&gt;, &lt;b&gt;JSF 2.0&lt;/b&gt; and &lt;b&gt;RichFaces 4.0&lt;/b&gt;.&amp;nbsp; In this article I am describing practical integration code when using advanced &lt;a href=&quot;http://docs.jboss.org/richfaces/latest_4_X/Developer_Guide/en-US/html/chap-Developer_Guide-Getting_started_with_RichFaces.html&quot;&gt;Richfaces Extended Data Tables&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=extendedDataTable&quot;&gt;RichFaces showcase&lt;/a&gt; describes well how to start creating your own extendedDataTable. However, here are some additional personal ingredients that can be very handy when preparing an appealing stack of JSF based web pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;1) Setting your Table&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
The first time your try to put together a RichFaces extendedDataTable, you might encounter the following behavior: your table does not look like as you expected it: columns have a default size (the length of the label) and the whole size is the size of your whole window, so you end up with a large white space where they are no columns:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwU29M59RaEoAkmxIrgJ3HJEDOjZ-13hKukNkJ4y2YwQqP5Qgpxr8Yomvdb_kIYJmf4w0HrMMPo8PYOHJAVM3c703NInPn9RhdB9VX3rcHj-AaPTrv8h6X99Jy4N5HYURd72vT2pDMjg4_/s1600/extended_data_table_size.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwU29M59RaEoAkmxIrgJ3HJEDOjZ-13hKukNkJ4y2YwQqP5Qgpxr8Yomvdb_kIYJmf4w0HrMMPo8PYOHJAVM3c703NInPn9RhdB9VX3rcHj-AaPTrv8h6X99Jy4N5HYURd72vT2pDMjg4_/s1600/extended_data_table_size.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&amp;nbsp;One reason could be that no column or table size has been specified:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
&amp;nbsp;&amp;lt;rich:extendedDataTable id=&quot;table&quot; value=&quot;#{countries.countryItems} var=&quot;country&quot; &amp;gt;
    &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
        &amp;lt;h:outputText value=&quot;Countries&quot; /&amp;gt;
    &amp;lt;/f:facet&amp;gt;
    &amp;lt;rich:column&amp;gt;
        &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
            &amp;lt;h:outputText value=&quot;Name&quot; /&amp;gt;
        &amp;lt;/f:facet&amp;gt;
        &amp;lt;h:outputText value=&quot;#{country.name}&quot; /&amp;gt;
    &amp;lt;/rich:column&amp;gt;
    &amp;lt;rich:column&amp;gt;
        &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
            &amp;lt;h:outputText value=&quot;Capital&quot; /&amp;gt;
        &amp;lt;/f:facet&amp;gt;
        &amp;lt;h:outputText value=&quot;#{country.capital}&quot; /&amp;gt;
    &amp;lt;/rich:column&amp;gt;
    &amp;lt;rich:column&amp;gt;
        &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
            &amp;lt;h:outputText value=&quot;Language(s)&quot; /&amp;gt;
        &amp;lt;/f:facet&amp;gt;
        &amp;lt;h:outputText value=&quot;#{country.languages}&quot; /&amp;gt;
    &amp;lt;/rich:column&amp;gt;
&amp;lt;/rich:extendedDataTable&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
One way to quickly fix this is to assign specific sizes to your columns and headers (in my case these are absolute values in pixels and have adjusted the values to take into account the height of a row and the presence of a vertical scroller).&amp;nbsp; I have also added single selection mode so I can click on a row to retrieve more information about a certain item:&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
&amp;lt;rich:extendedDataTable id=&quot;table&quot; value=&quot;#{countries.countryItems}&quot;
    var=&quot;country&quot; selection=&quot;#{countries.selection}&quot; 
    style=&quot;height:190px; width:503px;&quot;
    selectionMode=&quot;single&quot;&amp;gt;
    &amp;lt;a4j:ajax execute=&quot;@form&quot; event=&quot;selectionchange&quot; listener=&quot;#{countries.selectionListener}&quot;/&amp;gt;
        &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
            &amp;lt;h:outputText value=&quot;Countries&quot; /&amp;gt;
        &amp;lt;/f:facet&amp;gt;
        &amp;lt;rich:column width=&quot;100px&quot;&amp;gt;
            &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
                &amp;lt;h:outputText value=&quot;Name&quot; /&amp;gt;
            &amp;lt;/f:facet&amp;gt;
            &amp;lt;h:outputText value=&quot;#{country.name}&quot; /&amp;gt;
        &amp;lt;/rich:column&amp;gt;
        &amp;lt;rich:column width=&quot;100px&quot;&amp;gt;
            &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
                 &amp;lt;h:outputText value=&quot;Capital&quot; /&amp;gt;
            &amp;lt;/f:facet&amp;gt;
            &amp;lt;h:outputText value=&quot;#{country.capital}&quot; /&amp;gt;
        &amp;lt;/rich:column&amp;gt;
        &amp;lt;rich:column width=&quot;300px&quot;&amp;gt;
            &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
                &amp;lt;h:outputText value=&quot;Language(s)&quot; /&amp;gt;
            &amp;lt;/f:facet&amp;gt;
            &amp;lt;h:outputText value=&quot;#{country.languages}&quot; /&amp;gt;
        &amp;lt;/rich:column&amp;gt;
&amp;lt;/rich:extendedDataTable&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7qoPDkud1j7BCJDhb5vmeClS_yTBt5Luh2vQYfTVcDa4O4c6KFEpFfn6R4LCHWwFGmRAgsUldsp8mMGRTa_0yP535muhajmfqf7Q6AFOwzzDUVWKf1tBvpUuI0FJtlBy_Xfs76RnBV2z/s1600/extended_data_table_sized_cols.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs7qoPDkud1j7BCJDhb5vmeClS_yTBt5Luh2vQYfTVcDa4O4c6KFEpFfn6R4LCHWwFGmRAgsUldsp8mMGRTa_0yP535muhajmfqf7Q6AFOwzzDUVWKf1tBvpUuI0FJtlBy_Xfs76RnBV2z/s1600/extended_data_table_sized_cols.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;2) Interaction improvements&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
Let say now that you want to add a button to load or refresh the information in the table and that this takes some time because you are connected to a remote service. You may want to show to the end-user an indicator that some processing or data retrieval is happening (for this example, I added a waiting function in the &lt;a href=&quot;http://code.google.com/p/yummycode/source/browse/#svn%2Ftrunk%2Fjsfplate%2Fsrc%2Fmain%2Fjava%2Fnet%2Fyummycode%2Fjsfplate%2Fdomain&quot;&gt;iem list bean&lt;/a&gt; to simulate a few seconds wait).&lt;br /&gt;
&lt;br /&gt;
I propose to use an &lt;a href=&quot;http://en.wikipedia.org/wiki/Graphics_Interchange_Format&quot;&gt;animated GIF&lt;/a&gt; and take advantage of the RichFaces &lt;b&gt;&lt;a href=&quot;http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=status&amp;amp;skin=blueSky&quot;&gt;a4j:status&lt;/a&gt;&lt;/b&gt; (an indicator of an Ajax request. It has two states: &lt;i&gt;start&lt;/i&gt; and &lt;i&gt;stop&lt;/i&gt;. The
        &lt;i&gt;start&lt;/i&gt; state indicates that an Ajax request is in progress. When an Ajax response is returned, the component
        switches to the &lt;i&gt;stop&lt;/i&gt; state).&lt;br /&gt;
&lt;br /&gt;
In this case, I refer to a4j:status every time I click on the refresh button to download the countries statistics. I have also added an animated GIF file called processing.gif in my webapp/img folder and top aligned both the button and the ajax indicator into a JSF panel grid:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
&amp;lt;h:panelGroup&amp;gt;
    &amp;lt;h:panelGrid columns=&quot;2&quot; columnClasses=&quot;alignTop, alignTop&quot;&amp;gt;
        &amp;lt;a4j:commandButton value=&quot;Refresh&quot; status=&quot;refreshTable&quot;
     oncomplete=&quot;#{countries.refresh()}&quot; /&amp;gt;
        &amp;lt;a4j:status name=&quot;someProcessing&quot;&amp;gt;
            &amp;lt;f:facet name=&quot;start&quot;&amp;gt;
         &amp;lt;h:graphicImage value=&quot;/img/processing.gif&quot; /&amp;gt;
     &amp;lt;/f:facet&amp;gt;
        &amp;lt;/a4j:status&amp;gt;
    &amp;lt;/h:panelGrid&amp;gt;
&amp;lt;/h:panelGroup&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
As a result, the processing indicator appears next to the button when it is clicked and disappear after the table has been refreshed.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFAFjsmgnQuOrylOjhWSZDWRBGdTwhKOvi7m_75e8PnFX2M8isdOKMLkzLn5n9CwrbdGzbFpxwJzHYkzWGlIwNBxlvt8AbvLdtJSVewfYv0_Ne6pfOEb_vBE-iqsRjL_n3BDUlCIPbh0b5/s1600/refresh_table.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFAFjsmgnQuOrylOjhWSZDWRBGdTwhKOvi7m_75e8PnFX2M8isdOKMLkzLn5n9CwrbdGzbFpxwJzHYkzWGlIwNBxlvt8AbvLdtJSVewfYv0_Ne6pfOEb_vBE-iqsRjL_n3BDUlCIPbh0b5/s1600/refresh_table.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In fact, you can use the same indicator when selecting a row to display detailed information about an item if the retrieval of the additional information takes too long for the user (e.g. more than a couple of seconds):&lt;br /&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;a4j:ajax execute=&quot;@form&quot; event=&quot;selectionchange&quot; status=&quot;someProcessing&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;listener=&quot;#{countries.selectionListener}&quot; /&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;3) Adding some coloring and flavor&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
If you don&#39;t have a predefine look and feel (e.g. a reusable template or UI toolkit), you can easily use the &lt;a href=&quot;http://docs.jboss.org/richfaces/latest_4_X/Developer_Guide/en-US/html/chap-Developer_Guide-Skinning_and_theming.html&quot;&gt;themes and skins&lt;/a&gt; that come with RichFaces.&amp;nbsp; A skin can be quickly &lt;a href=&quot;http://code.google.com/p/yummycode/source/browse/trunk/jsfplate/src/main/webapp/WEB-INF/web.xml&quot;&gt;added to the web.xml file&lt;/a&gt; as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;context-param&amp;gt;
    &amp;lt;param-name&amp;gt;org.richfaces.skin&amp;lt;/param-name&amp;gt;
    &amp;lt;param-value&amp;gt;wine&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
Some of my favorites predefined skins are &lt;a href=&quot;http://showcase.richfaces.org/richfaces/component-sample.jsf?skin=deepMarine&quot;&gt;deepMarine&lt;/a&gt; and &lt;a href=&quot;http://showcase.richfaces.org/richfaces/component-sample.jsf?skin=wine&quot;&gt;wine:&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivXwzdV5wJ6ToDi8cDomzXETZABkxkatr08Fg0dPbVEceDssN8km2Jl1ggpPJ6i4qHecVQSTAgRswEpfV47AMnDaFO0nYbMW4P7ZBVS6WXizFbSOq-uPCJSmLu1kjYVv__Qg4Aj8M4c06N/s1600/table_with_wine_skin.tiff&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivXwzdV5wJ6ToDi8cDomzXETZABkxkatr08Fg0dPbVEceDssN8km2Jl1ggpPJ6i4qHecVQSTAgRswEpfV47AMnDaFO0nYbMW4P7ZBVS6WXizFbSOq-uPCJSmLu1kjYVv__Qg4Aj8M4c06N/s1600/table_with_wine_skin.tiff&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;4) The missing ingredients&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
Even though the RichFaces Extended Data Tables have a lot of features such as filtering, sorting, scrolling, frozen columns, here are always missing ingredients that you would like to use to offer a better experience to the end user. One that you will not find in the ExtendedDataTable is the wrapping of text in a column or a &lt;a href=&quot;http://stackoverflow.com/questions/1696747/rich-extended-datatable-column-widths&quot;&gt;robust column horizontal scrolling&lt;/a&gt;. Hopefully this feature will be added in future release. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;5) Always give a tip if you can&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
Offering tips is generally a good practice. It makes feel everybody happy: the person who provides it knowing that he/she has done a good job, and the end-user who enjoys it and saves time using them.&lt;br /&gt;
&lt;br /&gt;
In this example, I have added a column to to indicate which countries have a &lt;a href=&quot;http://en.wikipedia.org/wiki/Gross_domestic_product&quot;&gt;GDP above one Trillion US Dollars&lt;/a&gt;. When the use hovers the mouse above the checkbox or the name of the country, a tooltip appears and shows the GDP number for the selected country. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUmWpPHmhzRwBOITOutMLV_nS3582_tXF9ihJbcevG8yctpPctyXrraPYyTgZcZNl_7vm7KmoN3BIuy_solvtFp4fbQvP0w-cIuCz5gHl9-BkMKZR-QObWQVXIrhbPuB1_ITo8NGxOAXWe/s1600/GDP_France.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUmWpPHmhzRwBOITOutMLV_nS3582_tXF9ihJbcevG8yctpPctyXrraPYyTgZcZNl_7vm7KmoN3BIuy_solvtFp4fbQvP0w-cIuCz5gHl9-BkMKZR-QObWQVXIrhbPuB1_ITo8NGxOAXWe/s1600/GDP_France.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP57L0ZSj_RlYKNvlkjrGrlIHNnSUbyGYbD_o873GF-Ynv50oYkm_GY4Gi2QGVzDZo9p8DI6rNMFwJlgcw9WYLmaPtXIW4ija68VgJ-aoy4pgW1eOYDDn5ZCBhLErCsE_9lShXZVqwolJH/s1600/GDP_Ethiopia.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP57L0ZSj_RlYKNvlkjrGrlIHNnSUbyGYbD_o873GF-Ynv50oYkm_GY4Gi2QGVzDZo9p8DI6rNMFwJlgcw9WYLmaPtXIW4ija68VgJ-aoy4pgW1eOYDDn5ZCBhLErCsE_9lShXZVqwolJH/s1600/GDP_Ethiopia.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Tooltips can be easily added as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;rich:column styleClass=&quot;#{msg.status}&quot; width=&quot;35px&quot;&amp;gt;
    &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
        &amp;lt;h:outputText value=&quot;GDP &amp;gt; $1T&quot; /&amp;gt;
    &amp;lt;/f:facet&amp;gt;
    &amp;lt;rich:tooltip mode=&quot;client&quot; target=&quot;largeGDPCountry&quot;&amp;gt;
        &amp;lt;h:outputText value=&quot;#{country.name} - 2011 GDP: #{country.gdp} &amp;gt; $1T&quot; /&amp;gt;
    &amp;lt;/rich:tooltip&amp;gt;
    &amp;lt;h:graphicImage id=&quot;largeGDPCountry&quot; value=&quot;/img/checkmark.png&quot; rendered=&quot;#{country.largeGdp}&quot; alt=&quot;GDP&quot; /&amp;gt;
&amp;lt;/rich:column&amp;gt;
&amp;lt;rich:column width=&quot;100px&quot;&amp;gt;
    &amp;lt;f:facet name=&quot;header&quot;&amp;gt;
        &amp;lt;h:outputText value=&quot;Name&quot; /&amp;gt;
    &amp;lt;/f:facet&amp;gt;
    &amp;lt;h:outputText id=&quot;countryName&quot; value=&quot;#{country.name}&quot; /&amp;gt;
    &amp;lt;rich:tooltip mode=&quot;client&quot; target=&quot;countryName&quot;&amp;gt;
        &amp;lt;h:outputText value=&quot;#{country.name} - 2011 GDP: #{country.gdp} $M&quot; /&amp;gt;
    &amp;lt;/rich:tooltip&amp;gt;
&amp;lt;/rich:column&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ingredients and open source code related to this recipe can be found at &lt;a href=&quot;http://code.google.com/p/yummycode/&quot;&gt;YummyCode&lt;/a&gt; on the &lt;a href=&quot;http://code.google.com/p/yummycode/source/browse/#svn%2Ftrunk%2Fjsfplate&quot;&gt;JSF Plate&lt;/a&gt; project.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/5169826251527903191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/5169826251527903191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5169826251527903191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5169826251527903191'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2013/02/advanced-richfaces-extended-data-tables.html' title='Advanced RichFaces Extended Data Tables'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRvYiuncRcAl1EonuVujLe4OF-YUPpc077eqAhbMBsZj2sIsxG5vGmNtXIvn4umCnvGJfGcY-l6-IPpzLT1v6Nd_LeqNKsg_kcrNhCf90R6yWK4yOJE6LWHdFwY_VdQ-2Sy9kK7w36pwnf/s72-c/crepes.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-5863576521271621288</id><published>2012-09-28T09:34:00.001-07:00</published><updated>2012-09-28T14:22:43.541-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="applications"/><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="DB"/><category scheme="http://www.blogger.com/atom/ns#" term="Healthcare"/><category scheme="http://www.blogger.com/atom/ns#" term="HIE"/><category scheme="http://www.blogger.com/atom/ns#" term="IT"/><category scheme="http://www.blogger.com/atom/ns#" term="multitenancy"/><category scheme="http://www.blogger.com/atom/ns#" term="SaaS"/><title type='text'>Multitenancy and Healthcare Software Applications</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNkTcJhn9DFxxPlrNryyJv3snvACFTIV__2Z2-AN8GCL_g2gSuBs_2D8LT0FSmQiqk0nu6DLoiQkSlhYfKXE9EzuLS8x7H7vDga8GASNvuQbJdESMd-O84IaL0BeU09XkD3VnJgHdio3Y3/s1600/CloudKey2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNkTcJhn9DFxxPlrNryyJv3snvACFTIV__2Z2-AN8GCL_g2gSuBs_2D8LT0FSmQiqk0nu6DLoiQkSlhYfKXE9EzuLS8x7H7vDga8GASNvuQbJdESMd-O84IaL0BeU09XkD3VnJgHdio3Y3/s320/CloudKey2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Virtualization&quot;&gt;Virtualization&lt;/a&gt; abstracts&amp;nbsp; the running stack and components in order to have services users to appear to run on a separate physical machine has been an earlier attempt to lower the cost of resources. In fact, virtualization has brought tremendous progresses in heath care for the development, testing and &lt;a href=&quot;http://www.vmware.com/solutions/industry/healthcare/?rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CC0QFjAA&amp;amp;url=http://www.vmware.com/go/healthcare&amp;amp;ei=7dVlUOmRLarUigKNg4H4Bg&amp;amp;usg=AFQjCNEdjO6rhYTuFPpiq4Opbi4SyUUfGg&quot;&gt;running applications&lt;/a&gt; during the past 10 years or so. However &lt;b&gt;multitenancy&lt;/b&gt; goes one step further.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Multitenancy&quot;&gt;Multitenancy &lt;/a&gt;is at the core of the design of Web based applications offered as &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_as_a_service&quot;&gt;Software as a Service (SaaS)&lt;/a&gt;. In a multitenant software application, the service offered to each 
client organization (e.g. in healthcare that would be a physician 
office, a lab, a clinic ...)&amp;nbsp; is virtually partitioned. Data and 
configuration are separate for each organization that use the service. 
This is required to ensure the &lt;b&gt;confidentiality of the patient records&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
In a &lt;a href=&quot;http://en.wikipedia.org/wiki/Multitenancy&quot;&gt;multitenancy &lt;/a&gt;architecture,
 the same set of &lt;b&gt;hardware&lt;/b&gt;, &lt;b&gt;network resources&lt;/b&gt;, &lt;b&gt;software stack&lt;/b&gt;, 
&lt;b&gt;application code base&lt;/b&gt; are shared between all users of the service. As a 
result, &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_as_a_service&quot;&gt;SaaS applications&lt;/a&gt; are managed and &lt;b&gt;delivered more efficiently&lt;/b&gt; at a &lt;b&gt;lower cost&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a subset of the &lt;b&gt;services management tasks&lt;/b&gt; that can be greatly simplified by a multitenancy architecture :&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;patch deployments&lt;/li&gt;
&lt;li&gt;GUI, API and platform/stack upgrades&lt;/li&gt;
&lt;li&gt;data migration&lt;/li&gt;
&lt;li&gt;customizations&lt;/li&gt;
&lt;li&gt;customer support&lt;/li&gt;
&lt;li&gt;monitoring&lt;/li&gt;
&lt;li&gt;reporting&lt;/li&gt;
&lt;/ul&gt;
The amount of resource: &lt;b&gt;hardware&lt;/b&gt;, &lt;b&gt;network &lt;/b&gt;and&lt;b&gt; IT staff&lt;/b&gt;, dedicated to a specific application is drastically reduced from a model where every organization has its own instance. In addition to this, multitenancy tends to benefit the whole user set of a particular service, since defects fixes and new features are deployed incrementally very frequently. &lt;b&gt;Agile development process methodologies&lt;/b&gt; such as &lt;a href=&quot;http://www.scrumalliance.org/&quot;&gt;Scrum&lt;/a&gt; are particularly suitable for this technology since development and deployment cycles can be extremely short.&lt;br /&gt;
&lt;br /&gt;
This can be critical in healthcare when several organizations such as hospitals, labs and pharmacies using the same service, need to exchange data across an &lt;a href=&quot;http://en.wikipedia.org/wiki/Health_information_exchange&quot;&gt;Health Information Exchange &lt;/a&gt;or a &lt;a href=&quot;http://en.wikipedia.org/wiki/Regional_Health_Information_Organization&quot;&gt;Regional Health Information Organization&lt;/a&gt;). In this case, all end-points of the &lt;b&gt;HIE&lt;/b&gt; have to use the same data format , the same protocols and security scheme. Is parts or all of the end-points are running in a multitenant architecture, then the &lt;a href=&quot;http://fandry.blogspot.com/2011/10/combining-ihe-transactions.html&quot;&gt;orchestration of all end-points&lt;/a&gt; is facilitated greatly.&amp;nbsp; For example, every time a new service functionality is deployed available, all end-points have access to it and are compatible. Moreover, &lt;b&gt;maintenance &lt;/b&gt;such are the provisioning and re-provisioning of user credentials and security certificates is simplified. Finally &lt;b&gt;monitoring &lt;/b&gt;and&amp;nbsp; &lt;b&gt;reporting&lt;/b&gt; such as &lt;a href=&quot;http://www.healthit.gov/providers-professionals/ehr-implementation-steps/step-5-achieve-meaningful-use&quot;&gt;meaningful use&lt;/a&gt; are much easier to implement and deploy.&lt;br /&gt;
&lt;br /&gt;
The unified architecture and &lt;b&gt;deployment topology&lt;/b&gt; (for development, QA testing, staging and production), makes the application cheaper to develop, deploy and maintain. In healthcare software development, it can take more than a year to acquire not only the necessary IT skills, but also knowledge of the domain.This is why it is very difficult to hire, train&amp;nbsp; and keep qualified engineers, support and administration specialists, and &lt;a href=&quot;http://management.fortune.cnn.com/2011/12/27/10-hot-careers-for-2012-and-beyond/&quot;&gt;the demand is growing&lt;/a&gt;.&amp;nbsp; With a&lt;b&gt; multitenancy model&lt;/b&gt;, more and better services can be developed and maintained with the same engineering and IT workforce. The support specialists can then refocus their efforts on &lt;b&gt;solving end-users problems&lt;/b&gt; related to healthcare rather than pure IT infrastructure and improve customer satisfaction overall.&lt;br /&gt;
&lt;br /&gt;
Further more, multitenancy provides much &lt;b&gt;greater performance&lt;/b&gt;, &lt;b&gt;scalability &lt;/b&gt;and &lt;b&gt;maintainability &lt;/b&gt;as applications are generally hosted on elastic cloud infrastructures and platforms. Even though more and more vendors offer &lt;b&gt;cloud based products&lt;/b&gt; from basic elastic resources through &lt;a href=&quot;http://en.wikipedia.org/wiki/Infrastructure_as_a_service#Service_models&quot;&gt;infrastructure as a Service (IaaS)&lt;/a&gt;, or a full customizable development and deployment &lt;a href=&quot;http://en.wikipedia.org/wiki/PaaS&quot;&gt;cloud based platform (PaaS)&lt;/a&gt;, professional healthcare IT professionals are still reluctant to have their patient&#39;s records hosted on commercial public clouds. Obviously, offloading generic healthcare related services that do not contain any &lt;a href=&quot;http://en.wikipedia.org/wiki/Protected_health_information&quot;&gt;PHI&lt;/a&gt; information (e.g. &lt;a href=&quot;http://en.wikipedia.org/wiki/ICD9#ICD-9&quot;&gt;ICDx&lt;/a&gt;, &lt;a href=&quot;http://www.hl7.org/&quot;&gt;HL7&lt;/a&gt;, &lt;a href=&quot;http://www.ihtsdo.org/snomed-ct/&quot;&gt;SNOMED&lt;/a&gt; taxonomy and terminology services) can certainly be realized from private to public cloud if needed. On the other hand, when any patient demographic information or clinical data is included, healthcare &lt;b&gt;IT decision makers&lt;/b&gt; needs assurances that the data is &lt;b&gt;always secure&lt;/b&gt; and the applications and processes involved are&lt;b&gt; in compliance&lt;/b&gt; with &lt;a href=&quot;http://www.hhs.gov/ocr/privacy/hipaa/understanding/summary/index.html&quot;&gt;HIPAA&lt;/a&gt; regulation. One minimum requirement for example is that all &lt;b&gt;protected data&lt;/b&gt; must be encrypted &lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtps7%2Fpdtaflt.html&quot;&gt;at rest&lt;/a&gt; and &lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtps7%2Fpdtaflt.html&quot;&gt;in flight&lt;/a&gt; at all time. Other legal requirements in certain states also require that the patient&#39;s data stays within the limit of the states and this can be an issue when physical servers on public clouds can reside anywhere.&lt;br /&gt;
&lt;br /&gt;
The&lt;b&gt; migration of legacy single tenant applications&lt;/b&gt; to multitenant based services is definitively challenging and requires&lt;a href=&quot;http://soa-biz.blogspot.com/2011/07/enterprise-architects-should-consider.html&quot;&gt; new paradigms&lt;/a&gt; (e.g. &lt;a href=&quot;http://www.developerforce.com/media/ForcedotcomBookLibrary/Force.com_Multitenancy_WP_101508.pdf&quot;&gt;metadata driven architecture&lt;/a&gt; and &lt;a href=&quot;http://www-db.in.tum.de/~rittinge/publications/mtdb.pdf&quot;&gt;data models&lt;/a&gt;, &lt;a href=&quot;http://blog.kineticdata.com/service-request-management/three-keys-to-making-multi-tenancy-work/&quot;&gt;polymorphic applications&lt;/a&gt;), new tools and platforms and engineers and IT personnel familiar with this new model and its related technologies. Multitenancy is an essential part of the whole&lt;b&gt; cloud computing market for the healthcare industry&lt;/b&gt; that is &lt;a href=&quot;http://www.business2community.com/tech-gadgets/how-cloud-computing-is-changing-healthcare-0294163&quot;&gt;estimated to grow&lt;/a&gt; to $5.4 billion by 2017.&lt;br /&gt;
&lt;br /&gt;
Multitenancy is certainly&lt;b&gt; one of the most critical technologies&lt;/b&gt; that will drastically help improve the &lt;b&gt;efficiency &lt;/b&gt;of healthcare, &lt;b&gt;reduce cost&lt;/b&gt; and will be the base of &lt;a href=&quot;http://download.microsoft.com/download/8/A/8/8A89DAA9-BA03-473B-BF57-AED28AFCCF98/Business_Intelligence_in_Health_Whitepaper.pdf&quot;&gt;business intelligence&lt;/a&gt; and &lt;b&gt;data warehousing solutions&lt;/b&gt; to make better&lt;b&gt; health predictions&lt;/b&gt; and &lt;b&gt;decisions&lt;/b&gt; for the overall population.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/5863576521271621288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/5863576521271621288' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5863576521271621288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/5863576521271621288'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/09/multitenancy-and-healthcare-software.html' title='Multitenancy and Healthcare Software Applications'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNkTcJhn9DFxxPlrNryyJv3snvACFTIV__2Z2-AN8GCL_g2gSuBs_2D8LT0FSmQiqk0nu6DLoiQkSlhYfKXE9EzuLS8x7H7vDga8GASNvuQbJdESMd-O84IaL0BeU09XkD3VnJgHdio3Y3/s72-c/CloudKey2.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-8615856532511674109</id><published>2012-06-13T14:19:00.003-07:00</published><updated>2013-04-24T21:39:06.171-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CXF"/><category scheme="http://www.blogger.com/atom/ns#" term="JACKSON"/><category scheme="http://www.blogger.com/atom/ns#" term="JAX-RS"/><category scheme="http://www.blogger.com/atom/ns#" term="JAXB"/><category scheme="http://www.blogger.com/atom/ns#" term="MAVEN"/><category scheme="http://www.blogger.com/atom/ns#" term="POJO"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><title type='text'>How to create a simple CXF based JAX-RS Client</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp;

&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In my previous blog post, I did explain how to &lt;a href=&quot;http://www.fandry.blogspot.com/2012/05/rest-api-with-cxf-and-spring.html&quot;&gt;create a REST API using CXF and Spring&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This time I would like to describe how to quickly create a client that can call the REST API while reusing the resources &lt;a href=&quot;http://en.wikipedia.org/wiki/POJO&quot;&gt;POJO&lt;/a&gt; classes,&lt;br /&gt;
so the &lt;a href=&quot;http://en.wikipedia.org/wiki/Marshalling_%28computer_science%29&quot;&gt;un-marshalling&lt;/a&gt; is done by &lt;a href=&quot;http://en.wikipedia.org/wiki/JAXB&quot;&gt;JAXB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For this I am using the &lt;a href=&quot;http://cxf.apache.org/docs/jax-rs-client-api.html&quot;&gt;CXF WebClient&lt;/a&gt; which is very simple to use:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;import WebClient from org.apache.cxf.jaxrs.client.WebClient&lt;/li&gt;
&lt;li&gt;import your POJOs&lt;/li&gt;
&lt;li&gt;import a JABX provider (I am using &lt;a href=&quot;http://fasterxml.github.com/jackson-jaxrs-json-provider/javadoc/2.0.1/com/fasterxml/jackson/jaxrs/json/JacksonJaxbJsonProvider.html&quot;&gt;Jackson JAXB JSON provider&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&amp;nbsp;Here is a very simple standalone program that does exactly this (make sure your REST API has been deployed locally):&lt;/div&gt;
&lt;pre&gt; 
&lt;span style=&quot;color: #38761d;&quot;&gt;import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import org.apache.cxf.jaxrs.client.WebClient;
import java.util.ArrayList;
import java.util.List;

public class App 
{
    public static void main( String[] args )  throws Exception { 
      
     List&amp;lt;Object&amp;gt; providers = new ArrayList&amp;lt;Object&amp;gt;();
     providers.add( new JacksonJaxbJsonProvider() );
   
     WebClient client = WebClient.create(&quot;http://localhost:8080/poc_restapi_cxf/api&quot;, providers);
     client = client.accept(&quot;application/json&quot;).type(&quot;application/json&quot;).path(&quot;/order&quot;).query(&quot;id&quot;, &quot;1&quot;);
   
     Order order = client.get(Order.class);
     System.out.println(&quot;Order:&quot; + order.getCustomerName());
  
    }
}&lt;/span&gt;&lt;/pre&gt;
With this very simple client program, the response to your request (JSON) is automatically unmarshalled to a Java object.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
If you are using &lt;a href=&quot;http://maven.apache.org/&quot;&gt;maven&lt;/a&gt;, make sure you have the correct dependencies in your &lt;a href=&quot;http://maven.apache.org/pom.html&quot;&gt;pom file&lt;/a&gt;:&lt;/div&gt;
&lt;pre&gt;    &lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;dependency&amp;gt;
       &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
       &amp;lt;artifactId&amp;gt;cxf-rt-transports-http&amp;lt;/artifactId&amp;gt;
       &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
       &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
   
    &amp;lt;dependency&amp;gt;
       &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
       &amp;lt;artifactId&amp;gt;cxf-rt-rs-extension-search&amp;lt;/artifactId&amp;gt;
       &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
       &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
     
    &amp;lt;dependency&amp;gt;
       &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
       &amp;lt;artifactId&amp;gt;cxf-rt-rs-extension-providers&amp;lt;/artifactId&amp;gt;
       &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
       &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
      
    &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;com.fasterxml.jackson.jaxrs&amp;lt;/groupId&amp;gt;
       &amp;lt;artifactId&amp;gt;jackson-jaxrs-json-provider&amp;lt;/artifactId&amp;gt;
       &amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/8615856532511674109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/8615856532511674109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/8615856532511674109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/8615856532511674109'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/06/how-to-create-simple-cxf-based-jax-rs.html' title='How to create a simple CXF based JAX-RS Client'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-390938892334019710</id><published>2012-05-29T16:01:00.000-07:00</published><updated>2012-06-13T09:35:10.377-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="CXF"/><category scheme="http://www.blogger.com/atom/ns#" term="deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="JBOSS"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring"/><title type='text'>REST API with CXF and Spring</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp;

&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNlb07dvEISPkXd-zGVIdLTdRSELZ3s6Vz7KjzVnqv6IxsroaTozTJNWaZOaH8CVj-JyiOr6f_8Pf6vf_Z94fSEfJWD69WTAQpOmSE8IGCCFMzj4Wuxec0v-g7zbcysJqNWkkDUVQpiyQ9/s1600/project_structure.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNlb07dvEISPkXd-zGVIdLTdRSELZ3s6Vz7KjzVnqv6IxsroaTozTJNWaZOaH8CVj-JyiOr6f_8Pf6vf_Z94fSEfJWD69WTAQpOmSE8IGCCFMzj4Wuxec0v-g7zbcysJqNWkkDUVQpiyQ9/s400/project_structure.png&quot; width=&quot;353&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
For the past couple of years, I have developed REST APIs using &lt;a href=&quot;http://www.jboss.org/resteasy&quot;&gt;RESTEasy&lt;/a&gt; since the&lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt; target deployment platform was JBOSS&lt;/a&gt;. More recently I have considered using &lt;a href=&quot;http://cxf.apache.org/&quot;&gt;Apache CXF&lt;/a&gt; instead. One reason is that we wanted to use a single technology to create web services (we are using &lt;a href=&quot;http://en.wikipedia.org/wiki/Cxf&quot;&gt;CXF&lt;/a&gt; for our &lt;a href=&quot;http://en.wikipedia.org/wiki/SOAP&quot;&gt;SOAP&lt;/a&gt; based web services).&lt;br /&gt;
&lt;br /&gt;
In this article I will show how to create a very simple REST web service using CXF and &lt;a href=&quot;http://en.wikipedia.org/wiki/Spring_Framework&quot;&gt;Spring&lt;/a&gt; and describe how to deploy it on &lt;a href=&quot;http://www.jboss.org/as7&quot;&gt;JBOSS AS 7.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I have found several tutorials describing how to create CXF based REST web services but none with Spring&amp;nbsp; and working when deployed on JBOSS AS 7.0. Part of the proof of concept (POC) code sample I am describing in this article come from &lt;a href=&quot;http://java.dzone.com/users/bhandari4u&quot;&gt;                            &lt;b id=&quot;authorname&quot;&gt;Sandeep Bhandari&lt;/b&gt;&lt;/a&gt; article &quot;&lt;i&gt;&lt;a href=&quot;http://java.dzone.com/articles/rest-web-service-using-cxf&quot;&gt;REST Web Service Using CXF - Beginner&#39;s Tutorial&lt;/a&gt;&lt;/i&gt;&quot; which I enriched with Spring integration and deployment configuration for JBOSS AS 7.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In my POC example, there is not much differences for the POJO classes representing the order resources (I made them a little bit simple):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;class Order &lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre style=&quot;color: #38761d;&quot;&gt;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = &quot;order&quot;)
public class Order {
 
    private String itemName;
    private int quantity;
    private String customerName;
    
    @XmlElement
    public String getItemName() { return itemName; }
    
    public void setItemName(String itemName) { this.itemName = itemName; }
    
    @XmlElement
    public int getQuantity() { return quantity; }
    
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
    
    @XmlElement
    public String getCustomerName() { return customerName; }
    
    public void setCustomerName(String customerName) { this.customerName = customerName; }
}&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;u&gt;&lt;b&gt;class OrderList &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = &quot;OrderList&quot;)
public class OrderList {

    List&lt;/span&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; orders;
   
    @XmlElement(name = &quot;order&quot;)
    public List&lt;/span&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; getOrder() {
        if (orders == null) {
            orders = new ArrayList&lt;/span&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;();
        }
        return this.orders;
    }
}&lt;/span&gt;&lt;/order&gt;&lt;/order&gt;&lt;/order&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;order&gt;&lt;order&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/order&gt;&lt;/order&gt;&lt;/order&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;b&gt;&lt;u&gt;The web.xml file specify only the CXF servlet&lt;/u&gt;&lt;/b&gt;:&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;web-app&amp;gt;

    &amp;lt;display-name&amp;gt;Archetype Created Web Application&amp;lt;/display-name&amp;gt;
   
 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;CXFServlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;
   org.apache.cxf.transport.servlet.CXFServlet
  &amp;lt;/servlet-class&amp;gt;
   &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt; 
 &amp;lt;/servlet&amp;gt;

 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;CXFServlet&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;/api/*&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;
 
&amp;lt;/web-app&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;u&gt;&lt;b&gt;The file cxf-servlet.xml specify the service bean and the JAX-RS providers&lt;/b&gt;&lt;/u&gt;:&lt;/div&gt;
&lt;pre&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;beans 
    xmlns=&quot;http://www.springframework.org/schema/beans&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; 
 xmlns:beans=&#39;http://www.springframework.org/schema/beans&#39;
 xmlns:jaxrs=&quot;http://cxf.apache.org/jaxrs&quot;
 xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
 xsi:schemaLocation=&quot;
 http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://cxf.apache.org/jaxrs 
 http://cxf.apache.org/schemas/jaxrs.xsd
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context.xsd&quot;&amp;gt;
  

  &amp;lt;jaxrs:server id=&quot;restContainer&quot; address=&quot;/&quot; &amp;gt;
  
            &amp;lt;jaxrs:serviceBeans&amp;gt;
        &amp;lt;ref bean=&quot;simpleService&quot; /&amp;gt;
     &amp;lt;/jaxrs:serviceBeans&amp;gt;  
     
           &amp;lt;jaxrs:providers&amp;gt;
               &amp;lt;ref bean=&quot;jaxbProvider&quot;/&amp;gt;
               &amp;lt;ref bean=&quot;jsonProvider&quot;/&amp;gt; 
           &amp;lt;/jaxrs:providers&amp;gt;
      
        &amp;lt;/jaxrs:server&amp;gt;
     
     &amp;lt;bean id=&quot;simpleService&quot; class=&quot;com.acme.poc.restapi.cxf.service.SimpleServiceImpl&quot; /&amp;gt;
  &amp;lt;bean id=&quot;jaxbProvider&quot; class=&quot;org.apache.cxf.jaxrs.provider.JAXBElementProvider&quot;/&amp;gt;  
  &amp;lt;bean id=&quot;jsonProvider&quot; class=&quot;org.codehaus.jackson.jaxrs.JacksonJsonProvider&quot; /&amp;gt;
  
&amp;lt;/beans&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;u&gt;&lt;b&gt;The SimpleService interface:&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;  

@Path(&quot;/order/&quot;)
public interface SimpleService {
 @GET
 @Produces(&quot;application/xml&quot;)
 @Path(&quot;{orderId}&quot;)
 public Order getOrderXml(@PathParam (&quot;orderId&quot;) int id);
 
 @GET
 @Produces(&quot;application/json&quot;) 
 @Path(&quot;/&quot;)
 public Order getOrderJson(@QueryParam(&quot;id&quot;) @DefaultValue(&quot;-1&quot;) String strId);
 
 @GET
 @Produces(&quot;application/xml&quot;)
 @Path(&quot;all&quot;)
 public OrderList getAllOrders();
}&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;u&gt;&lt;b&gt;The SimpleServiceImpl class:&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;import java.util.ArrayList;
import java.util.List;

public class SimpleServiceImpl implements SimpleService {
 
 List&lt;/span&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; list = new ArrayList&lt;/span&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;();
 
 public SimpleServiceImpl () {
         Order order = new Order();
         order.setItemName(&quot;Veggie Pizza&quot;);
         order.setQuantity(9);
         order.setCustomerName(&quot;OptumInsight&quot;);
         list.add(order);
         
         order = new Order();
         order.setItemName(&quot;Green Salad&quot;);
         order.setQuantity(2);
         order.setCustomerName(&quot;OptumInsight&quot;);
         list.add(order);
  }
 
 @Override
    public Order getOrderXml(int id) {
   return getOrder(id);
    }
 
 @Override
 public Order getOrderJson(String strId) {
  int id = Integer.valueOf(strId);
  return getOrder(id);
 }
 
 @Override
 public OrderList getAllOrders() {
  OrderList fullList = new OrderList();
        for(Order order : list) {
         fullList.getOrder().add(order);
        }
        return fullList;
 }
 
 // Common method returning an Order POJO
 public Order getOrder(int id) {
  if ((id &amp;gt; 0) &amp;amp;&amp;amp; (id &amp;lt;= list.size())) {
   return list.get(id - 1);
  }
         else
          return null;
 }
}&lt;/span&gt;&lt;/order&gt;&lt;/order&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;order&gt;&lt;order&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;/order&gt;&lt;/order&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;b&gt;&lt;u&gt;Finally the pom.xml file for maven:&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;

  &amp;lt;groupId&amp;gt;com.acme.poc.restapi&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;poc_restapi_cxf_client&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;

  &amp;lt;name&amp;gt;poc_restapi_cxf_client&amp;lt;/name&amp;gt;
  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;
  
    &amp;lt;properties&amp;gt;
      &amp;lt;spring.version&amp;gt;3.1.0.RELEASE&amp;lt;/spring.version&amp;gt;
      &amp;lt;cxf.version&amp;gt;2.6.0&amp;lt;/cxf.version&amp;gt;
      &amp;lt;jackson.version&amp;gt;1.9.7&amp;lt;/jackson.version&amp;gt;
      &amp;lt;junit.version&amp;gt;4.8.1&amp;lt;/junit.version&amp;gt;    
   &amp;lt;/properties&amp;gt;
  
   &amp;lt;dependencies&amp;gt;
   
     &amp;lt;dependency&amp;gt;
        &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;cxf-rt-transports-http&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
   &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
     &amp;lt;/dependency&amp;gt;
   
     &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;cxf-rt-rs-extension-search&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
    &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
     &amp;lt;/dependency&amp;gt;
     
     &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.cxf&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;cxf-rt-rs-extension-providers&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;${cxf.version}&amp;lt;/version&amp;gt;
    &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
     &amp;lt;/dependency&amp;gt;
  
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;${junit.version}&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
    
  &amp;lt;/dependencies&amp;gt;
  
  &amp;lt;build&amp;gt;
    &amp;lt;finalName&amp;gt;poc_restapi_cxf_client&amp;lt;/finalName&amp;gt;
     &amp;lt;plugins&amp;gt;
         &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;2.3.2&amp;lt;/version&amp;gt;
            &amp;lt;configuration&amp;gt;
               &amp;lt;source&amp;gt;1.6&amp;lt;/source&amp;gt;
               &amp;lt;target&amp;gt;1.6&amp;lt;/target&amp;gt;
               &amp;lt;encoding&amp;gt;UTF-8&amp;lt;/encoding&amp;gt;
            &amp;lt;/configuration&amp;gt;
         &amp;lt;/plugin&amp;gt;
    &amp;lt;/plugins&amp;gt;
  &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/span&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;The file jboss-deployment-structure.xml is used for JBOSS deployment:&amp;nbsp;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;pre style=&quot;color: #38761d;&quot;&gt;&amp;lt;jboss-deployment-structure&amp;gt;
 &amp;lt;deployment&amp;gt;
  &amp;lt;dependencies&amp;gt;
   &amp;lt;module name=&quot;org.apache.cxf&quot; services=&quot;import&quot;&amp;gt;
    &amp;lt;imports&amp;gt;
     &amp;lt;include path=&quot;**&quot; /&amp;gt;
    &amp;lt;/imports&amp;gt;
   &amp;lt;/module&amp;gt;
  &amp;lt;/dependencies&amp;gt;
 &amp;lt;/deployment&amp;gt;
&amp;lt;/jboss-deployment-structure&amp;gt;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
&lt;u&gt;&lt;b&gt;In addition to this, before you deploy on JBOSS, you need to make some modifications on your web application server&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;
&lt;br /&gt;
1) Download the latest edition of CXF (2.6.0) and placed just one jar from the distribution 
   into the folder &lt;jboss-7&gt;/modules/org/apache/cxf/main/cxf-2.6.0.jar
   (This contains all of the CXF codebase, except the dependencies) &lt;/jboss-7&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
2) Open &lt;jboss-7&gt;/modules/org/apache/cxf/main/module.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp; Remove all resource elements (the JARs)&lt;br /&gt;&amp;nbsp;&amp;nbsp; Add a new resource element similar to the deleted ones with cxf-2.6.0.jar being the only Jar referenced&lt;br /&gt;&amp;nbsp;&amp;nbsp; Add dependency to module named: javax.ws.rs.api : &lt;module name=&quot;javax.ws.rs.api&quot;&gt;&lt;/module&gt;&lt;/jboss-7&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;module xmlns=&quot;urn:jboss:module:1.1&quot; name=&quot;org.apache.cxf&quot;&amp;gt;
   &amp;lt;resources&amp;gt;
        &amp;lt;resource-root path=&quot;cxf-2.6.0.jar&quot;/&amp;gt;
        &amp;lt;!-- 
        &amp;lt;resource-root path=&quot;cxf-api-2.4.4.jar&quot;/&amp;gt;
          ...
        &amp;lt;resource-root path=&quot;cxf-xjc-ts-2.4.0.jar&quot;/&amp;gt; 
        --&amp;gt;
    &amp;lt;/resources&amp;gt;
     &amp;lt;dependencies&amp;gt;
        &amp;lt;module name=&quot;asm.asm&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.annotation.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.jms.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.jws.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.mail.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.resource.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.servlet.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.ws.rs.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.bind.api&quot; services=&quot;import&quot;/&amp;gt;
        &amp;lt;module name=&quot;com.sun.xml.bind&quot; services=&quot;import&quot;/&amp;gt;
        &amp;lt;module name=&quot;javax.wsdl4j.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.soap.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.stream.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.ws.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.commons.lang&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.neethi&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.velocity&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.xml-resolver&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.ws.xmlschema&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.ws.security&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.santuario.xmlsec&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.springframework.spring&quot; optional=&quot;true&quot;/&amp;gt;
    &amp;lt;/dependencies&amp;gt;
&amp;lt;/module&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;/div&gt;
3) Create folder &lt;jboss-7&gt;/modules/org/springframework/spring/main/&lt;br /&gt;&amp;nbsp;&amp;nbsp; Create module.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp; Copy all the text from the CXF module.xml into this new one&lt;br /&gt;&amp;nbsp;&amp;nbsp; Erase the last dependency &lt;module name=&quot;org.springframework.spring&quot; optional=&quot;true&quot;&gt; (itself)&lt;br /&gt;&amp;nbsp;&amp;nbsp; Erase the resource against cxf JAR&amp;nbsp; &lt;resource-root path=&quot;cxf-2.6.0.jar&quot;&gt; (because this is the copy for spring)&lt;br /&gt;&amp;nbsp;&amp;nbsp; Download latest Spring framework, and copy all the Spring jars into the folder&lt;br /&gt;&amp;nbsp;&amp;nbsp; Add all of these JARs to the module.xml inside &lt;resources&gt; tag.&lt;br /&gt;&amp;nbsp;&amp;nbsp; Add dependency to module named: org.apache.commons.logging&amp;nbsp; &lt;module name=&quot;org.apache.commons.logging&quot;&gt;&lt;/module&gt;&lt;/resources&gt;&lt;/resource-root&gt;&lt;/module&gt;&lt;/jboss-7&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;module xmlns=&quot;urn:jboss:module:1.1&quot; name=&quot;org.springframework.spring&quot;&amp;gt;
    &amp;lt;resources&amp;gt;
  &amp;lt;resource-root path=&quot;spring-aop-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-asm-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-beans-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-context-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-core-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-expression-3.1.0.RELEASE.jar&quot; /&amp;gt;
  &amp;lt;resource-root path=&quot;spring-web-3.1.0.RELEASE.jar&quot; /&amp;gt;
        &amp;lt;!-- Insert resources here --&amp;gt;
    &amp;lt;/resources&amp;gt;
    &amp;lt;dependencies&amp;gt;
        &amp;lt;module name=&quot;asm.asm&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.annotation.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.jms.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.jws.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.mail.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.resource.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.servlet.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.bind.api&quot; services=&quot;import&quot;/&amp;gt;
        &amp;lt;module name=&quot;com.sun.xml.bind&quot; services=&quot;import&quot;/&amp;gt;
        &amp;lt;module name=&quot;javax.wsdl4j.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.soap.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.stream.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;javax.xml.ws.api&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.commons.lang&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.commons.logging&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.neethi&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.velocity&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.xml-resolver&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.ws.xmlschema&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.ws.security&quot; /&amp;gt;
        &amp;lt;module name=&quot;org.apache.santuario.xmlsec&quot; /&amp;gt;
    &amp;lt;/dependencies&amp;gt;
&amp;lt;/module&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/390938892334019710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/390938892334019710' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/390938892334019710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/390938892334019710'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/05/rest-api-with-cxf-and-spring.html' title='REST API with CXF and Spring'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNlb07dvEISPkXd-zGVIdLTdRSELZ3s6Vz7KjzVnqv6IxsroaTozTJNWaZOaH8CVj-JyiOr6f_8Pf6vf_Z94fSEfJWD69WTAQpOmSE8IGCCFMzj4Wuxec0v-g7zbcysJqNWkkDUVQpiyQ9/s72-c/project_structure.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-6862599832324735458</id><published>2012-04-19T16:31:00.009-07:00</published><updated>2013-04-24T21:40:02.151-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="CCD"/><category scheme="http://www.blogger.com/atom/ns#" term="HL7"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="MAVEN"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="saxon"/><category scheme="http://www.blogger.com/atom/ns#" term="war"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><category scheme="http://www.blogger.com/atom/ns#" term="XSL"/><category scheme="http://www.blogger.com/atom/ns#" term="XSLT"/><title type='text'>java XSLT processing with Saxon</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Recently, I was looking for an efficient way to reduce the size of XML based clinical documents (&lt;a href=&quot;http://en.wikipedia.org/wiki/Continuity_of_Care_Document&quot;&gt;CCD&lt;/a&gt;) that I am sending from a &lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt;java REST API&lt;/a&gt; to mobile devices. These &lt;a href=&quot;http://wiki.hitsp.org/docs/C32/C32-1.html&quot;&gt;healthcare HL7 XML documents&lt;/a&gt; contain textual narrative blocks that are not used by the &lt;a href=&quot;http://fandry.blogspot.com/2011/02/rest-style-architecture-and-development.html&quot;&gt;applications residing on the mobile devices&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
On solution was to use &lt;a href=&quot;http://saxon.sourceforge.net/&quot;&gt;Saxon&lt;/a&gt;, an open source &lt;a href=&quot;http://en.wikipedia.org/wiki/XSLT&quot;&gt;XSLT&lt;/a&gt; processor in conjunction with a transformation style sheet to strip the &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuity_of_Care_Document&quot;&gt;Continuity of Care Documents&lt;/a&gt; of their narrative blocks.&lt;br /&gt;
&lt;br /&gt;
In a CCD, &lt;a href=&quot;http://wiki.hitsp.org/docs/C32/C32-1.html&quot;&gt;each section&lt;/a&gt; under &lt;b style=&quot;color: black;&quot;&gt;ClinicalDocument/component/structuredBody/component&lt;/b&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; &lt;/span&gt;can have a text section that usually contains a narrative block similar to HTML content that can typically add 30% or more to the size of the &lt;a href=&quot;http://wiki.hitsp.org/docs/C83/C83-1.html&quot;&gt;CCD document&lt;/a&gt;: &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2G0DrcxJ8LxAkLlYLnjZqWqspzzn9b_0j4v4rFCGp4XZrIitA5h99Gg4FmNgrYMyGgqpN6LOpXgUKkxK-GSv6rb9GtDocTovZOtixAEXi__4OhBiTdiY2llJwOmQBeKS3TtH7z1MCstWS/s1600/CCD_for_saxon.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2G0DrcxJ8LxAkLlYLnjZqWqspzzn9b_0j4v4rFCGp4XZrIitA5h99Gg4FmNgrYMyGgqpN6LOpXgUKkxK-GSv6rb9GtDocTovZOtixAEXi__4OhBiTdiY2llJwOmQBeKS3TtH7z1MCstWS/s640/CCD_for_saxon.png&quot; width=&quot;515&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This has the advantage to avoid creating a full DOM representation, and is more robust and flexible than an event based sequential &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_API_for_XML&quot;&gt;SAX processor&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The first step is to create a &lt;a href=&quot;http://en.wikipedia.org/wiki/Xslt&quot;&gt;XSLT stylesheet&lt;/a&gt; that will transform (in my case strip the text sections) from the XML document.&lt;br /&gt;
In my case, since I wanted to remove all text sections, I was able to use an &lt;a href=&quot;http://en.wikipedia.org/wiki/Identity_transform&quot;&gt;identity transform &lt;/a&gt;mechanism that I modified to strip the text sections (uses the hl7 namespace):&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;xsl:stylesheet xmlns:xsl=&#39;http://www.w3.org/1999/XSL/Transform&#39; version=&#39;2.0&#39;
xmlns:hl7=&quot;urn:hl7-org:v3&quot;&amp;gt;

&amp;lt;xsl:output indent=&quot;no&quot;/&amp;gt;
&amp;lt;xsl:strip-space elements=&quot;*&quot;/&amp;gt;

&amp;lt;!-- identity template --&amp;gt;
&amp;lt;xsl:template match=&quot;@*|node()&quot;&amp;gt;
&amp;lt;xsl:copy&amp;gt;
&amp;lt;xsl:apply-templates select=&quot;@*|node()&quot;/&amp;gt;
&amp;lt;/xsl:copy&amp;gt;
&amp;lt;/xsl:template&amp;gt;

&amp;lt;!--  remove descriptive sections --&amp;gt;
&amp;lt;xsl:template match=&quot;hl7:text&quot;/&amp;gt;  

&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Then I placed this file (I named it &lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;ccd_no_text_sections.xsl&lt;/span&gt;&lt;/b&gt;)&amp;nbsp; under the &lt;b&gt;/src/main/resources&lt;/b&gt; folder.&lt;br /&gt;
&lt;br /&gt;
To use this XSLT stylesheet with Saxon, you need to use one of the &lt;a href=&quot;http://saxon.sourceforge.net/&quot;&gt;Saxon Java libaries&lt;/a&gt;.&lt;a href=&quot;http://saxon.sourceforge.net/&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
If you using maven, for example, just add the dependencies to your pom file based on the version you want to use:&lt;/div&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;net.sf.saxon&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;saxon&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;9.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;net.sf.saxon&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;saxon-dom&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;9.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
or for the latest free version:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;net.sf.saxon&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;Saxon-HE&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;9.4&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Then you need to create a transformer and call your style sheet for the transformation.&lt;br /&gt;
In my case, since I was planning other transformations, I decided to cash the XSLT transformer into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Hashmap&quot;&gt;HashTable&lt;/a&gt; as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XSLTProcessor {

 private static final HashMap&amp;lt;String,Transformer&amp;gt; TRANSFORMER_CACHE = new HashMap&amp;lt;String,Transformer&amp;gt;();

 final static String CCD_NO_TEXT_SECTIONS = &quot;/ccd_no_text_sections.xsl&quot;;
  
 private XSLTProcessor() {
   // no instantiation
 }

 private static Transformer getCCDTransformer() throws TransformerConfigurationException {

  Transformer transformer = TRANSFORMER_CACHE.get(CCD_NO_TEXT_SECTIONS);
  if (transformer == null) { 
   TransformerFactory tsf = TransformerFactory.newInstance();
         InputStream is = XSLTProcessor.class.getResourceAsStream(CCD_NO_TEXT_SECTIONS);
   transformer = tsf.newTransformer(new StreamSource(is));
   return transformer;
  }
  return transformer;
 }
 
 public static String stripTextSections(final String xmlString) throws TransformerConfigurationException,
        TransformerException, 
        TransformerFactoryConfigurationError {

        final StringReader xmlReader = new StringReader(xmlString);
        final StringWriter xmlWriter = new StringWriter();
        final Transformer ccdTransformer = getCCDTransformer();
        ccdTransformer.transform(new StreamSource(xmlReader),
            new StreamResult(xmlWriter));
        
        return xmlWriter.toString();
 }
}&lt;/span&gt;

&lt;/pre&gt;
&lt;br /&gt;
In this way, you can easily add new transformers if needed and refer to them by their stylesheet name located under the resource folder.&lt;br /&gt;
In addition to this, the transformer is created only once and always available for a transformation.&lt;br /&gt;
&lt;br /&gt;
The transformation can be called directly on the document as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #38761d;&quot;&gt;try {
    String new_ccd = XSLTProcessor.stripTextSections(ccd);
}
catch (TransformerConfigurationException e) {
    log.error(&quot;TransformerConfigurationException&quot;+e);
}
catch (TransformerException e) {
    log.error(&quot;TransformerException&quot;+e);
}
catch (TransformerFactoryConfigurationError e) {
    log.error(&quot;TransformerFactoryConfigurationError&quot;+e);
}
&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/6862599832324735458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/6862599832324735458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6862599832324735458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6862599832324735458'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/04/java-xslt-processing-with-saxon.html' title='java XSLT processing with Saxon'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2G0DrcxJ8LxAkLlYLnjZqWqspzzn9b_0j4v4rFCGp4XZrIitA5h99Gg4FmNgrYMyGgqpN6LOpXgUKkxK-GSv6rb9GtDocTovZOtixAEXi__4OhBiTdiY2llJwOmQBeKS3TtH7z1MCstWS/s72-c/CCD_for_saxon.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-4985197996472124674</id><published>2012-04-02T11:03:00.005-07:00</published><updated>2012-04-02T15:06:23.255-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="auditing"/><category scheme="http://www.blogger.com/atom/ns#" term="Interceptors"/><category scheme="http://www.blogger.com/atom/ns#" term="JBOSS"/><category scheme="http://www.blogger.com/atom/ns#" term="log"/><category scheme="http://www.blogger.com/atom/ns#" term="pre-processor"/><category scheme="http://www.blogger.com/atom/ns#" term="Rest API"/><category scheme="http://www.blogger.com/atom/ns#" term="RESTEasy"/><category scheme="http://www.blogger.com/atom/ns#" term="resteasy-jaxb-provider"/><category scheme="http://www.blogger.com/atom/ns#" term="resteasy-jaxrs"/><category scheme="http://www.blogger.com/atom/ns#" term="web.xml"/><title type='text'>RESTEasy Interceptors</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
RESTEasy can intercept &lt;a href=&quot;http://en.wikipedia.org/wiki/JAX-RS&quot;&gt;JAX-RS&lt;/a&gt; invocations and route them through listener-like objects called &lt;a href=&quot;http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Web_Platform/5/html/RESTEasy_Reference_Guide/Interceptors.html&quot;&gt;interceptors&lt;/a&gt;. There are four interception points on the server side:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;wrapping around &lt;b&gt;MessageBodyWriter&lt;/b&gt; invocations&lt;/li&gt;
&lt;li&gt;wrapping around &lt;b&gt;MessageBodyReader&lt;/b&gt; invocations&lt;/li&gt;
&lt;li&gt;through &lt;b&gt;pre-processors&lt;/b&gt;, which intercept the incoming request before unmarshalling occurs&lt;/li&gt;
&lt;li&gt;through &lt;b&gt;post-processors&lt;/b&gt;, which are invoked immediately after the JAX-RS method finishes&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;An interceptor can be very useful to implement crosscutting concerns such as logging and security. Although interceptors are not as powerful as &lt;a href=&quot;http://en.wikipedia.org/wiki/Aspect_oriented_programming&quot;&gt;Aspect Oriented Programming&lt;/a&gt; (AOP) - (e.g. no type-safety or debugging) , they still offer a quick way to create more compact and maintainable code.&lt;br /&gt;
&lt;br /&gt;
In this article I will describe how to use RESTEasy interceptors to log incoming requests into a REST API.&lt;br /&gt;
&lt;br /&gt;
I am currently using &lt;a href=&quot;http://www.jboss.org/resteasy&quot;&gt;RESTEasy&lt;/a&gt; to expose &lt;a href=&quot;http://fandry.blogspot.com/2011/02/rest-style-architecture-and-development.html&quot;&gt;HealthCare web services&lt;/a&gt; for consumption by mobiles applications, and there is a need to log transactions for auditing purpose, including for &lt;a href=&quot;http://en.wikipedia.org/wiki/HIPAA&quot;&gt;HIPAA&lt;/a&gt; compliance.&lt;br /&gt;
&lt;br /&gt;
The first step is to specify in your &lt;b&gt;web.xml&lt;/b&gt; file, that you are going to use a new interceptor&amp;nbsp; - (e.g. named &lt;b&gt;LogInterceptor&lt;/b&gt;):&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;web-app&amp;gt;
   ...  
   &amp;lt;context-param&amp;gt;
      &amp;lt;param-name&amp;gt;resteasy.providers&amp;lt;/param-name&amp;gt;
      &amp;lt;param-value&amp;gt;com.acme.api.rest.service.LogInterceptor&amp;lt;/param-value&amp;gt;
   &amp;lt;/context-param&amp;gt;
   ...
&amp;lt;/web-app&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Then you create the corresponding java class for &lt;b&gt;LogInterceptor:&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;package com.acme.api.rest.service;
  
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.WebApplicationException;

 
import org.jboss.resteasy.annotations.interception.ServerInterceptor;
import org.jboss.resteasy.core.ResourceMethod;
import org.jboss.resteasy.core.ServerResponse;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.interception.PreProcessInterceptor;
import org.jboss.resteasy.spi.Failure;

...
 
@Provider
@ServerInterceptor
public class LogInterceptor implements PreProcessInterceptor {
 
 // An handler to the Transaction log
 private static final Logger translog = Logger.getLogger(JNDIMessageLoggingHandler.class);

 // Getting the request as a context
 @Context HttpServletRequest request;

 @Override
 public ServerResponse preProcess(HttpRequest arg0, ResourceMethod method) throws Failure, WebApplicationException {
  final TransactionLogEntry transactionLogEntry = new TransactionLogEntry(Long.toString(Thread.currentThread().getId()),
                         System.currentTimeMillis(), 
                         getClientIP(request), 
                         request.getRequestURL().toString());
      translog.info(transactionLogEntry);
 }  
 
}&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
In this example, the &lt;b&gt;TransactionLogEntry &lt;/b&gt;constructor takes :&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;a transaction ID&lt;/li&gt;
&lt;li&gt;a timestamp&lt;/li&gt;
&lt;li&gt;the client that initiated the request&amp;nbsp; (e.g. &lt;span style=&quot;color: #38761d;&quot;&gt;request.getRemoteAddr()+&quot;:&quot;+request.getRemotePort()&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;the request URL&lt;/li&gt;
&lt;/ul&gt;but you can also log additional information such as the body content of POST requests (storing &lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt;XML or JSON content&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/4985197996472124674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/4985197996472124674' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/4985197996472124674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/4985197996472124674'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/04/resteasy-interceptors.html' title='RESTEasy Interceptors'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-6992388306486309916</id><published>2012-03-23T11:32:00.007-07:00</published><updated>2012-03-23T11:53:37.751-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DELETE"/><category scheme="http://www.blogger.com/atom/ns#" term="Domino"/><category scheme="http://www.blogger.com/atom/ns#" term="filter"/><category scheme="http://www.blogger.com/atom/ns#" term="GET"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP 405"/><category scheme="http://www.blogger.com/atom/ns#" term="POST"/><category scheme="http://www.blogger.com/atom/ns#" term="proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="PUT"/><category scheme="http://www.blogger.com/atom/ns#" term="REASTEasy"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="X-HTTP Method override"/><title type='text'>X-HTTP header method override and REST APIs</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZUBYT1CxMpZBttbeT1qjBOeWppHckrL1eCDUZ8wupbHnKBWIbq5W7Xl45mQyCwhGGXsIUmigBNSzAi5CvK4ETOs8srEYYGXIWCGEG850wBo8ue8JsH1xHC5Y3aIxRNohmxZJI9k4IE3Yx/s1600/header.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZUBYT1CxMpZBttbeT1qjBOeWppHckrL1eCDUZ8wupbHnKBWIbq5W7Xl45mQyCwhGGXsIUmigBNSzAi5CvK4ETOs8srEYYGXIWCGEG850wBo8ue8JsH1xHC5Y3aIxRNohmxZJI9k4IE3Yx/s320/header.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
In a previous article, I was explaining how to &lt;a href=&quot;http://www.fandry.blogspot.com/2011/12/how-to-extract-http-header-fields-in.html&quot;&gt;extract HTTP headers&lt;/a&gt;. In this one, I will explain why the use of specific custom HTTP headers such as &lt;b&gt;X-HTTP methods override&lt;/b&gt; can be very handy while developing and promoting a REST API.&lt;br /&gt;
&lt;br /&gt;
When deploying &lt;a href=&quot;http://en.wikipedia.org/wiki/Restful&quot;&gt;REST&lt;/a&gt; API based web services, you may encounter access limitations on both the &lt;b&gt;server&lt;/b&gt; and &lt;b&gt;client &lt;/b&gt;sides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;1) X-HTTP methods override and server side&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
On the &lt;b&gt;server side&lt;/b&gt;, the access to your &lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt;REST based&amp;nbsp; web application (I am using JBOSS)&lt;/a&gt; might be done via a proxy web server that does not support certain HTTP operations such as DELETE or PUT for security reasons.&lt;br /&gt;
&lt;br /&gt;
For example if you are using Lotus Domino as redirector for your HTTP requests, be aware that by default Lotus Domino &lt;a href=&quot;http://www-10.lotus.com/ldd/quickplace.nsf/4d21f120f5a2cf4985256a150076d0d5/0f8e784c80c663cd852575530063c820?OpenDocument&quot;&gt;does not enable PUT and DELETE to go through&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Such requests will lead to &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html&quot;&gt;HTTP 405 error&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black;&quot;&gt;&lt;b&gt;Http Status Code: 405&lt;br /&gt;
&lt;br /&gt;
Reason: Request method is not allowed by the server&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
By the way, if you really intend to allow PUT and DELETE on your Domino proxy web server, you need to add the following line to your &lt;b&gt;notes.ini&lt;/b&gt; file:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;HTTPEnableMethods=PUT,DELETE&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
However if you really need to have your proxy server filtering &lt;b&gt;DELETE &lt;/b&gt;and &lt;b&gt;PUT &lt;/b&gt;operations, then you will have to offer these operations via &lt;b&gt;POST &lt;/b&gt;operations and ask your clients to add specific X-HTTP method override field in the header of their requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;2) X-HTTP methods override and client side&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The application consuming your web service might also have some constraints, for example&lt;a href=&quot;http://www.endurasoft.com/Blog/post/X-HTTP-Method-Override.aspx&quot;&gt; restricting forms to only use GET or POST&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For these reasons, web infrastructure and solutions providers have proposed to use customized HTTP header fields:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;X-HTTP-Method&lt;/b&gt; (&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/dd541471%28v=prot.10%29.aspx&quot;&gt;Microsoft&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;X-HTTP-Method-Override&lt;/b&gt; (&lt;a href=&quot;http://code.google.com/apis/gdata/docs/2.0/basics.html#UpdatingEntry&quot;&gt;Google/GData&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;X-METHOD-OVERRIDE&lt;/b&gt; (&lt;a href=&quot;http://publib.boulder.ibm.com/infocenter/dmndhelp/v7r0mx/index.jsp?topic=%2Fcom.ibm.bspace.help.api.rest.doc%2Frest%2Fmonitor%2Frest_bpm_monitor_alerts_dashboardalerts_post_x-method-override%3Dput.htm&quot;&gt;IBM&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;If you want to support all of these variations, I would suggest to implement them as case insensitive in your REST API.&lt;br /&gt;
&lt;br /&gt;
I personally use &lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt;JBoss RestEasy&lt;/a&gt; to develop a REST API for &lt;a href=&quot;http://fandry.blogspot.com/2011/02/rest-style-architecture-and-development.html&quot;&gt;mobile health care applications&lt;/a&gt;, and it was quite straightforward to add the additional level of flexibility to my existing PUT and POST operations.&lt;br /&gt;
&lt;br /&gt;
Note that if you want to use these methods to enforce either a PUT or a DELETE method, be aware that the &lt;a href=&quot;http://www.ietf.org/rfc/rfc2616.txt&quot;&gt;RFC 2616 - HTTP 1.1 section 9.1.1&lt;/a&gt; describes the &lt;b&gt;GET &lt;/b&gt;operation as &lt;b&gt;safe&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;9.1.1 Safe Methods&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Implementors should be aware that the software represents the user in&lt;br /&gt;
&amp;nbsp;&amp;nbsp; their interactions over the Internet, and should be careful to allow&lt;br /&gt;
&amp;nbsp;&amp;nbsp; the user to be aware of any actions they might take which may have an&lt;br /&gt;
&amp;nbsp;&amp;nbsp; unexpected significance to themselves or others.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; In particular, the convention has been established that the GET and&lt;br /&gt;
&amp;nbsp;&amp;nbsp; HEAD methods SHOULD NOT have the significance of taking an action&lt;br /&gt;
&amp;nbsp;&amp;nbsp; other than retrieval. These methods ought to be considered &quot;safe&quot;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; This allows user agents to represent other methods, such as POST, PUT&lt;br /&gt;
&amp;nbsp;&amp;nbsp; and DELETE, in a special way, so that the user is made aware of the&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fact that a possibly unsafe action is being requested.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
In other words, if you are tempted to use a GET to simulate a &lt;b&gt;PUT &lt;/b&gt;or &lt;b&gt;DELETE&lt;/b&gt;, don&#39;t do it.&lt;br /&gt;
Use a &lt;b&gt;POST&lt;/b&gt; instead. Thank you to my colleague Ravi to point this to me! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;X-HTTP methods override and PUT based operations&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If your PUT operation does not have a corresponding &lt;b&gt;DELETE &lt;/b&gt;counter-part,&lt;br /&gt;
you could just use the &lt;b&gt;POST&lt;/b&gt; as a PUT and not even add a &lt;b&gt;X-HHTP-Method&lt;/b&gt; override.&lt;br /&gt;
&lt;br /&gt;
Both POST and PUT requests will end up being bound to the same method:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;b&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;@PUT
 @POST
 @Path(&quot;/users/{userId}/order/{orderNum}&quot;)
 @Produces(&quot;application/json&quot;)
 @GZIP
 public Response putPostUserOrder(@Context HttpServletRequest request, 
               @PathParam(&quot;userId&quot;) String userId,
               @PathParam(&quot;orderNum&quot;) String orderNum)&lt;/span&gt;&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;
If you still need to use a X-HTTP-Method override, what you need to do is to filter those specific POST requests.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;boolean bProceed = true;
if (request.getMethod().compareToIgnoreCase(POST) == 0) {
    String methodOverride = getHttpMethodOverride(request);
    if ((methodOverride == null) || (methodOverride.compareToIgnoreCase(PUT) != 0)) 
        bProceed = false;
}
&lt;/b&gt;&lt;/pre&gt;&lt;div style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;pre style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;private String getHttpMethodOverride(HttpServletRequest request){
    String headerValue = request.getHeader(&quot;x-http-method-override&quot;);
    if (headerValue != null)
      return headerValue;
    else 
      return(request.getHeader(&quot;x-method-override&quot;));  
}&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;
In the example above, I have only implemented two customized X-HTTP headers, but you can add all of them if necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;X-HTTP methods override and DELETE based operations&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For the DELETE operation, even if you don&#39;t have a PUT counter part, it is preferable to use a X-HTTP method override with DELETE to be semantically consistent (a PUT and POST are typically using to add or modify a resource, not removing it).&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;
 @POST
 @Path(&quot;/users/{userId}/order/{orderNum}&quot;)
 @Produces(&quot;application/json&quot;)
 @GZIP
 public Response postDeleteUserOrder(@Context HttpServletRequest request, 
               @PathParam(&quot;userId&quot;) String userId,
               @PathParam(&quot;orderNum&quot;) String orderNum)&lt;/span&gt;&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;boolean bDelete = false;
if (request.getMethod().compareToIgnoreCase(POST) == 0) {
 String methodOverride = getHttpMethodOverride(request);
 if ((methodOverride != null) &amp;&amp; (methodOverride.compareToIgnoreCase(DELETE) == 0)) 
  bDelete = true;
}
&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
Of course, if most likely want to still support the regular DELETE, so you also keep the original binding DELETE method:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;@DELETE
 @Path(&quot;/users/{userId}/order/{orderNum}&quot;)
 @Produces(&quot;application/json&quot;)
 @GZIP
 public Response deleteUserOrder(@Context HttpServletRequest request, 
               @PathParam(&quot;userId&quot;) String userId,
               @PathParam(&quot;orderNum&quot;) String orderNum)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;u&gt;&lt;b&gt;Test harnessing X-HTTP Methods override operations&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can  easily &lt;a href=&quot;http://fandry.blogspot.com/2011/04/how-to-test-harness-rest-web-services.html&quot;&gt;test your REST API with cURL&lt;/a&gt; as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;curl -H &quot;X-HTTP-Method-Override: DELETE&quot; -X POST http://restservice.acme.com/api/users/JJALGHPBIMA/orderNum/e7687673-479d-4d37-8bc0-a3e718aad33f&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Should have the same effect as :&lt;br /&gt;
&lt;div style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;color: #38761d;&quot;&gt;&lt;b&gt;curl -X DELETE http://restservice.acme.com/api/users/JJALGHPBIMA/orderNum/e7687673-479d-4d37-8bc0-a3e718aad33f&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/6992388306486309916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/6992388306486309916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6992388306486309916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/6992388306486309916'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/03/x-http-header-method-override-and-rest.html' title='X-HTTP header method override and REST APIs'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZUBYT1CxMpZBttbeT1qjBOeWppHckrL1eCDUZ8wupbHnKBWIbq5W7Xl45mQyCwhGGXsIUmigBNSzAi5CvK4ETOs8srEYYGXIWCGEG850wBo8ue8JsH1xHC5Y3aIxRNohmxZJI9k4IE3Yx/s72-c/header.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-9009592916526354812</id><published>2012-02-24T15:33:00.007-08:00</published><updated>2012-02-27T07:59:09.207-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configuration section"/><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="MAVEN"/><category scheme="http://www.blogger.com/atom/ns#" term="MAVEN plugin"/><category scheme="http://www.blogger.com/atom/ns#" term="mavenize"/><category scheme="http://www.blogger.com/atom/ns#" term="war"/><category scheme="http://www.blogger.com/atom/ns#" term="web.xml"/><title type='text'>Maven war plugin configuration section and web.xml</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I am sure you have been in the following situation: you want to &lt;a href=&quot;http://maven.apache.org/&quot;&gt;mavenize&lt;/a&gt; a web application project.&lt;br /&gt;
&lt;br /&gt;
For this, you create a basic dynamic web application in &lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;Eclipse&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii1Pe4537_c1GQLT8lgxFBRKkSqJxTBv2ntMnQvwQLcn_3EKZM-uK4J54OUoQkCHceOFmJ6HdmfHdLsG1Z_90hD-DnukoCVYLo9Mlky3vbeWAPBwCl5Dd0p-GcbPdqkMma99vN4-EIBqye/s1600/uitoolkitclient_1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii1Pe4537_c1GQLT8lgxFBRKkSqJxTBv2ntMnQvwQLcn_3EKZM-uK4J54OUoQkCHceOFmJ6HdmfHdLsG1Z_90hD-DnukoCVYLo9Mlky3vbeWAPBwCl5Dd0p-GcbPdqkMma99vN4-EIBqye/s400/uitoolkitclient_1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You then import the application you want to build:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7n7hizTPW2B8MzaYzi2FH2UsS7jYejpkbtJUTQ80pxVT_5x2GEbevWUes5aklMy9tLERgUuUl6MdGi5YieKnvEzH0-H9myxpoa2o-zjJeqabHT9OzlkWGQ04R32Gpqz0fF-jT1jnL6Ws2/s1600/uitoolkitclient_3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;312&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7n7hizTPW2B8MzaYzi2FH2UsS7jYejpkbtJUTQ80pxVT_5x2GEbevWUes5aklMy9tLERgUuUl6MdGi5YieKnvEzH0-H9myxpoa2o-zjJeqabHT9OzlkWGQ04R32Gpqz0fF-jT1jnL6Ws2/s400/uitoolkitclient_3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCwFxmQgCEzZ7J19OXYCrKuJsO637FF2LZEN85RuOQsVlDMkDa9gabAtPy56F_Pkhajvry0GfVjrtl4secaSwfgKbnstOUOSefOXm6zdM0l2IWSHTDgLC6WXYzLhEEhJHpjQYo2YCQdup8/s1600/uitoolkitclient_4.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCwFxmQgCEzZ7J19OXYCrKuJsO637FF2LZEN85RuOQsVlDMkDa9gabAtPy56F_Pkhajvry0GfVjrtl4secaSwfgKbnstOUOSefOXm6zdM0l2IWSHTDgLC6WXYzLhEEhJHpjQYo2YCQdup8/s400/uitoolkitclient_4.png&quot; width=&quot;381&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After the import is done, you create a &lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-pom.html&quot;&gt;pom file&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You then &lt;a href=&quot;http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html&quot;&gt;update your eclipse configuration files&lt;/a&gt; via &#39;&lt;span style=&quot;color: #38761d;&quot;&gt;mvn clean eclipse:eclipse&lt;/span&gt;&#39;&lt;br /&gt;
&lt;br /&gt;
Finally you try to &lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html&quot;&gt;build your web application (war file)&lt;/a&gt; via &#39;&lt;span style=&quot;color: #38761d;&quot;&gt;mvn clean install&lt;/span&gt;&#39;&lt;br /&gt;
&lt;br /&gt;
However you get a bad surprise: &lt;b&gt;First you are getting&lt;/b&gt; a &lt;b&gt;BUILD ERROR&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt;Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;... and &lt;b&gt;even though you seem to have created a war file, it only contains empty META-INF, WEB-INF and classes folders&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJwyRxKD0qNkB-VLDf4Wp_Lx0VH2GqqPhy0IAaPmmh2DsNwrkryXI2crB5PECJLH41aSGbw_PJMAMxO_a2NaUxsp_Dip9u6dC9WiTW7ori_woo2RdO1mmwv4irBvltsbIZE1zl1_EPVZ62/s1600/empty_war_file.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJwyRxKD0qNkB-VLDf4Wp_Lx0VH2GqqPhy0IAaPmmh2DsNwrkryXI2crB5PECJLH41aSGbw_PJMAMxO_a2NaUxsp_Dip9u6dC9WiTW7ori_woo2RdO1mmwv4irBvltsbIZE1zl1_EPVZ62/s400/empty_war_file.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvEJIuBJnbr1McAXx6V9PxmZ1Ex0yTP4v1UQ1nfE4UNR6Jr_LRj3NqZnPMnIYSayOZgxTDB6BuS75obVDKTXNe9tbh31wic4l6Xi54180UeJUteGgSlpZtxbDm8NLPfxaU_1iTSJBPZHJC/s1600/empty_war_file.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem is that your &lt;b&gt;web.xml&lt;/b&gt; file is not picked up by your maven build, because by default maven expects to find your &lt;b&gt;web.xml&lt;/b&gt; inside &lt;span class=&quot;postbody&quot;&gt;&lt;b&gt;src/main/resources&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;One option is to &lt;b&gt;refactor your project &lt;/b&gt;and move your &lt;b&gt;web.xml&lt;/b&gt; under &lt;/span&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;b&gt;src/main/resources/WEB-INF&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;b&gt;A better option &lt;/b&gt;is to &lt;b&gt;modify your &lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-pom.html&quot;&gt;pom file&lt;/a&gt;&lt;/b&gt; and&amp;nbsp; &lt;b&gt;add a &lt;a href=&quot;http://maven.apache.org/plugins/maven-war-plugin/&quot;&gt;maven war plugin&lt;/a&gt;&lt;/b&gt;&lt;b&gt; configuration section&lt;/b&gt; to your &lt;b&gt;build/plugins section&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;In my case, I am specifying that my &lt;b&gt;web.xml&lt;/b&gt; file is located under a &lt;b&gt;WebContent&lt;/b&gt; folder, relative to the Pom file:&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;   
   &lt;span style=&quot;color: #6aa84f;&quot;&gt;&amp;lt;plugin&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;maven-war-plugin&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;2.1.1&amp;lt;/version&amp;gt;&lt;/span&gt;
      &amp;lt;!-- &amp;lt;configuration&amp;gt; section added to pick up the WEB-INF/web.xml inside WebContent --&amp;gt;
     &lt;span style=&quot;color: #741b47;&quot;&gt; &lt;span style=&quot;color: #38761d;&quot;&gt;&amp;lt;configuration&amp;gt;
         &amp;lt;webResources&amp;gt;
            &amp;lt;resource&amp;gt;
               &amp;lt;directory&amp;gt;WebContent&amp;lt;/directory&amp;gt;
            &amp;lt;/resource&amp;gt;
         &amp;lt;/webResources&amp;gt;
      &amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;color: #6aa84f;&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
When done, you just need to &lt;a href=&quot;http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html&quot;&gt;rebuild your web application (war file)&lt;/a&gt; via &#39;&lt;span style=&quot;color: #38761d;&quot;&gt;mvn clean install&lt;/span&gt;&#39; and you should then obtain a&amp;nbsp; &lt;b&gt;BUILD SUCCESSFUL&lt;/b&gt; with the war file content you were expecting!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/9009592916526354812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/9009592916526354812' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/9009592916526354812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/9009592916526354812'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2012/02/maven-war-plugin-configuration-section.html' title='Maven war plugin configuration section and web.xml'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii1Pe4537_c1GQLT8lgxFBRKkSqJxTBv2ntMnQvwQLcn_3EKZM-uK4J54OUoQkCHceOFmJ6HdmfHdLsG1Z_90hD-DnukoCVYLo9Mlky3vbeWAPBwCl5Dd0p-GcbPdqkMma99vN4-EIBqye/s72-c/uitoolkitclient_1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-754177405880567305</id><published>2011-12-30T14:35:00.000-08:00</published><updated>2013-04-24T21:41:40.399-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Annotations"/><category scheme="http://www.blogger.com/atom/ns#" term="heade"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP"/><category scheme="http://www.blogger.com/atom/ns#" term="HttpServletRequest"/><category scheme="http://www.blogger.com/atom/ns#" term="IP"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="request"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="RESTEasy"/><category scheme="http://www.blogger.com/atom/ns#" term="ServletRequest"/><title type='text'>How to extract HTTP header fields in a REST API</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
To be able to extract &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_HTTP_header_fields&quot;&gt;HTTP headers fields&lt;/a&gt; from incoming requests accessing a&lt;b&gt; &lt;a href=&quot;http://fandry.blogspot.com/2011/02/rest-style-architecture-and-development.html&quot;&gt;REST API&lt;/a&gt;&lt;/b&gt; is particularly useful when trying to&lt;b&gt; log the transactions&lt;/b&gt; that are coming through the REST based service. &lt;br /&gt;
&lt;br /&gt;
In this example, I use Java based JBoss &lt;a href=&quot;http://fandry.blogspot.com/2010/06/jaxb-json-rest-api-using-resteasy-on.html&quot;&gt;RESTEasy&lt;/a&gt; together with &lt;a href=&quot;http://today.java.net/pub/a/today/2007/05/22/using-annotations-in-java-ee-5.html&quot;&gt;@Context&lt;/a&gt; java &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_annotation&quot;&gt;annotation&lt;/a&gt; to extract the header information.&lt;br /&gt;
&lt;br /&gt;
One of the REST API operation is&lt;span style=&quot;color: #38761d;&quot;&gt; /version&lt;/span&gt; that returns the current version of the API in a JSON format.The interface operation is defined as follow: &lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
     import javax.ws.rs.core.HttpHeaders;

     /**
     * Get the current version of the REST API.
     */
     @GET
     @Path(&quot;/version&quot;)
     @Produces(&quot;application/json&quot;)
     @GZIP
     public Response getVersion(@Context HttpHeaders headers);&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
The &lt;b&gt;@Context&lt;/b&gt; annotation allows you to map request HTTP headers to the method invocation.&lt;br /&gt;
&lt;br /&gt;
One way to safely extract all available &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_HTTP_header_fields&quot;&gt;header parameters&lt;/a&gt; is to loop through the headers.The method &lt;a href=&quot;http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/HttpHeaders.html#getRequestHeaders%28%29&quot;&gt;getRequestHeaders&lt;/a&gt; from &lt;a href=&quot;http://javax.ws.rs.core.httpheaders/&quot;&gt;javax.ws.rs.core.HttpHeaders&lt;/a&gt; returns the values of HTTP request headers. The returned map is case-insensitive and is read-only. &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;   if (headers != null) {
       for (String header : headers.getRequestHeaders().keySet()) {
          System.out.println(&quot;Header:&quot;+header+
                             &quot;Value:&quot;+headers.getRequestHeader(header));
       }
   }&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
When querying the REST API via a browser:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;  http://www.acme.com/api/version&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
you obtain a minimum set of headers fields:&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;
   Header:cache-control Value:[max-age=0]
   Header:connection Value:[keep-alive]
   Header:accept-language Value:[en-us,en;q=0.5]
   Header:host Value:[www.acme.com]
   Header:accept Value:[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
   Header:user-agent Value:[Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0)    
   Gecko/20100101 Firefox/8.0]
   Header:accept-encoding Value:[gzip, deflate]
   Header:session-id Value:[d636369c]
   Header:accept-charset Value:[ISO-8859-1,utf-8;q=0.7,*;q=0.7]&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
To be able to extract a specific header field (e.g. Host), you can use the &lt;a href=&quot;http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/HttpHeaders.html#getRequestHeader%28java.lang.String%29&quot;&gt;getRequestHeader&lt;/a&gt; function:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt; public Response getVersion(@Context HttpHeaders headers) {
     if (headers != null) {
        List&amp;lt;String&amp;gt; hostHeader = headers.getRequestHeader(&quot;host&quot;);
        if (hostHeader != null) {
           for (String host : hostHeader) {
              LOG.debug(&quot;Host:&quot;+host);
           }
        }
     } 
  
     // Get the version
     final Version current_version = new Version();
     final ObjectMapper mapper = new ObjectMapper();
     final JsonNode rootNode = mapper.createObjectNode();
     ((ObjectNode) rootNode).putPOJO(Version.XML_ROOT_ELEMENT, current_version);
     
     final ResponseBuilder builder = Response.ok(rootNode);
     return builder.build();
   }
&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
If you are using a&lt;a href=&quot;http://fandry.blogspot.com/2011/09/curl-tests-harness-and-tls.html&quot;&gt; test harness tools like cURL&lt;/a&gt;, you can also easily add additional &lt;b&gt;HTTP header fields&lt;/b&gt; &lt;br /&gt;
(e.g. the email address of the user making the request or the &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_referrer&quot;&gt;referer&lt;/a&gt;) and test the logging functionality of your REST API:&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;curl -H &quot;From: user@example.com&quot; http://www.acme.com/api/version&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;curl -H &quot;Referer: http://consumer.service.acme.com&quot; http://www.acme.com/api/version&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
The headers can also be obtained through the &lt;a href=&quot;http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html&quot;&gt;HttpServletRequest&lt;/a&gt; object.&lt;br /&gt;
This can be done using the &lt;b&gt;@Context HttpServletRequest annotation&lt;/b&gt; and can provide additional information about the incoming request: &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public Response getVersion(@Context HttpServletRequest request) {
   LOG.debug(&quot;Host:&quot;+request.getHeader(&quot;host&quot;));
   LOG.debug(&quot;Request-URL:&quot;+request.getRequestURL());
   ...
}&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;br /&gt;
Since &lt;a href=&quot;http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServletRequest.html&quot;&gt;HttpServletRequest&lt;/a&gt; extends &lt;a href=&quot;http://docs.oracle.com/javaee/1.4/api/javax/servlet/ServletRequest.html&quot;&gt;ServletRequest&lt;/a&gt; you also getting useful methods providing information on the Internet Protocol (IP) address, host and port of the client or last proxy that initiated the request.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;public Response getVersion(@Context HttpServletRequest request) {
   LOG.debug(&quot;Remote-IP:&quot;+request.getRemoteAddr());
   LOG.debug(&quot;Remote-Host:&quot;+request.getRemoteHost());
   LOG.debug(&quot;Remote-Port:&quot;+request.getRemotePort());
   ...
}&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/754177405880567305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/754177405880567305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/754177405880567305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/754177405880567305'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/12/how-to-extract-http-header-fields-in.html' title='How to extract HTTP header fields in a REST API'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-1097844943975887229</id><published>2011-11-28T15:29:00.000-08:00</published><updated>2011-11-29T16:59:58.556-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cURL"/><category scheme="http://www.blogger.com/atom/ns#" term="libeay32.dll"/><category scheme="http://www.blogger.com/atom/ns#" term="openSSL"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="ssleay32.dll"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>cURL setup and OpenSSL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;In a &lt;a href=&quot;http://fandry.blogspot.com/2011/04/how-to-test-harness-rest-web-services.html&quot;&gt;previous post&lt;/a&gt; I was explaining how to use &lt;a href=&quot;http://en.wikipedia.org/wiki/CURL&quot;&gt;cURL&lt;/a&gt; to quickly test &lt;a href=&quot;http://fandry.blogspot.com/2011/02/rest-style-architecture-and-development.html&quot;&gt;REST web services&lt;/a&gt;. If your web service has to be secure, you are probably using &lt;b&gt;Transport Layer Security&lt;/b&gt; (&lt;b&gt;TLS&lt;/b&gt;) - the new &lt;b&gt;Secure Sockets Layer&lt;/b&gt; (&lt;b&gt;SSL&lt;/b&gt;) cryptographic protocol.&lt;br /&gt;
&lt;br /&gt;
To be able to &lt;a href=&quot;http://fandry.blogspot.com/2011/09/curl-tests-harness-and-tls.html&quot;&gt;use &lt;b&gt;TLS/SSL&lt;/b&gt; with cURL&lt;/a&gt;, you will need to have some SSL libraries/DLL such as OpenSSL installed. If you did not install OpenSSL, you will most likely get the following error when trying to use cURL:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JCyEzEm5z6wHuAjiPygwOVy7cmhP1m4hOsMAV2-NbTEbu9Zd0TNB5r0m2FwFOG12DhewDJ2NReGvicaqh66tJcNa7gsj6jFWWx4RjomI1hQzyXmydD5RnK6X9rccH9STWMyrWxo4rPfm/s1600/cURL_dll_issue.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;138&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JCyEzEm5z6wHuAjiPygwOVy7cmhP1m4hOsMAV2-NbTEbu9Zd0TNB5r0m2FwFOG12DhewDJ2NReGvicaqh66tJcNa7gsj6jFWWx4RjomI1hQzyXmydD5RnK6X9rccH9STWMyrWxo4rPfm/s400/cURL_dll_issue.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;span style=&quot;color: #38761d;&quot;&gt;The program can&#39;t start because LIBEAY32.dll is missing from your computer. Try to reinstall the program to fix this problem.&lt;/span&gt;&quot; &lt;br /&gt;
&lt;br /&gt;
To fix this, you can either&lt;a href=&quot;http://www.slproweb.com/products/Win32OpenSSL.html&quot;&gt; install the OpenSSL&lt;/a&gt; on your machine, or if you just want to install the minimum, you can just copy the following DLLs from OpenSSL (I am using OpenSSL 1.0.0c) to your cURL folder:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;libeay32.dll&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;ssleay32.dll&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;By the way, you can download &lt;a href=&quot;http://curl.haxx.se/download.html&quot;&gt;cURL for most of the OS and platforms &lt;/a&gt;and usually SSL and non SSL versions are available for each OS (see current windows versions below):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnpMCnGS1QpZitoti8vbCfjzdElvu1KsSjxlcCdp8iGbUQdngXvF-7cpSfGBYjXnKAFRvm4GJXXP6wAGe9zcdkqKFgNxZWWiu-P7hM2Z8nzpIiGT0bZiDhfMxGpCehPWzqSY_G6pEHUZGX/s1600/cURL_windows_downloads.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;261&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnpMCnGS1QpZitoti8vbCfjzdElvu1KsSjxlcCdp8iGbUQdngXvF-7cpSfGBYjXnKAFRvm4GJXXP6wAGe9zcdkqKFgNxZWWiu-P7hM2Z8nzpIiGT0bZiDhfMxGpCehPWzqSY_G6pEHUZGX/s400/cURL_windows_downloads.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/1097844943975887229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/1097844943975887229' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1097844943975887229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/1097844943975887229'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/11/curl-setup-and-openssl.html' title='cURL setup and OpenSSL'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JCyEzEm5z6wHuAjiPygwOVy7cmhP1m4hOsMAV2-NbTEbu9Zd0TNB5r0m2FwFOG12DhewDJ2NReGvicaqh66tJcNa7gsj6jFWWx4RjomI1hQzyXmydD5RnK6X9rccH9STWMyrWxo4rPfm/s72-c/cURL_dll_issue.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-3777724981729720381</id><published>2011-10-28T14:33:00.000-07:00</published><updated>2011-11-01T12:56:34.699-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="choreography"/><category scheme="http://www.blogger.com/atom/ns#" term="IHE"/><category scheme="http://www.blogger.com/atom/ns#" term="orchestration"/><category scheme="http://www.blogger.com/atom/ns#" term="SOA"/><title type='text'>Combining IHE transactions : Orchestration or Choreography?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Integrating_the_Healthcare_Enterprise&quot;&gt;Integrating the Healthcare Enterprise (IHE)&lt;/a&gt; has gained tremendous momentum in the past few years. Started as a Healthcare Information and Management Systems Society (&lt;a href=&quot;http://www.himss.org/ASP/index.asp&quot;&gt;HIMSS&lt;/a&gt;) and Radiological Society of North America (RSNA) workshop in October 1998 with only 15 participants including AGFA, Cerner, Fuji, GE, HP, Philips, Siemens, the IHE initiative has more than 400 members worldwide. It is composed of healthcare professional associations, government agencies, &lt;a href=&quot;http://en.wikipedia.org/wiki/Health_information_exchange&quot;&gt;Health Information Exchanges (HIE)&lt;/a&gt;, healthcare providers, IT and consulting companies, trade, educational, standard and research organizations. IHE provides a standards based-interoperable framework to share and exchange information between healthcare organizations across networks.&lt;br /&gt;
&lt;br /&gt;
Combined with the latest technology and well established standards (&lt;b&gt;HL7, DICOM, IDC9/10, LOINC, W3C&lt;/b&gt;), clinical data can then be securely and privately accessed and transmitted locally between network endpoints (e.g. within the same hospital between the practices and a lab). IHE profiles can also be used across Health Information Exchanges (&lt;b&gt;HIE&lt;/b&gt;) of Regional Health Information Organization&lt;b&gt; (RHIO)&lt;/b&gt;, or a state level (e.g. an individual state in the US, Canada or Europe), or at the federal level (e.g. the US Nationwide Health Information Network or &lt;a href=&quot;http://en.wikipedia.org/wiki/Nationwide_Health_Information_Network&quot;&gt;NwHIN&lt;/a&gt;). As a result, there is a strong need to integrate and combine individual IHE profiles end-points to form “hub of hubs” or “network of networks” to support health information exchange between the participating nodes entities.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi09pBA61sCaox-mfvtFxWZxnNbqxCJbBcdEjw6UiL_r9j4Ia6Dbc0zthOcr9IrB1nZzZLZ6Jr40ot2O8irv0p3wu9dorzMtU4YUnv8DMEI3JusAK15XSJpfF2OQnLA925deYoswm-bsHKm/s1600/orchrestration_chorecography.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi09pBA61sCaox-mfvtFxWZxnNbqxCJbBcdEjw6UiL_r9j4Ia6Dbc0zthOcr9IrB1nZzZLZ6Jr40ot2O8irv0p3wu9dorzMtU4YUnv8DMEI3JusAK15XSJpfF2OQnLA925deYoswm-bsHKm/s400/orchrestration_chorecography.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Because IHE transactions are most likely to be offered as web services, combining those transactions can be done following Service Oriented Architecture (SOA) and Service Oriented Computing (SOC) principles.&lt;br /&gt;
&lt;br /&gt;
Conventional middleware distributed system infrastructures (e.g. &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Message_Service&quot;&gt;JMS&lt;/a&gt;) are generally not sufficient or flexible enough to mediate, transform, federate and route messages from and to web services. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Enterprise_application_integration&quot;&gt;Enterprise Application Integration (EAI)&lt;/a&gt; goes one step ahead, trying to separate the applications from the web services end-points. EAI usually employs a centralize service broker for this, a set of connectors and an independent data model. Services can then send and subscribe to receive messages to and from the broker. However, this very centralized approach requires a large amount of up front development and business process design for the connectors, as well as high cost of maintenance in general. &lt;b&gt;Enterprise Service Buses (ESB)&lt;/b&gt; is an infrastructure that leverages EAI principles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Orchestration&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Like &lt;b&gt;EAI&lt;/b&gt;, &lt;b&gt;orchestration &lt;/b&gt;uses a centralized approach. Web services orchestration is realized through &lt;a href=&quot;http://en.wikipedia.org/wiki/Business_Process_Execution_Language&quot;&gt;Business Process Execution Language (BPEL)&lt;/a&gt; that describe the collaboration and interaction between the web service participants.&lt;br /&gt;
&lt;br /&gt;
Business workflows, states, actions, events, control flows and exception handling can be specified. Messages can be received and sent directly from and to &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_Services_Description_Language&quot;&gt;WSDL&lt;/a&gt; ports. Results received asynchronously from web services can be combined to create new messages. Usually &lt;b&gt;BPEL&lt;/b&gt; workflows are created and updated with visual design tools.  &lt;br /&gt;
&lt;br /&gt;
There is often an overlap between orchestration engines and&lt;a href=&quot;http://en.wikipedia.org/wiki/Enterprise_service_bus&quot;&gt; Enterprise Services Buses (ESB)&lt;/a&gt;. Vendors now also offer BPEL design on top of more generic EAI mechanisms enabling true orchestration for ESBs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Choreography&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Choreography &lt;/b&gt;is more distributed and collaborative in nature and uses the &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_Service_Choreography&quot;&gt;Web Service Choreography Interface (WSCI)&lt;/a&gt; specification and the WSDL description files to represent the flow of messages exchanged between the Web services involved.&lt;br /&gt;
&lt;br /&gt;
Choreography seems more flexible than orchestration since it does not rely on a central element that could become a bottle neck and seems to offer more complex interaction potential between web services. However, choreography has some drawbacks including the necessity for all web services to be aware of overall business process workflow. &lt;a href=&quot;http://www.w3.org/TR/wsci/&quot;&gt;WSCI&lt;/a&gt; itself does not specify the definition and the implementation of the mechanism to implement the message exchange. &lt;br /&gt;
&lt;br /&gt;
In addition to this, performance can be an issue if high volume message transactions between the end-points peers are not handled properly.  &lt;br /&gt;
&lt;br /&gt;
Moreover, there is no clear responsibility for the overall workflow leading to legal issues related to monitoring and maintenance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Orchestration vs Choreography&lt;/b&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
Orchestration also has the advantage to be a much more mature integration technology than choreography. For these reasons, most of the state-wide health information exchange networks in the US employ a &lt;a href=&quot;http://en.wikipedia.org/wiki/Service-oriented_architecture&quot;&gt;Service-Oriented Architectural (SOA)&lt;/a&gt; model that is implemented through an Enterprise Service Bus (ESB) orchestration. &lt;br /&gt;
&lt;br /&gt;
In addition to this, web service orchestration offers much more than just technical benefits:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Organizational: standardization, narrow gap between business analysts and developers;&lt;/li&gt;
&lt;li&gt;Managerial: risk reduction, lower costs, more flexibility;&lt;/li&gt;
&lt;li&gt;Strategic: IT resilience, delivery time reduction, less technology lock-in;&lt;/li&gt;
&lt;li&gt;Technical: portability, reuse, interoperability of tools, less complex code, better maintainability;&lt;/li&gt;
&lt;li&gt;Operational: efficiency, automation, higher level tasks management.&lt;/li&gt;
&lt;/ul&gt;When deployed on high performance platforms such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Service-oriented_architecture&quot;&gt;SOA&lt;/a&gt; software appliances, orchestration solutions are easy to test, extend and maintain.&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;&lt;/b&gt;More on this topic to be published as part of the following paper: Andry F., Wan L., &lt;i&gt;HEALTH INFORMATION EXCHANGE NETWORK INTEROPERABILITY THROUGH IHE TRANSACTIONS ORCHESTRATION&lt;/i&gt;, 5th International Conference on Health Informatics (&lt;a href=&quot;http://www.healthinf.biostec.org/&quot;&gt;HEALTHINF 2012&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/3777724981729720381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/3777724981729720381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3777724981729720381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3777724981729720381'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/10/combining-ihe-transactions.html' title='Combining IHE transactions : Orchestration or Choreography?'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi09pBA61sCaox-mfvtFxWZxnNbqxCJbBcdEjw6UiL_r9j4Ia6Dbc0zthOcr9IrB1nZzZLZ6Jr40ot2O8irv0p3wu9dorzMtU4YUnv8DMEI3JusAK15XSJpfF2OQnLA925deYoswm-bsHKm/s72-c/orchrestration_chorecography.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-3721250152067139021</id><published>2011-09-23T10:18:00.000-07:00</published><updated>2013-04-24T21:43:07.664-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="cookies"/><category scheme="http://www.blogger.com/atom/ns#" term="cURL"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Services"/><title type='text'>cURL tests harness and TLS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In a &lt;a href=&quot;http://fandry.blogspot.com/2011/04/how-to-test-harness-rest-web-services.html&quot;&gt;previous post&lt;/a&gt;, I have explained how to use cURL to test harness REST based Web services. One thing I did not described was how to add &lt;a href=&quot;http://en.wikipedia.org/wiki/Transport_Layer_Security&quot;&gt;&lt;b&gt;Transport Layer Security&lt;/b&gt; (&lt;b&gt;TLS&lt;/b&gt;)&lt;/a&gt; in your tests. In other words, how to successfully test REST Web services over &lt;b&gt;HTTPS&lt;/b&gt;?&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://curl.haxx.se/docs/&quot;&gt;cURL manual&lt;/a&gt; describes a certain number of options that can be used. One of the most convenient option is &lt;b&gt;-k&lt;/b&gt; or &lt;b&gt;--insecure&lt;/b&gt;. It allows curl to&amp;nbsp; perform&amp;nbsp; &quot;insecure&quot; SSL connections and transfers. All SSL connections are attempted to be made secure by using the CA certificate&amp;nbsp; bundle&amp;nbsp; installed by&amp;nbsp; default. So if you SSL connection does not require client side authentication it is a very quick way to test your web service over SSL:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;&amp;nbsp; curl -k https://www.acme.com/api/version&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another useful option can be used if in conjunction to SSL, you need to compress your payload via GZIP for example to optimize the transfer of large messages. In this case, you will use the option -H or --header that will help you specify custom headers to your request:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;color: #38761d;&quot;&gt;curl -H &quot;Accept-Encoding: gzip,deflate&quot; -k https://www.acme.com/api/users/list&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice in that case that the -k or --insecure option is always placed just in front of URL. &lt;br /&gt;
&lt;br /&gt;
Of course, other headers such as the one &lt;a href=&quot;http://fandry.blogspot.com/2011/04/how-to-test-harness-rest-web-services.html&quot;&gt;described previously&lt;/a&gt; can be combined:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #38761d;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp; curl -c ./cookies.txt --data-binary @login_password.json -H &quot;Content-Type: application/json&quot; -H &quot;Accept-Encoding: gzip,deflate&quot; -k https://www.acme.com/api/users/token&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/3721250152067139021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/3721250152067139021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3721250152067139021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3721250152067139021'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/09/curl-tests-harness-and-tls.html' title='cURL tests harness and TLS'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-9217031121605679213</id><published>2011-08-31T15:10:00.000-07:00</published><updated>2011-09-21T15:57:50.810-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="adherence"/><category scheme="http://www.blogger.com/atom/ns#" term="cost"/><category scheme="http://www.blogger.com/atom/ns#" term="Healthcare"/><category scheme="http://www.blogger.com/atom/ns#" term="medication"/><category scheme="http://www.blogger.com/atom/ns#" term="technology. sensors"/><title type='text'>Medication Adherence - How technology can help?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Looking for ideas to&lt;b&gt; reduce the rise of health care cost&lt;/b&gt;? Easy! Ask patients to &lt;b&gt;swallow their medication&lt;/b&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT1DZWCe12tItVOh3Qp372iJSugLEEQOSf5xDR1_Am1Ry3O-TjJZOxtNaTRvY-o3wJIBVAz2gg717pg61LuMgIiCVwTFlHK4VWtQDc7unKw0KosP-lXMlQ7i5O5Jzh4jocF0o5jVv9CX9D/s1600/pillshead.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;377&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT1DZWCe12tItVOh3Qp372iJSugLEEQOSf5xDR1_Am1Ry3O-TjJZOxtNaTRvY-o3wJIBVAz2gg717pg61LuMgIiCVwTFlHK4VWtQDc7unKw0KosP-lXMlQ7i5O5Jzh4jocF0o5jVv9CX9D/s400/pillshead.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to &lt;a href=&quot;http://www.fiercehealthcare.com/story/patients-not-taking-medications-cost-300b/2011-05-27&quot;&gt;recent studies&lt;/a&gt;, the &lt;b&gt;lack of prescription medication adherence cost between $250 and $300 billion annually&lt;/b&gt;, including $100 billion in hospitalization. For example, it is estimated that in the US 89,000 deaths annually are due to non adherence to anti-hypertensive treatments. This problem is particularly acute for patients with coexisting conditions who take a variety of medications sometimes prescribed by different physicians.&lt;br /&gt;
&lt;br /&gt;
Obviously &lt;b&gt;doctors &lt;/b&gt;and &lt;b&gt;pharmacists&lt;/b&gt; have a critical role to encourage patients and caregivers to administrate medication correctly and rigorously.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;C&lt;/b&gt;&lt;b&gt;ost is not necessarily the main factor&lt;/b&gt;: even when drugs are free, adherence rate is 60% in the US and only %50 in developed countries. In other words, improvements in&lt;b&gt; co-payments structures&lt;/b&gt; will only partially improve adherence. Another area of possible improvement will be the use of&lt;b&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Fee-for-service&quot;&gt;fee-for-service model&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another way to improve&lt;b&gt; medication adherence&lt;/b&gt; is the proper use of specific &lt;b&gt;technologies&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
Here are some suggestions: &lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;the integration of practice EMRs systems and pharmacies via &lt;a href=&quot;http://www.axolotl.com/solutions/health-information-exchange-solutions.html&quot;&gt;HIE solutions&lt;/a&gt; (a lot of practices are still using paper). &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;accurate and Electronic Health records (EMRs, and PHRs) that help verify &lt;a href=&quot;http://www.nlm.nih.gov/medlineplus/druginformation.html&quot;&gt;drug, herbs, supplements interactions and countraindications&lt;/a&gt;. The &lt;a href=&quot;http://fandry.blogspot.com/2010/04/soa-and-health-care-meaningful-use.html&quot;&gt;meaningful use&lt;/a&gt; guidelines go in this direction. &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;wider use of &lt;a href=&quot;http://www.express-scripts.com/research/studies/drugtrendreport/2010/dtrFinal.pdf&quot;&gt;medication home delivery&lt;/a&gt; (recognized as a way to save cost by introducing better competition)&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.ama-assn.org/amednews/2010/12/06/prsd1206.htm&quot;&gt;electronic monitoring systems coupled with personalized counseling&lt;/a&gt; has shown improvement in medication adherence rates to patients &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;online &lt;a href=&quot;https://dwp1.dhs.oregon.gov/WellnessAtWork&quot;&gt;incentive programs&lt;/a&gt; (e.g. provided by the employers) to promote prevention, quality of life and best practices in therapy. It is recognized that financial incentives and other rewards when well designed and targeted can&lt;a href=&quot;http://healthpolicyandreform.nejm.org/?p=3280&quot;&gt; improve adherence&lt;/a&gt; (smaller and higher reward frequency is usually more efficient than big and sporadic rewards). &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt; advances in &lt;a href=&quot;http://en.wikipedia.org/wiki/Personalized_medicine&quot;&gt;personalized medicine&lt;/a&gt; can help taylored medication intake and increase medication adherence&lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&amp;nbsp;&lt;a href=&quot;http://healthpolicyandreform.nejm.org/?p=3280&quot;&gt;screening and assessment tools&lt;/a&gt; (e.g. patients with chronic conditions could be screened for depression leading to poor medication adherence). &lt;/li&gt;
&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;new high-tech integrated devices including: &lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Home devices such as the well known&lt;a href=&quot;http://www.physorg.com/news201933408.html&quot;&gt; high-tech Japanese toilets&lt;/a&gt; which provide urine analysis, blood pressure, weight and body temperature &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.asianhhm.com/knowledge_bank/articles/RFID_Healthcare.htm&quot;&gt;Radio Frequency Identification (RFID)&lt;/a&gt; based wireless &lt;a href=&quot;http://www.hinz.org.nz/uploads/file/2010conference/P23_Montefiore.pdf&quot;&gt;sensor device&lt;/a&gt; can help track drug taking compliance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.healthtechzone.com/topics/healthcare/articles/80677-medminder-wireless-pill-organizer-medication-adherence.htm&quot;&gt;Wireless pills organizers&lt;/a&gt; designed to simplify medication management and improve adherence&lt;/li&gt;
&lt;li&gt;Personalized wearable sensors such as the latest &lt;a href=&quot;http://www.npr.org/blogs/thetwo-way/2011/08/11/139554014/new-electronic-sensors-stick-to-skin-as-temporary-tattoos&quot;&gt;electronic temporary tattoo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;With the amount of money at stake, I am sure there is a large number of companies, including start-ups, who are working hard on this problem. So stay tune!&lt;br /&gt;
&lt;br /&gt;
Finally, we have to keep in mind, that &lt;a href=&quot;http://healthpolicyandreform.nejm.org/?p=3280&quot;&gt;other factors&lt;/a&gt; including lifestyle, psychological issues and health literacy play an important role as well. And these are not negligible! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/9217031121605679213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/9217031121605679213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/9217031121605679213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/9217031121605679213'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/08/medication-adherence-how-technology-can.html' title='Medication Adherence - How technology can help?'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT1DZWCe12tItVOh3Qp372iJSugLEEQOSf5xDR1_Am1Ry3O-TjJZOxtNaTRvY-o3wJIBVAz2gg717pg61LuMgIiCVwTFlHK4VWtQDc7unKw0KosP-lXMlQ7i5O5Jzh4jocF0o5jVv9CX9D/s72-c/pillshead.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-8161255514131956069</id><published>2011-07-29T11:59:00.000-07:00</published><updated>2011-08-12T22:26:25.609-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SAML"/><category scheme="http://www.blogger.com/atom/ns#" term="SOAP"/><category scheme="http://www.blogger.com/atom/ns#" term="soapUI"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Service"/><title type='text'>How to test secure web services with soapUI - part #2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
In&amp;nbsp; a &lt;a href=&quot;http://fandry.blogspot.com/2011/05/how-to-test-secure-web-services-with.html&quot;&gt;previous article&lt;/a&gt; I described how to specify signature and encryption for outgoing Secured Web Services request.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;1. SAML &lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
In this second article I will talk about SAML and incoming Secure Web Service responses.&lt;br /&gt;
&lt;br /&gt;
If you are using SAML 1.X then you just need to add a &lt;a href=&quot;http://en.wikipedia.org/wiki/SAML_1.1&quot;&gt;SAML 1.X&lt;/a&gt; assertion in the corresponding window.&lt;br /&gt;
You may have to add a timestamp as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNC-qUJSC6GpnqfTfi8tk6tY9r2ilES9GDRkl8nq-udkeP7ixBCHjBTsBA6BtmwoVovmypht6-IDZKcMiRqrNMZoLjDTtcwbquu0q-79zPuCz4lx6oUOYDvQyiu4OD0RXvJUSvfYCenPoQ/s1600/timestamp.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;638&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNC-qUJSC6GpnqfTfi8tk6tY9r2ilES9GDRkl8nq-udkeP7ixBCHjBTsBA6BtmwoVovmypht6-IDZKcMiRqrNMZoLjDTtcwbquu0q-79zPuCz4lx6oUOYDvQyiu4OD0RXvJUSvfYCenPoQ/s640/timestamp.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example, we specify 10,000 milliseconds (10 seconds) for the life time of the Timestamp:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggiBaKkN8B1lR_8C78yPy0bvQt0MjMTeyjSO4UV2EsgBSTswhltXjw7hMeBICr9T9Ipeub3r6uXqGt9CTX7-Z2yw4Kv9ey9TYYOqQLuU87_ivbTJ0VNg7qo0kxC2SjY5FhDozgyYF5inJp/s1600/timestamp2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggiBaKkN8B1lR_8C78yPy0bvQt0MjMTeyjSO4UV2EsgBSTswhltXjw7hMeBICr9T9Ipeub3r6uXqGt9CTX7-Z2yw4Kv9ey9TYYOqQLuU87_ivbTJ0VNg7qo0kxC2SjY5FhDozgyYF5inJp/s640/timestamp2.png&quot; width=&quot;638&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmM0OC7SfeUFk0F2hDBWS0D67HWwkfnfL7DKCZuy85h807X3dEb1C3fc6THT8O7k6upbzTZExJflRd3kOGZd0UTODfdlET068QmCB4q-Q_pCC0lklPcolcyi-hWxqa0IoiWCpQTSm37hIg/s1600/SAML.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;638&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmM0OC7SfeUFk0F2hDBWS0D67HWwkfnfL7DKCZuy85h807X3dEb1C3fc6THT8O7k6upbzTZExJflRd3kOGZd0UTODfdlET068QmCB4q-Q_pCC0lklPcolcyi-hWxqa0IoiWCpQTSm37hIg/s640/SAML.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language&quot;&gt;SAML 1.X&lt;/a&gt; assertions are copied and pasted in the SAML tab:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlq2lm-GQRLiENvhkGJKCAoSJTfwiICRmko3RmAAp-RsrzwhGfH7RTthxqkJax76pnHoYekNfet-gpm5qM6gE7gPt021GNrfTNcGgb2TCUnSwq_iaRujeL-wDz9bAZhDAPymBZHGr2oFYm/s1600/SAML_1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlq2lm-GQRLiENvhkGJKCAoSJTfwiICRmko3RmAAp-RsrzwhGfH7RTthxqkJax76pnHoYekNfet-gpm5qM6gE7gPt021GNrfTNcGgb2TCUnSwq_iaRujeL-wDz9bAZhDAPymBZHGr2oFYm/s640/SAML_1.png&quot; width=&quot;582&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Of course, if you combine signature and encryption with SAML 1.X. You can those to the configuration tabs as well.&lt;br /&gt;
&lt;br /&gt;
For &lt;a href=&quot;http://en.wikipedia.org/wiki/SAML_2.0&quot;&gt;SAML 2.&lt;/a&gt;0, the only option you have for this version of soapUI is to add it manually to the WSSE section of your SOAP request:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglCZWlzmZ1qcCYkxLnL2Itw8LDOznKnJo-6AfsNMsh6WCcqfZ79hmpd2iXhLyMZkNRXnz-ahk_ZcYfJz4xp84UlRjtiZhldKUn89uxhSoP4Zg1w3fvz6xrUP18GxQWc3vus6vanaKpeblx/s1600/SAML_2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglCZWlzmZ1qcCYkxLnL2Itw8LDOznKnJo-6AfsNMsh6WCcqfZ79hmpd2iXhLyMZkNRXnz-ahk_ZcYfJz4xp84UlRjtiZhldKUn89uxhSoP4Zg1w3fvz6xrUP18GxQWc3vus6vanaKpeblx/s640/SAML_2.png&quot; width=&quot;270&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;2. Incoming Secure Web Service&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Responses&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Setting up incoming secure Web services responses encrypted and/or signed is easier than for outgoing request:&lt;br /&gt;
&lt;br /&gt;
1) Make sure that you have Keystores / Certificates tab set - You probably have done that earlier as described in &lt;a href=&quot;http://fandry.blogspot.com/2011/05/how-to-test-secure-web-services-with.html&quot;&gt;part #1 of this article&lt;/a&gt;.&lt;br /&gt;
You verify the signature with public key contained in the server&#39;s sender certificate/store and your private key to decrypt what the other server sends you.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsdu6NfXMMo8Rcydavb1MyfMeuj_ccOI084aAjQl6uXSU8aZHdKDLyN4ZFXCtdYwCE8HBWyLS8KOZTwrtDN7RZdh-N7kRNOGzxGCJXtvFYjgPeMkmZnBECGNnQGGmS_TxWDExnlfwLGctF/s1600/soapUI_keystores_WSS.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsdu6NfXMMo8Rcydavb1MyfMeuj_ccOI084aAjQl6uXSU8aZHdKDLyN4ZFXCtdYwCE8HBWyLS8KOZTwrtDN7RZdh-N7kRNOGzxGCJXtvFYjgPeMkmZnBECGNnQGGmS_TxWDExnlfwLGctF/s640/soapUI_keystores_WSS.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Create an incoming WSS configuration (e.g. my_config_from_server_A) that will decrypt the incoming SOAP requests coming from server A:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxdXEZcsdTacNerC0ysavbj5uMrvKQabfoz2v6EHM2pgQbjf-IaQMNxOf7hgVlqIbKQF-61HCTO6zfmgj2EXASDnhH9cfxrWNcQ-xKgSSftAdY1QCGFILM-634GOvyVFcl2Td2_yNVl2e5/s1600/incoming_WSS.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxdXEZcsdTacNerC0ysavbj5uMrvKQabfoz2v6EHM2pgQbjf-IaQMNxOf7hgVlqIbKQF-61HCTO6zfmgj2EXASDnhH9cfxrWNcQ-xKgSSftAdY1QCGFILM-634GOvyVFcl2Td2_yNVl2e5/s640/incoming_WSS.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You specify that you want to use your keystore to decrypt the message and the server&#39;s certificate/store to verify the signature of server A&lt;br /&gt;
(theses should appear in the drop box for each field):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7OnhgFiZAjuxqSdzGpsdRomEwuaeVxaYbtysQceF_YervAyJY6qrc2x9O9sWA_OKvKCuaSNVJq1GUp1vN2iJJ6jR7VovsW9bYx-KV4Z4aX7Ao2JtrsW0flv287t0EEdJ1NShIizyZOrC3/s1600/incoming_WSS_2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;273&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7OnhgFiZAjuxqSdzGpsdRomEwuaeVxaYbtysQceF_YervAyJY6qrc2x9O9sWA_OKvKCuaSNVJq1GUp1vN2iJJ6jR7VovsW9bYx-KV4Z4aX7Ao2JtrsW0flv287t0EEdJ1NShIizyZOrC3/s640/incoming_WSS_2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Last, you want to specify that you are using the  incoming configuration for each request:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3fhIlxSjSplKGwKwz9D2CmpNPhUchRqSwYiX-lxtKu889lhWjm4bEiR3q6VBXvwKuLXOuyMqP5e-wEyEJsLSeNm9o4MUL-biJR3H0PDNex8zn2sNMP2ymX1RHg2_30OktOwiX7mHimHA6/s1600/incoming_WSS_3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3fhIlxSjSplKGwKwz9D2CmpNPhUchRqSwYiX-lxtKu889lhWjm4bEiR3q6VBXvwKuLXOuyMqP5e-wEyEJsLSeNm9o4MUL-biJR3H0PDNex8zn2sNMP2ymX1RHg2_30OktOwiX7mHimHA6/s640/incoming_WSS_3.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/8161255514131956069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/8161255514131956069' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/8161255514131956069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/8161255514131956069'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/07/how-to-test-secure-web-services-with.html' title='How to test secure web services with soapUI - part #2'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNC-qUJSC6GpnqfTfi8tk6tY9r2ilES9GDRkl8nq-udkeP7ixBCHjBTsBA6BtmwoVovmypht6-IDZKcMiRqrNMZoLjDTtcwbquu0q-79zPuCz4lx6oUOYDvQyiu4OD0RXvJUSvfYCenPoQ/s72-c/timestamp.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743578218566083321.post-3864567191841868664</id><published>2011-06-27T11:18:00.000-07:00</published><updated>2013-04-24T21:45:20.466-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="soapUI"/><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Service"/><title type='text'>Problem initializing the class javax.crypto.SunJCE_b with soapUI ?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Last week, I have decided to &lt;a href=&quot;http://www.eviware.com/Download-soapUI/download-soapui-pro.html&quot;&gt;download and&amp;nbsp; install the lastest soapUI PRO&lt;/a&gt; version 4.0 from Eviware.&lt;br /&gt;
I have been using soapUI for some time to&lt;a href=&quot;http://fandry.blogspot.com/2011/05/how-to-test-secure-web-services-with.html&quot;&gt; test secure SOAP Web services&lt;/a&gt; using SSL/TLS as well as encrypting and signing the SOAP payload.&lt;br /&gt;
&lt;br /&gt;
However when I tried to use my existing projects I end-up with the following errors in my soapUI log:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;Wed Jun 22 11:43:05 PDT 2011:&lt;/b&gt;&lt;b style=&quot;color: #cc0000;&quot;&gt;ERROR:java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b
   java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b&lt;/b&gt;&lt;b&gt;
    &lt;span style=&quot;color: #274e13;&quot;&gt;at javax.crypto.KeyGenerator.a(DashoA13*..)
    at javax.crypto.KeyGenerator.&lt;/span&gt;&lt;/b&gt;&lt;init&gt;&lt;b&gt;&lt;span style=&quot;color: #274e13;&quot;&gt;(DashoA13*..)
    at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
    at org.apache.ws.security.message.WSSecEncrypt.getKeyGenerator(WSSecEncrypt.java:701)
    at org.apache.ws.security.message.WSSecEncrypt.prepare(WSSecEncrypt.java:228)
    at org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:291)
    at com.eviware.soapui.impl.wsdl.support.wss.entries.AddEncryptionEntry.process(AddEncryptionEntry.java:311)
    at com.eviware.soapui.impl.wsdl.support.wss.OutgoingWss.processOutgoing(OutgoingWss.java:157)
    at com.eviware.soapui.impl.wsdl.submit.filters.WssRequestFilter.filterWsdlRequest(WssRequestFilter.java:58)
    at com.eviware.soapui.impl.wsdl.submit.filters.AbstractRequestFilter.filterAbstractHttpRequest(AbstractRequestFilter.java:37)
    at com.eviware.soapui.impl.wsdl.submit.filters.AbstractRequestFilter.filterRequest(AbstractRequestFilter.java:31)
    at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:133)
    at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)&lt;/span&gt;
&lt;/b&gt;
&lt;/init&gt;&lt;/pre&gt;
&lt;br /&gt;
A quick search on the web told me to check if my some of my security setup in my JRE was properly configured.&lt;br /&gt;
For this it was recommended to check the security directory under the lib folder (&lt;span style=&quot;color: #38761d;&quot;&gt;.\Java\jre6\lib\security&lt;/span&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbrcjTcrTdnrL6f7v597nIsZISUJuCfqsCg_xOM_vHtklj-dTNDgtDVMfQqoNnM0BiI9Y9lgW0KDD1F2ay3OVYH-eQDtaMVHGZssIMdxNCrCywEPSclmYos-rV3ZYqh_6lFycqGSGmAMFt/s1600/JRE_security_folder.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbrcjTcrTdnrL6f7v597nIsZISUJuCfqsCg_xOM_vHtklj-dTNDgtDVMfQqoNnM0BiI9Y9lgW0KDD1F2ay3OVYH-eQDtaMVHGZssIMdxNCrCywEPSclmYos-rV3ZYqh_6lFycqGSGmAMFt/s640/JRE_security_folder.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I also checked the content of the content of the jar file &lt;span style=&quot;color: #38761d;&quot;&gt;./Java/jre6/lib/jce.jar&lt;/span&gt; which should contain the missing class in question:&lt;b&gt;&lt;b&gt;&amp;nbsp; javax.crypto.SunJCE_b&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
However everything looked fine. Even though my JRE was almost up-to-date, I finally managed to fix this issue by &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;upgrading my java JRE &lt;/a&gt;to the latest version! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fandry.blogspot.com/feeds/3864567191841868664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/743578218566083321/3864567191841868664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3864567191841868664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743578218566083321/posts/default/3864567191841868664'/><link rel='alternate' type='text/html' href='http://fandry.blogspot.com/2011/06/problem-initializing-class.html' title='Problem initializing the class javax.crypto.SunJCE_b with soapUI ?'/><author><name>fandry</name><uri>http://www.blogger.com/profile/01990790629557446302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_ATVotR02MVNuoK2wyV7ISO18tJvGmpJMVo8riF-7iQmVaqHAWA358mfb5pMaCYwjbZhbkwUV8My4-oIwS0lyxgT2mAht3hoAJBX6Q-uu0ufNnx7D_L5jB5JWst4VA/s113/fandry_pic.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbrcjTcrTdnrL6f7v597nIsZISUJuCfqsCg_xOM_vHtklj-dTNDgtDVMfQqoNnM0BiI9Y9lgW0KDD1F2ay3OVYH-eQDtaMVHGZssIMdxNCrCywEPSclmYos-rV3ZYqh_6lFycqGSGmAMFt/s72-c/JRE_security_folder.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>