95-843 Service Oriented Architecture Carnegie Mellon University Assigned: Thursday, June 6, 2013 Homework 2 Due: Thursday, June 20, 11:59:00 PM Part 1. ======= In this project you will build a composite application using Oracle's SOA Suite 11g. This composite will be built from three components. The first component is a file adapter. It will be configured to read a file when that file is placed into the NewData directory. The adapter will poll for the file every 10 seconds. It will then delete the file and make a copy of it to an archive directory. It will also generate an XML equivalent file and construct an XSD that contains the grammar for the XML. This XML file will be available to the other components in the SOA Suite. The second component in the composite is also a file adapter. It will write data to a log file called CoolLog.txt. The third component is a mediator component (think lightweight ESB) that will read data from the first component, transform it using XSLT, and write the data to the second component. 0) The steps below have been adapted and modified from the book "Oracle SOA Suite 11g Handbook" and these steps are also found on this web site (see chapter 7): http://technology.amis.nl/blog/13380/soa-suite-11g-handbook-chapter-complements 1) Create a directory called C:\Testing with subdirectories C:\Testing\NewData and C:\Testing\NewSampleData and C:\Testing\Log and C:\Testing\Archive. Within the Log directory, create an empty file called CoolLog.txt. 2) Build a text file named C:\Testing\NewSampleData\CoolArrivedData.txt with the following data: 1,Jones,Andy,ENG100,PSY050,MAT220 2,Hein,Peter,MAT010,CHM230,CSC401 3,Miller,Kyle,MAT010,CHM230,HST080 4,Williams,Ann,MAT010,ENG100,PSY050 5,Kim,Jenny,ENG100,CHM230,HST080 6,Carter,Herb,PSY050,CHM230,CSC401 7,Popov,Dimitri,PSY050,PHY100,ENG100 8,Smith,Kellie,PSY050,HST080,ECN110 Be sure to include a final return at the end. That is, hit return on line 8 after ECN110. 3) Build a text file named C:\Testing\NewSampleData\CoolLoggedData.txt with the following data: 2012-03-29,Michael,McCarthy 4) Run JDeveloper and create a new SOA Application with an empty composite. This application will be called CoolCopyTransformAndLogApplication, the project will be called CoolCopyTransforAndLogProject and the composite will be called CoolCopyTransformAndLogComposite. 5) Drag and drop a file adapter to the Exposed Services Lane. 6) Name the service provided by the adapter CoolReadFileAndGenerateXMLService. 7) Select Define from operation and schema (specified later) 8) Select Read File as the operation type and give it the name CoolReadArrivedDataOperation. 9) Select Logical Name for directory names. 10) The logical directory name is COOLINPUTDIR. 11) We do not need to process the files recursively. 12) We do want to archive processed files. Give this directory the logical name COOLARCHIVE. 13) We do want to delete files after successful retrieval. 14) Use wild cards and include files with the name pattern *.txt. 15) There are multiple messages and we will publish message in batches of 1. 16) Set the polling frequency to 10 seconds. In real life, this field would be much larger. 17) The minimum age is 0 seconds. 18) We are not using a trigger file. We must describe the format of the XML document that is to be generated. 19) Click the gear icon to the right of the URL text box. 20) The file type is delimited. 21) We will browse to the first data file above (CoolArrivedData.txt) to use as our sample. 22) The file contains multiple record instances all of a single type. 23) Our namespace is http://coolexample.com/coolarriveddata. 24) The element name containing multiple records is coolRoot. 25) Our record name is coolRecord. 26) Give each field a name. Use the names: RecordID,Last,First,Course1,Course2,Course3. 27) An XSD will be generated. Give it the name CoolArrivedData.xsd. 28) Use the testing page to see if we are generating the correct XML from the sample data file. 29) If the XML looks clean, we are finished and should return to the Adapter Configuration wizard. 30) The URL field (to the left of the gear) should now point to our schema xsd. 31) Finish the wizard. The new service is displayed. It has a single operation. 32) We need to associate the logical names with physical names. Do this by placing a complete file path as the value of the property element that is found below the binding.jca element in composite.xml. C:\Testing\NewData : C:\Testing\Archive At this point we are able to read a comma delimited file when it arrives. We will be generating an XML equivalent and this XML may be used by other components in the composite. 33) Drag a new file adapter to the external references lane of the the composite editor. We will use this adapter to generate a log file from the XML arriving from the first adapter. 34) The name of this new service is LogNames. 35) We will define from operation and schema later. 36) We are using this adapter to write files. 37) The operation name is WriteCoolLogFile. 38) Use the logical name COOLLOGDIR. 39) Next to file naming conventions enter CoolLog.txt. 40) Select append to existing file. 41) To the right of the URL input box, select the gear symbol. 42) We want to create a new file of the delimited type. 43) The file name of the sample is C:\Testing\NewSampleData\CoolLoggedData.txt Choose Sample all rows. 44) We want to generate multiple records all of the same type. 45) The target namespace is http://coolexample.com/coollog. 46) The name containing multiple records is CoolInputLog. 47) The name containing each record is CoolInput. 48) The first field is named Date, the second is named FirstName and the last is named LastName. 49) The XSD file name is LogInput.xsd. 50) Test and then finish and then return to the adapter configuration wizard. To the left of the gear should be the URL of the XSD. Finish the wizard. 51) We need to associate the logical names with physical names. Do this by placing a complete file path as the value of the property element that is below the binding.jca element in composite.xml. C:\Testing\Log 52) We need a mediator to take the XML from the input adapter and write it to the output adapter. 53) Drag a mediator and place it in the Components Lane in the Composite Editor. Note that the input adapter is reading a file and generating XML. The output adapter is reading XML and generating an output file. 54) Name the mediator CoolMoverFromInputToOutput and define the interface later. 55) Click and drag to create a wire from the input adapter to the mediator. 56) Click and drag to create a wire from the mediator to the output adapter. 57) Double click the mediator and click the mapping icon to the right of "Transform Using". 58) This is a New XSLT mapper. Name it InputToLog.xsl 59) In the mapping editor on the left is the input XSD. On the right is the output XSD. 60) From Date Functions on the right, drag the current-date function to the middle lane. Drag and connect that to the Date element in the output tree. 61) Drag the name data from the input to the output as appropriate. You can view source to see the generated XSLT. 62) Deploy the project by right clicking the project and selecting deploy. 63) How will you Test it? Place the CoolArrivedData.txt file into the NewData directory and see if it soon disappears. The Archive and Log directories should be populated. 64) Inform your TA that you have completed the project and that it is deployed. The TA will log on to your virtual machine and test it with his/her own data file. In your email to the TA, be sure to include your name and your machine number. Part 2. ====== As described on the course slides, it is very easy to build a web service in Java using Jax-WS 2.0 and JDK 6. Java should be available at the DOS command line on the virtual machines. If it is not then type the following at the DOS command: set PATH=%PATH%;C:\Oracle\Middleware\SOASuite11gR1PS3\jdk160_21\bin Write a web service using JAX-WS as shown on the course slides. This web service will have a single method with the following signature: void log(String firstName, String lastName) The log method simply displays the first and last name to the console screen. Modify Part 1 of this assignment so that the mediator routes to this remote log method rather than the file adapter. When a file is copied to the NewData directory, the remote method should be visited for each person on the file. You may write your web service on any machine with a recent version of java and with a public IP address. If you prefer, you may write your web service on the VM's provided for the class. Simply work from a DOS shell and use the commands as provided in the slide set covering JAX-WS 2.0. The idea behind this part of the assignment is to demonstrate to you how easy it is to build a web service and how that web service may be accessed by the SOA Suite. Submit a screen shot showing your web service displaying the names on the file.