<?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:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-9138020222977432600</id><updated>2009-11-23T20:56:53.384-06:00</updated><title type='text'>CS 388/433: Web Services Programming</title><subtitle type='html'>Fall 2009 course website for CS 388/433: Web Services Programming at &lt;a href="http://www.cs.luc.edu/"&gt;Loyola University Chicago&lt;/a&gt;. </subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-3555297940499864768</id><published>2009-11-09T19:02:00.018-06:00</published><updated>2009-11-23T20:56:53.394-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 3</title><content type='html'>&lt;b&gt;Due date:&lt;/b&gt; Mon, 7 Dec (firm)&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Group project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An understanding of&lt;br /&gt;&lt;ul&gt;&lt;li&gt;message-based service integration&lt;/li&gt;&lt;li&gt;patterns of (message-based) enterprise application integration&lt;/li&gt;&lt;li&gt;Java Messaging Service (JMS)&lt;/li&gt;&lt;li&gt;Apache ActiveMQ framework&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Project Description and Background&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;In this project, you will develop a message-based model of a simple student-response system (classroom clickers).&lt;br /&gt;&lt;br /&gt;Classroom clickers are a simple, inexpensive way to bring interactivity into the classroom. A clicker is a hardware device that resembles a remote control but includes a small (usually LCD) display in addition to several response keys. Each classroom has its own channel to which students in the room should set their clickers. To query the students, the instructor opens a poll on the instructor console and verbally or visually expresses a multiple-choice question; the students then press the key on their clicker that corresponds to their answer and receive confirmation that their response has been received; the instructor then closes the poll, and no further responses are accepted. This process can then be repeated with other questions as needed.&lt;br /&gt;&lt;br /&gt;Further background information is available here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://frc.ua.edu/?page_id=342"&gt;UA faculty resources on clickers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www4.uwm.edu/ltc/srs/faculty/guides_manuals.cfm"&gt;UWM faculty resources on clickers&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;b&gt;Functional Requirements&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The device you will model in this project is described &lt;a href="http://frc.ua.edu/wp-content/uploads/2009/09/ttstudentguide.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Your system will have a simple text-based interface (CLI) to control the instructor console and the clickers. Valid commands are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;clicker N channel C&lt;/i&gt; - set the clicker with the given number to transmit on the specified channel&lt;/li&gt;&lt;li&gt;&lt;i&gt;clicker N respond R&lt;/i&gt; - send the specified response from the clicker with the given number and (asynchronously) report &lt;i&gt;whether or not&lt;/i&gt; the system has confirmed that it received the response&lt;/li&gt;&lt;li&gt;&lt;i&gt;classroom C open R&lt;/i&gt; - open a poll in the specified classroom with the given number of possible answers (numbered from 0 to R - 1)&lt;/li&gt;&lt;li&gt;&lt;i&gt;classroom C close&lt;/i&gt; - close the poll and print the number of responses for each possible answer&lt;/li&gt;&lt;/ul&gt;In any one classroom, there can be at most one open poll, but polls in different classrooms can overlap in time. Also&amp;nbsp;assume all clickers have already been registered.&lt;br /&gt;&lt;br /&gt;Your system should be configured to include three classrooms numbered 70 through 72 and five clickers numbered 500 through 504.&amp;nbsp;Here is an example session with such a system; system responses are shown in italics.&lt;br /&gt;&lt;br /&gt;clicker 500 channel 69&lt;br /&gt;&lt;i&gt;channel 69 invalid&lt;/i&gt; &lt;br /&gt;clicker 500 channel 70&lt;br /&gt;clicker 500 respond 2&lt;br /&gt;&lt;i&gt;channel 70 not accepting answers&lt;/i&gt;&lt;br /&gt;classroom 70 open 5&lt;br /&gt;clicker 500 respond 7&lt;br /&gt;&lt;i&gt;channel 70 &lt;span style="font-style: normal;"&gt;&lt;i&gt;received&amp;nbsp;&lt;span style="font-style: normal;"&gt;&lt;i&gt;invalid answer from clicker 500&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;clicker 500 respond 4&lt;br /&gt;&lt;i&gt;channel 70&amp;nbsp;received&amp;nbsp;valid&amp;nbsp;answer from clicker 500&lt;/i&gt;&lt;br /&gt;clicker 501 channel 70&lt;br /&gt;clicker 501 respond 2&lt;br /&gt;&lt;div style="margin: 0px;"&gt;&lt;i&gt;channel 70 received&amp;nbsp;valid&amp;nbsp;answer from clicker 501&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;classroom 70 close&lt;br /&gt;&lt;i&gt;responses: {0=0, 1=0, 2=1, 3=0, 4=1}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;Architectural and Other Nonfunctional Requirements&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Please use the SoccerStadiumActiveMQ example from the &lt;a href="http://code.google.com/p/luc-pervasive"&gt;repository&lt;/a&gt; as a starting point for all aspects of this project, including the text-based interface. Similarly to the example,&amp;nbsp;your system should model classrooms and clickers as separate objects.&lt;br /&gt;&lt;br /&gt;Furthermore, the following nonfunctional requirements apply:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The project is managed using Maven.&lt;/li&gt;&lt;li&gt;The system is configured using Spring.&lt;/li&gt;&lt;li&gt;Communication among components is provided using ActiveMQ (an embedded instance is recommended) through Spring's JMS support.&lt;/li&gt;&lt;li&gt;To increase reusability, the POJOs (components providing the logical functionality) should be architecturally separate from the wrappers that connect them with JMS and the CLI.&lt;/li&gt;&lt;li&gt;The system should include component-level unit tests of the POJOs as well as integration testing of the entire system. (The example above could be one integration test.) To facilitate integration testing, consider developing a console object with methods corresponding to the CLI commands and expected responses. The CLI itself would then become a thin layer on top of this console object.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Deliverables&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Working code in the repository.&lt;/li&gt;&lt;li&gt;Also in the repository, detailed documentation of your architecture and implementation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Please use the repository for your group for collaboration and notify me when your work is ready for me to review. No explicit submission will be required.&amp;nbsp;Submission by email will not be accepted.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-3555297940499864768?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/3555297940499864768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=3555297940499864768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3555297940499864768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3555297940499864768'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/11/project-3.html' title='Project 3'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-7024702832562917332</id><published>2009-08-24T17:27:00.012-05:00</published><updated>2009-11-09T18:58:28.743-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Tentative weekly course schedule</title><content type='html'>&lt;h2&gt;Week 1&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;organizational matters&lt;br /&gt;&lt;/li&gt;&lt;li&gt;overview&lt;/li&gt;&lt;li&gt;introduction to computing with services (&lt;a href="http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/slides/SOC-chapter1.ppt"&gt;ch 1&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.service-architecture.com/"&gt;SOA&lt;/a&gt; versus &lt;a href="http://www.programmableweb.com/"&gt;programmable web &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;connecting to and combining existing services: in-class demo&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 2&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;principles of service-oriented computing (&lt;a href="http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/slides/SOC-chapter5.ppt"&gt;ch 5&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;connecting to and combining existing services: in-class demo (continued)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 3&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;programming web services (&lt;a href="http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/slides/SOC-chapter3.ppt"&gt;ch 3&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;resource-oriented (REST) services (&lt;a href="http://oreilly.com/catalog/9780596529260/chapter/"&gt;Restlet book ch 4&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;project discussion&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 4&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;project 2b discussion&lt;/li&gt;&lt;li&gt;test 1&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 5&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;enterprise architectures (&lt;a href="http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/slides/SOC-chapter4.ppt"&gt;ch 4&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;basic standards for web services (&lt;a href="http://www.csc.ncsu.edu/faculty/mpsingh/books/SOC/slides/SOC-chapter2.ppt"&gt;ch 2&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;resource-oriented (REST) and process/flow-oriented (SOAP) views of services (&lt;a href="http://oreilly.com/catalog/9780596529260/chapter/"&gt;Restlet book ch 4&lt;/a&gt;&amp;nbsp;&amp;nbsp;and ch 10)&lt;/li&gt;&lt;li&gt;project 2b discussion (as needed)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 6&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;restful services&lt;/li&gt;&lt;li&gt;project 2b discussion&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 7&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;WS-* standards&lt;/li&gt;&lt;li&gt;stateful services&lt;/li&gt;&lt;li&gt;SOAP&lt;/li&gt;&lt;li&gt;test 2&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 8&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;SOAP&lt;/li&gt;&lt;li&gt;Apache CXF framework&lt;/li&gt;&lt;li&gt;project 2c discussion&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 9&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;project 2c discussion&lt;/li&gt;&lt;li&gt;message-based integration&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 10&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;message-based integration&lt;/li&gt;&lt;li&gt;project 3 discussion&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 11&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;message-based integration&lt;/li&gt;&lt;li&gt;project 3 discussion&lt;/li&gt;&lt;li&gt;test 3&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 12&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;semantic web&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h2&gt;Week 13&lt;br /&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;semantic web&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-7024702832562917332?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/7024702832562917332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=7024702832562917332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/7024702832562917332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/7024702832562917332'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/08/tentative-weekly-course-schedule.html' title='Tentative weekly course schedule'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-1460706207410152074</id><published>2009-09-14T15:44:00.088-05:00</published><updated>2009-11-06T14:53:05.337-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 2c</title><content type='html'>&lt;b&gt;Due date:&lt;/b&gt; Sat, 7 Nov&lt;br /&gt;&lt;b&gt;Group project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An understanding of&lt;br /&gt;&lt;ul&gt;&lt;li&gt;process-oriented web services&lt;/li&gt;&lt;li&gt;simple object access protocol (SOAP)&lt;/li&gt;&lt;li&gt;&lt;a href="http://cxf.apache.org/"&gt;Apache CXF framework&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Functional Requirements&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;In this project, you will build the &lt;i&gt;Recommendr&lt;/i&gt;&amp;nbsp;web service, which helps you manage your Participatr group subscriptions based on your preferences expressed as keywords.&lt;br /&gt;&lt;br /&gt;This stateful service will support the following &lt;i&gt;operations&lt;/i&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;setTermsRequired(terms: list of strings): void; in this and the following operations, the terms are words that occur in the group description&lt;/li&gt;&lt;li&gt;getTermsRequired(): list of strings&lt;/li&gt;&lt;li&gt;clearTermsRequired(): void&lt;/li&gt;&lt;li&gt;setTermsToAvoid(terms: list of strings): void&lt;/li&gt;&lt;li&gt;getTermsToAvoid(): list of strings&lt;/li&gt;&lt;li&gt;clearTermsToAvoid(): void&lt;/li&gt;&lt;li&gt;setMinGroupSize(size: int): void; -1 means no min&lt;/li&gt;&lt;li&gt;getMinGroupSize(): int&lt;/li&gt;&lt;li&gt;setMaxGroupSize(size: int): void; -1 means no max&lt;/li&gt;&lt;li&gt;getMaxGroupSize(): int&lt;/li&gt;&lt;li&gt;findMatchingGroups(): list of group URIs that match all criteria&lt;/li&gt;&lt;li&gt;findGroupsToAvoid(): list of group URIs that don't match at least one criterium&lt;/li&gt;&lt;li&gt;authenticateOnParticipatr(id: string, passwd: string): void // throws exception if unsuccessful&lt;/li&gt;&lt;li&gt;findMatchingUnsubscribedGroups():&amp;nbsp;list of URIs of unsubscribed groups that match all criteria (requires prior authentication)&lt;/li&gt;&lt;li&gt;findSubscribedGroupsToAvoid(): list of URIs of&amp;nbsp;subscribed groups that don't match at least one criterium (requires prior authentication)&lt;/li&gt;&lt;li&gt;subscribeToMatchingUnsubscribedGroups(): void&lt;/li&gt;&lt;li&gt;unsubscribeFromSubscribedGroupsToAvoid(): void&lt;/li&gt;&lt;/ul&gt;Furthermore, you will build a simple command-line client for this service. This client allows you to invoke the operations of the service in the form&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;recommendr operation arguments&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Extra Credit&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;For extra credit, use &lt;a href="http://oauth.net/"&gt;OAuth&lt;/a&gt; to give Recommendr access to Participatr accounts without Recommendr having to know the account passwords. (You will have to modify your Participatr service to support OAuth.)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;Architectural and Other Nonfunctional Requirements&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;The following nonfunctional requirements apply:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The project is managed using Maven.&lt;/li&gt;&lt;li&gt;Both the service and client should be equipped with comprehensive test suites.&lt;/li&gt;&lt;li&gt;CXF is used to implement the web service and client using wsdl2java (included with CXF).&lt;/li&gt;&lt;li&gt;Spring session-scoped proxies are used for data in session scope (please see examples).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;There are various CXF examples in the repository.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Deliverables&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Working code in the repository.&lt;/li&gt;&lt;li&gt;Also in the repository, detailed documentation of your architecture and implementation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Please use the repository for your group for collaboration and notify me when your work is ready for me to review. No explicit submission will be required.&amp;nbsp;Submission by email will not be accepted.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-1460706207410152074?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/1460706207410152074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=1460706207410152074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1460706207410152074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1460706207410152074'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/09/project-2c.html' title='Project 2c'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-7124548303611493817</id><published>2009-09-14T13:23:00.022-05:00</published><updated>2009-10-07T12:08:47.900-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 2b</title><content type='html'>&lt;b&gt;Due date:&lt;/b&gt; Mon, 12 Oct&lt;br /&gt;&lt;b&gt;Group project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An understanding of&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;Representational state transfer&lt;/a&gt;&amp;nbsp;(REST)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;Dependency injection&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Functional Requirements&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;In this project, you will build the &lt;i&gt;Participatr&lt;/i&gt; web service, which provides a very small subset of the functionality of &lt;a href="http://en.wikipedia.org/wiki/Meetup.com"&gt;Meetup.com&lt;/a&gt;, a social networking portal that facilitates offline group meetings.&lt;br /&gt;&lt;br /&gt;This system will support the following &lt;i&gt;entities&lt;/i&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Users, which have the following attributes&lt;/li&gt;&lt;ul&gt;&lt;li&gt;email address (also serves as unique ID)&lt;/li&gt;&lt;li&gt;first and last name&lt;/li&gt;&lt;li&gt;brief biography&lt;/li&gt;&lt;li&gt;groups in which the user is a member&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Groups, which have the following attributes&lt;/li&gt;&lt;ul&gt;&lt;li&gt;unique name&lt;/li&gt;&lt;li&gt;description&lt;/li&gt;&lt;li&gt;user who created the group&lt;/li&gt;&lt;li&gt;group members&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;The system will support the following &lt;i&gt;scenarios&lt;/i&gt;:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;user signs up&lt;/li&gt;&lt;li&gt;user changes his/her full name and/or biography&lt;/li&gt;&lt;li&gt;user deletes his/her account&lt;/li&gt;&lt;li&gt;user creates new group&lt;/li&gt;&lt;li&gt;user changes description of group he/she owns&lt;/li&gt;&lt;li&gt;user deletes group he/she owns&lt;/li&gt;&lt;li&gt;user views list of groups with descriptions and membership count&lt;/li&gt;&lt;li&gt;user joins group&lt;/li&gt;&lt;li&gt;user views members of group he/she owns or has joined&lt;/li&gt;&lt;li&gt;user leaves group&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;These entities will be exposed as addressable, interconnected resources with suitable representations, and the scenarios will be supported through the uniform HTTP request interface.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Architectural and Other Nonfunctional Requirements&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Overall, you should follow the architectural and design principles outlined here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xfront.com/REST-Web-Services.html" style="color: #de7008;"&gt;Building Web Services the REST Way&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oreilly.com/catalog/9780596529260/chapter/" style="color: #de7008;"&gt;The Resource-Oriented Architecture&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Your system should support at least these&amp;nbsp;two representations for&amp;nbsp;the user and group resources:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XHTML (suitable for a human user)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JSON (suitable for a programmatic client)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The key conceptual component of this project is to map the uniform REST verbs to the functionality described in the requirements. To some extent, we should do this part as a group in class and through the mailing list. The bookmarks example from chapter 7 of the REST book will help as well. Use the Spring-loaded version of this example, BookmarksRestletSpring from the course repository as a starting point; &lt;a href="http://www.2048bits.com/2008/06/creating-simple-web-service-with.html"&gt;this post&lt;/a&gt; describes how to use cURL to interact with this service.&lt;br /&gt;&lt;br /&gt;In addition, the following nonfunctional requirements apply to this project:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The project is managed using Maven.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.restlet.org/" style="color: #de7008;"&gt;Restlet&lt;/a&gt;&amp;nbsp;is used to expose the given functionality in a resource-oriented form. Where appropriate, suitable representations should be included that make the (read-only) functionality accessible through a web browser (XHTML). Otherwise, the functionality should be accessible&amp;nbsp;through cURL and&amp;nbsp;through a suitable client also implemented in Restlet (JSON).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There should be a comprehensive test suite following the approaches found in the LinearRegressionRestletSpring and NumguessRestletSpring examples. JUnit should be used to automate both types of tests:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Direct, local, component-level unit and integration testing of the domain objects (User, Group, and related objects) and any services you layered on top of the domain objects. (Local JUnit testing of the Restlet resources is not required in this project. I have not yet figured out how to do that.)&lt;/li&gt;&lt;li&gt;HTTP-client-based system-level testing of the service using the JSON representation.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Persistence is provided using&amp;nbsp;&lt;a href="http://www.db4o.com/" style="color: #de7008;"&gt;db4o&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Dependencies among components should be managed using the Spring framework.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Deliverables&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Working code in the repository.&lt;/li&gt;&lt;li&gt;Also in the repository, detailed documentation of your resource-oriented architecture, including&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a list of resources with a brief description of each&lt;/li&gt;&lt;li&gt;for each resource, the supported HTTP methods and their meaning/effect on the resource state (in terms of the scenarios listed above).&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Please use the repository for your group for collaboration and notify me when your work is ready for me to review. No explicit submission will be required.&amp;nbsp;Submission by email will not be accepted.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-7124548303611493817?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/7124548303611493817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=7124548303611493817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/7124548303611493817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/7124548303611493817'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/09/project-2b.html' title='Project 2b'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-861734227172020930</id><published>2009-08-31T14:02:00.052-05:00</published><updated>2009-09-14T11:49:40.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 2a</title><content type='html'>&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Due date: Fri, 11 Sep&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Individual project&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;An understanding of&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;web service access through HTTP&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;authentication and authorization for web service access&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;web service access through specific client libraries&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: inherit;"&gt;Familiarity with&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://maven.apache.org/"&gt;&lt;span style="font-family: inherit;"&gt;Maven&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;(mostly within Eclipse)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://code.google.com/apis/gdata/"&gt;Google Data APIs&lt;/a&gt;&amp;nbsp;(&lt;a href="http://code.google.com/apis/gdata/javadoc/"&gt;Javadoc reference for client libraries&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-09.html"&gt;&lt;span style="font-family: inherit;"&gt;Atom Publishing Protocol (APP)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family: inherit;"&gt;Part 1 (4 points)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;Perform the following steps:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Create a Google account if you don't yet have one.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Sign into &lt;/span&gt;&lt;a href="http://www.google.com/base/"&gt;&lt;span style="font-family: inherit;"&gt;Google Base&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; and create a few items through the web interface.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Following the &lt;/span&gt;&lt;a href="http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html"&gt;&lt;span style="font-family: inherit;"&gt;ClientLogin&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; documentation, use cURL to obtain an authorization token for your account (without using Captcha). For each request parameter, use a &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;-d&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; argument for cURL. Your response should contain three lines, one of which begins with &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Auth=&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;. The following value is the authorization token you will use in subsequent requests.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Now take a look at your list of items using the following HTTP GET request (all on one line):&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;curl&amp;nbsp;-H 'Authorization: GoogleLogin auth=YourToken' http://www.google.com/base/feeds/items/&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;In this list, you should see the embedded URLs of the individual items. Select and copy one of them. Now delete the item by submitting an HTTP DELETE request with the same Auth header as before directly to the item's URL.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Take another look at the list. The item you deleted should no longer be there.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Part 2 (6 points)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Perform the following steps:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Obtain a &lt;a href="http://code.google.com/apis/base/signup.html"&gt;Google Base API key&lt;/a&gt; for installed applications.&lt;/li&gt;&lt;li&gt;Check out the GDataJavaClientTest example from the &lt;a href="http://www.cs.luc.edu/laufer/teaching/examples"&gt;course repository&lt;/a&gt;, then update its Maven dependencies (right-click on project root node &amp;gt; Maven &amp;gt; Update Dependencies). There should be no more compile-time errors (as indicated by red Xs).&lt;/li&gt;&lt;li&gt;Enter your API key and your authorization token in the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;test/main.properties&lt;/span&gt; file.&amp;nbsp;All the existing JUnit tests should now pass (run them by right-clicking on the project root node &amp;gt; Run As &amp;gt; JUnit Test).&amp;nbsp;&lt;/li&gt;&lt;li&gt;Add another test method (with the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;@Test&lt;/span&gt; annotation) that does the following:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Insert several items of item type &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;TestOnly&lt;/span&gt;, each with a float-unit attribute indicating the item's price.&lt;/li&gt;&lt;li&gt;Iterate through your feed and count the items with this item type and compute their average price. Use assertions to ensure that the item count and average price are as expected.&lt;/li&gt;&lt;li&gt;Iterate through&amp;nbsp;your feed again to increase each item's price by the same percentage.&lt;/li&gt;&lt;li&gt;Iterate through&amp;nbsp;your feed one more time to compute the new average. Check that it has gone up by the same percentage.&lt;/li&gt;&lt;li&gt;Iterate through&amp;nbsp;your feed to delete all items you created at the beginning of this test method.&lt;/li&gt;&lt;li&gt;Iterate through&amp;nbsp;your feed one last time to make sure the items are gone.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Deliverables&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Part 1: Screenshot or other form of transcript of your&amp;nbsp;complete command-line interaction with Google Base.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Part 2: Complete, working project with the additional test case.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;Please follow these&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.cs.luc.edu/laufer/teaching/submit" style="color: #de7008;"&gt;&lt;span style="font-family: inherit;"&gt;online submission instructions&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;. Submission by email, especially to the mailing list, is highly discouraged.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-861734227172020930?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/861734227172020930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=861734227172020930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/861734227172020930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/861734227172020930'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/08/project-2a.html' title='Project 2a'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-3460706538902588415</id><published>2009-08-31T13:12:00.012-05:00</published><updated>2009-09-14T11:49:40.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 1</title><content type='html'>&lt;b&gt;Due date: Fri, 4 Sep&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Individual project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Installation of and familiarity with required software &lt;br /&gt;&lt;/li&gt;&lt;li&gt;An understanding of the &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol"&gt;HTTP&lt;/a&gt; protocol &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Initial experiments with web service access&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Part 1: Installing cURL&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;a href="http://curl.haxx.se/"&gt;cURL&lt;/a&gt; is a command-line data transfer tool that supports HTTP, among several other common protocols. Therefore, it can play the role of a command-line web user agent (commonly called browser).&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You should set up cURL in at least one of the following ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It should be installed by default on Mac OS X.&lt;/li&gt;&lt;li&gt;Install using the package management system for your platform, e.g., &lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;sudo apt-get install curl ca-certificates&lt;/span&gt; on Ubuntu.&lt;/li&gt;&lt;li&gt;&lt;a href="http://curl.haxx.se/download.html"&gt;Download&lt;/a&gt; an appropriate version for your platform &lt;i&gt;with SSL support&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;Use it remotely by logging on to one of the departmental hosts, random.cs.luc.edu or infinity.cs.luc.edu.&lt;/li&gt;&lt;/ul&gt;Test the &lt;a href="http://en.wikipedia.org/wiki/HTTP_Secure"&gt;HTTPS&lt;/a&gt; support of your cURL installation as follows. You need your own &lt;a href="http://delicious.com/help/api"&gt;Delicious&lt;/a&gt; account or your own &lt;a href="http://apiwiki.twitter.com/Twitter-API-Documentation"&gt;Twitter&lt;/a&gt; account.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;curl -u yourid https://api.del.icio.us/v1/tags/get&lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;curl -u yourid https://twitter.com/statuses/friends_timeline.xml&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;cURL will prompt you for the password. In either case, you should see a response in XML format (with lots of angular brackets). If you see any error messages pertaining to missing SSL support, double-check your installation and try again. If you don't have any bookmarks or friends, your response will be essentially empty, for example, &lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;lt;posts user="yourid" ...&amp;gt; &amp;lt;/posts&amp;gt;&lt;/span&gt;, but that's still a successful interaction with the service.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Part 2: Installing Eclipse&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We are using Yoxos to manage our Eclipse configurations. In particular, I have created a configuration for this class. To obtain a distribution for your OS based on this configuration:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ondemand.yoxos.com/geteclipse/start" target="_blank"&gt;http://ondemand.yoxos.com/&lt;wbr&gt;&lt;/wbr&gt;geteclipse/start&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Public Profiles &amp;gt; Loyola University Chicago&lt;/li&gt;&lt;li&gt;select complete-javaee-fall2009&lt;/li&gt;&lt;li&gt;press green arrow&lt;/li&gt;&lt;li&gt;press start download button&lt;/li&gt;&lt;/ul&gt;(You can also manage your own configurations on Yoxos and use this one as a starting point.)&lt;br /&gt;&lt;br /&gt;If Eclipse runs out of memory, please follow these directions.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F"&gt;Increasing the heap size for Eclipse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/FAQ_How_do_I_increase_the_permgen_size_available_to_Eclipse%3F"&gt;Increasing the permgen size for Eclipse&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Deliverables&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Screenshot or other form of transcript of your successful access to the Delicious or Twitter web service.&lt;/li&gt;&lt;li&gt;Screenshot of your Eclipse configuration showing the successful execution of a &lt;span style="font-family: 'Courier New',Courier,monospace;"&gt;HelloYourname&lt;/span&gt; Java project that prints &lt;i&gt;Hello Yourname&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;Please follow these &lt;a href="http://www.cs.luc.edu/laufer/teaching/submit"&gt;online submission instructions&lt;/a&gt;. Submission by email, especially to the mailing list, is highly discouraged.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-3460706538902588415?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/3460706538902588415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=3460706538902588415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3460706538902588415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3460706538902588415'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/08/project-1.html' title='Project 1'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-555184493381727578</id><published>2009-08-24T15:56:00.004-05:00</published><updated>2009-08-25T17:22:31.227-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 0</title><content type='html'>&lt;div class="plain"&gt;&lt;h2&gt;Discussion Group Subscription&lt;br /&gt;&lt;/h2&gt;The first part of this project, due immediately, requires you to subscribe to the &lt;a href="http://groups.google.com/group/luc-cs-433/"&gt;discussion group&lt;/a&gt; for this course.  Keep in mind that you are responsible for being familiar with any information exchanged on this discussion group.&lt;br /&gt;&lt;h2&gt;Linux Account Verification&lt;/h2&gt;The second part of this project, also due immediately, requires you to verify that your departmental Linux account works. (If you are a new student, you should have received email about your account.) This account is separate from your Loyola account and will allow you to use the lab machines as well as the cvs.cs.luc.edu server (we will use the CVS system for version control in conjunction with team-based development). If you have any problems with your Linux account, please contact our &lt;a href="http://www.cs.luc.edu/people/staff/my"&gt;lab manager&lt;/a&gt; right away.&lt;br /&gt;&lt;h2&gt;Group Formation&lt;/h2&gt;The last part of this project, due within about two weeks, requires you to form a project work group with other fellow students. The groups should be of size three. The groups should stay the same throughout the semester.&lt;br /&gt;Once you have formed your group, please &lt;a href="http://www.cs.luc.edu/laufer/teaching/contact/sendmail"&gt;send me email&lt;/a&gt; containing a list of all group members with the user IDs for their departmental Unix accounts.&lt;br /&gt;For each subsequent project, there will be one submission and consequently one grade per group.&lt;br /&gt;&lt;h2&gt;Submission&lt;/h2&gt;There  is no submission required for this project, other than sending the list of group members by email.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-555184493381727578?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/555184493381727578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=555184493381727578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/555184493381727578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/555184493381727578'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/08/project-0.html' title='Project 0'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-1949415847265567690</id><published>2009-08-24T16:42:00.001-05:00</published><updated>2009-08-24T16:46:56.496-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Tentative project roadmap</title><content type='html'>&lt;ul&gt;&lt;li&gt;connecting to and combining existing services: details TBA&lt;/li&gt;&lt;li&gt;implementing resource-based services: Restlet.org&lt;br /&gt;&lt;/li&gt;&lt;li&gt;implementing process-based (flow-based) services: Apache CXF&lt;br /&gt;&lt;/li&gt;&lt;li&gt;message-based service integration: Apache Camel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(time permitting) implementing agent-based and semantic web services: JADE, Jena&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-1949415847265567690?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/1949415847265567690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=1949415847265567690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1949415847265567690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1949415847265567690'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2009/08/tentative-project-roadmap.html' title='Tentative project roadmap'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-987512815216511186</id><published>2008-01-28T17:58:00.008-06:00</published><updated>2009-08-24T16:35:54.427-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Course objectives</title><content type='html'>The overall objective of this course is an understanding of service-oriented computing as an architectural approach for loosely-coupled distributed applications. Specific objectives include an understanding of &lt;br /&gt;&lt;ul&gt;&lt;li&gt;resource-, process-, and agent-based views of services&lt;/li&gt;&lt;li&gt;the implementation of service-based applications through service composition, coordination, and description&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the use of service-based applications through service selection, engagement, and evaluation&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-987512815216511186?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/987512815216511186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=987512815216511186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/987512815216511186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/987512815216511186'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/01/course-objectives.html' title='Course objectives'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-6047447287128623759</id><published>2008-02-04T16:33:00.001-06:00</published><updated>2009-08-24T16:16:33.589-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Tentative weekly course schedule</title><content type='html'>&lt;h2&gt;Week 1&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;organizational matters&lt;br /&gt;&lt;/li&gt;&lt;li&gt;overview&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 2&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;distributed information systems&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 3&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;middleware&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 4&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;enterprise application integration&lt;/li&gt;&lt;li&gt;web technologies&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 5&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;quiz 1 (after the lecture)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;web services&lt;/li&gt;&lt;li&gt;basic web services technology&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 6&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;basic web services technology&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 7&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;service composition&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 8&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;quiz 2 (after the lecture)&lt;/li&gt;&lt;li&gt;service coordination&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 9&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;service composition using representational state transfer (REST)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 10&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;service composition using representational state transfer (REST)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 11&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;quiz 3 (after the lecture)&lt;/li&gt;&lt;li&gt;enterprise integration using asynchronous messaging&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 12&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;enterprise integration using asynchronous messaging&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Week 13&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;outlook&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-6047447287128623759?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/6047447287128623759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=6047447287128623759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/6047447287128623759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/6047447287128623759'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/02/tentative-weekly-course-schedule.html' title='Tentative weekly course schedule'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-3651556347350188542</id><published>2008-01-14T18:57:00.001-06:00</published><updated>2009-08-24T16:01:46.783-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='2009fall'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Organizational matters</title><content type='html'>&lt;ul&gt;&lt;li&gt;introduction&lt;/li&gt;&lt;li&gt;contact info&lt;/li&gt;&lt;li&gt;office hours&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/luc-cs-433"&gt;discussion group&lt;/a&gt;&lt;/li&gt;&lt;li&gt;prerequisites&lt;/li&gt;&lt;li&gt;grading criteria&lt;/li&gt;&lt;li&gt;textbooks&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-3651556347350188542?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/3651556347350188542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=3651556347350188542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3651556347350188542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3651556347350188542'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/01/organizational-matters.html' title='Organizational matters'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-1048465121597918901</id><published>2008-01-28T20:28:00.000-06:00</published><updated>2009-08-24T13:53:25.661-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Software required for this course</title><content type='html'>Here is an initial list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/downloads/"&gt;Eclipse IDE for Java EE developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://m2eclipse.codehaus.org/"&gt;Maven Integration for Eclipse&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If Eclipse runs out of memory, please follow these directions.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F"&gt;Increasing the heap size for Eclipse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.eclipse.org/FAQ_How_do_I_increase_the_permgen_size_available_to_Eclipse%3F"&gt;Increasing the permgen size for Eclipse&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Further updates coming soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-1048465121597918901?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/1048465121597918901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=1048465121597918901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1048465121597918901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1048465121597918901'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/01/software-required-for-this-course.html' title='Software required for this course'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-5083280593787829235</id><published>2008-01-14T19:36:00.000-06:00</published><updated>2009-08-24T13:53:25.661-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 0</title><content type='html'>&lt;ul&gt;&lt;li&gt;subscribe to the Google discussion group&lt;/li&gt;&lt;li&gt;form a project team of size 3 (preferred)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-5083280593787829235?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/5083280593787829235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=5083280593787829235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/5083280593787829235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/5083280593787829235'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/01/project-0.html' title='Project 0'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-4629599618824417695</id><published>2008-03-31T17:18:00.003-05:00</published><updated>2009-08-24T13:53:25.660-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 2</title><content type='html'>&lt;h2&gt;Due Date: Wednesday, 30 April (firm)&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;Group project&lt;/h2&gt;&lt;h2&gt;Functional and Architectural Requirements&lt;/h2&gt;In this project, you will have the opportunity to implement a resource-oriented &lt;span style="font-style: italic;"&gt;reservation system&lt;/span&gt;. You should follow &lt;a href="http://www.cs.luc.edu/laufer/teaching/442/projects/requirements/"&gt;these requirements&lt;/a&gt;, using your web application from the previous semester as a starting point.&lt;br /&gt;&lt;br /&gt;Overall, you should follow the architectural and design principles outlined here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xfront.com/REST-Web-Services.html"&gt;Building Web Services the REST Way&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oreilly.com/catalog/9780596529260/chapter/"&gt;The Resource-Oriented Architecture&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Your system should support at least two representations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XHTML (suitable for a human user)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;JSON or concise XML (suitable for a programmatic client)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The key conceptual component of this project is to map the uniform REST verbs to the functionality described in the requirements. To some extent, we should do this part as a group in class and through the mailing list. The example from chapter 7 of the REST book should help as well.&lt;br /&gt;&lt;h2&gt;Other Non-Functional Requirements&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;The project is managed using Maven.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.restlet.org/"&gt;Restlet&lt;/a&gt; is used to expose the given functionality in a resource-oriented form. Where appropriate, suitable representations should be included that make the functionality accessible through a web browser (XHTML). Otherwise, the functionality should be accessible through a suitable client also implemented in Restlet (JSON or XML).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There should be a comprehensive test suite involving direct and client-based testing (using the chosen data representation) of the available functionality.&lt;/li&gt;&lt;li&gt;Persistence is provided using Hibernate as in your web application starting point, or you may switch to &lt;a href="http://www.db4o.com/"&gt;db4o&lt;/a&gt; instead.&lt;/li&gt;&lt;li&gt;Dependencies should be managed using the Spring framework.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Submission&lt;/h2&gt;Please use the repository for your group for collaboration and notify me when your work is ready for me to review. No explicit submission will be required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-4629599618824417695?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/4629599618824417695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=4629599618824417695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/4629599618824417695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/4629599618824417695'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/03/project-2.html' title='Project 2'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-2684367820072028699</id><published>2008-03-31T13:59:00.000-05:00</published><updated>2009-08-24T13:53:25.660-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 3</title><content type='html'>&lt;h2&gt;Due Date: Wed 9 April (outline); Mon 21 April (presentation)&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;Group project&lt;/h2&gt;&lt;h2&gt;Description&lt;br /&gt;&lt;/h2&gt;In this project, you will have the opportunity to investigate a topic of interest in the area of web services.&lt;br /&gt;&lt;br /&gt;Given the remaining time of the semester and the length of each presentation, you are not expected to conduct an exhaustive study of your topic. The purpose of this project is for you to find and present some starting points for using a particular technology or discuss the utility of some general approach. Please consult with me if you have any questions.&lt;br /&gt;&lt;h2&gt;Deliverables&lt;br /&gt;&lt;/h2&gt;This project consists of the following deliverables:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Brief outline of your presentation &lt;span style="font-style: italic;"&gt;due on 9 April&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Brief (15-20 minutes) in-class presentation of your findings (followed by up to 5 minutes of questions) &lt;span style="font-style: italic;"&gt;on 21 April or before&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Accompanying materials, such as electronic copies of your visual presentation, code examples, etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Possible topics&lt;/h2&gt;Here are some possible topics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.enterpriseintegrationpatterns.com/"&gt;Message-based enterprise application integration&lt;/a&gt; (e.g. &lt;a href="http://activemq.apache.org/camel/"&gt;Apache Camel&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Enterprise_service_bus"&gt;Enterprise service bus (ESB)&lt;/a&gt; approaches (e.g. &lt;a href="http://mule.mulesource.org/display/MULE/Home"&gt;Mule&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/webservices/default.aspx"&gt;.NET web service technologies&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.acegisecurity.org/"&gt;Spring security (Acegi)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.josso.org/"&gt;Java Open Single Sign-On (JOSSO)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;You are welcome to choose other relevant topics pending my approval.&lt;br /&gt;&lt;h2&gt;Submission&lt;/h2&gt; Please refer to the &lt;a href="http://www.cs.luc.edu/laufer/teaching/submit"&gt;online submission procedure&lt;/a&gt;. Each team is to make exactly one submission. Any written materials should be submitted either in PDF format or through Google Docs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-2684367820072028699?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/2684367820072028699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=2684367820072028699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/2684367820072028699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/2684367820072028699'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/03/project-3.html' title='Project 3'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-1199582723022317978</id><published>2008-02-25T18:41:00.000-06:00</published><updated>2009-08-24T13:53:25.660-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 1</title><content type='html'>&lt;h2&gt;Due Date: Wednesday, 26 March&lt;/h2&gt;&lt;h2&gt;Group project&lt;/h2&gt;&lt;h2&gt;Functional and Architectural Requirements&lt;/h2&gt;In this project, you will have the opportunity to implement a service-oriented &lt;span style="font-style: italic;"&gt;voter registration system&lt;/span&gt;. The system consists of the following components.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Voter registration web service with the following capabilities:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;set current ZIP code (stored in HTTP session scope)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;register a voter (stored persistently, generates a confirmation number)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;check whether a voter is registered&lt;br /&gt;&lt;/li&gt;&lt;li&gt;modify a voter&lt;/li&gt;&lt;li&gt;remove a voter&lt;br /&gt;&lt;/li&gt;&lt;li&gt;list all registered voters&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Voter registration client that exposes the capabilities of the web service through a simple command-line interface.&lt;/li&gt;&lt;/ul&gt;For each voter, at least the following information is captured:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;confirmation number as unique key&lt;br /&gt;&lt;/li&gt;&lt;li&gt;name&lt;/li&gt;&lt;li&gt;zip code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Other Non-Functional Requirements&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;The project is managed using Maven.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Both the service and client should be equipped with comprehensive test suites.&lt;/li&gt;&lt;li&gt;CXF is used to implement  the web service and client using wsdl2java.&lt;/li&gt;&lt;li&gt;Spring session-scoped proxies are used for data in session scope.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Persistence is provided using Hibernate.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;References&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Example projects&lt;/li&gt;&lt;ul&gt;&lt;li&gt;LinearRegressionMaven (442 repository)&lt;/li&gt;&lt;li&gt;CXF examples in 433 repository&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;CXF documentation&lt;/li&gt;&lt;li&gt;Hibernate documentation&lt;/li&gt;&lt;li&gt;Maven documentation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Submission&lt;/h2&gt;A repository for each group will be created shortly. No explicit submission will be required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-1199582723022317978?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/1199582723022317978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=1199582723022317978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1199582723022317978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/1199582723022317978'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/02/project-1_25.html' title='Project 1'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9138020222977432600.post-3576637614326804089</id><published>2008-04-22T10:57:00.002-05:00</published><updated>2009-08-24T13:53:25.659-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008spring'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Project 3 presentations</title><content type='html'>&lt;ul&gt;&lt;li&gt;Blanche Faur and Bhavana Shanbhag: &lt;a href="http://webpages.cs.luc.edu/%7Elaufer/teaching/433/josso.pdf"&gt;Java Open Single Sign-On (JOSSO)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Emily Brand, Aureliusz Rempala, and Fan Wang: &lt;a href="http://webpages.cs.luc.edu/~laufer/teaching/433/AcegiSecurity.pdf"&gt;Acegi/Spring Security&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Seiya Kawashima, Eric West, and Paul Zolnierczyk: &lt;a href="http://webpages.cs.luc.edu/~laufer/teaching/433/GoogleWebToolkit.pdf"&gt;Google Web Toolkit (GWT)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9138020222977432600-3576637614326804089?l=cs433.laufer.cs.luc.edu' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cs433.laufer.cs.luc.edu/feeds/3576637614326804089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=9138020222977432600&amp;postID=3576637614326804089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3576637614326804089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9138020222977432600/posts/default/3576637614326804089'/><link rel='alternate' type='text/html' href='http://cs433.laufer.cs.luc.edu/2008/04/project-3-presentations.html' title='Project 3 presentations'/><author><name>Konstantin</name><uri>http://www.blogger.com/profile/07858403962357318797</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01678707315460052671'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>