首页
编程语言
数据库
网络开发
Algorithm算法
移动开发
系统相关
金融统计
人工智能
其他
首页
>
> 详细
讲解php,XM 语言程序、JSP编程辅导留学生、讲解留学生XML 语言语言、Java语言辅导 辅导留学生 Statistics统计、回归、迭代|讲解数据库
Handin Dates
1. 27th of August at 5:00 pm - Submit a design sketch via Canvas (PDF)
2. 16th of September at 11:00 pm - Submit revision 1 of your assignment 2 via websubmission
3. 11th of October at 5:00 pm - Submit the final version of your assignment 2 via websubmissin
4. 12th of October at 5:00 pm - Submit assignment 2 reflections via Canvas (PDF) - in this page
Setting Up Version Control
Getting to know Subversion
This course uses Subversion (svn). Svn is a powerful version control system to help maintain a coherent copy of a project that can be worked on from multiple locations. We will also use svn as the handin mechanism throughout this course. Click here to learn more.
Creating the assignment directory in your svn repository
Run the following command in terminal.
svn mkdir --parents -m "DS assignment 2" https://version-control.adelaide.edu.au/svn/axxxxxxx/2018/s2/ds/assignment2
Replace axxxxxxx with your student ID number.
This command will create an empty directory named 2018/s2/ds/assignment2 in your svn repository.
You can access your new assignment directory via https://version-control.adelaide.edu.au/svn/axxxxxxx/2018/s2/ds/assignment2
Checking out a working version of your assignment
If you are working at home on your personal computer, you can checkout your svn repository running the following command in terminal.
svn checkout https://version-control.adelaide.edu.au/svn/axxxxxxx/2018/s2/ds/assignment2 ds-18-s2-assignment2
ds-18-s2-assignment2 is an optional argument that specifies the destination path for your repository on your local machine.
Note that you can have more than one copy of your code checked out, you will need to update it to avoid conflicts.
See the svn documentation for details on how this can be done. However, for now, we will assume you have just the one working copy.
Working in your repository
As you work on your code you will be adding and committing files to your repository. The Subversion documentation explains and has examples on performing these actions.
It is strongly advised that you:
? Commit regularly
? Use meaningful commit messages
? Develop your tests incrementally
Assignment Submission
Use the Computer Science Web Submission System system to submit assignments.
You are allowed to commit as many times as you like.
The Web Submission System will only perform basic checks for any required files.
On submission there will be not assigned marks.
The assignment will be marked by a teacher who will upload the marks into the Web Submission System. Keep an eye on the forums for announcements regarding marks.
Assignment Description
Objective
To gain an understanding of what is required to build a client/server system, by building a simple system that aggregates and distributes ATOM feeds.
Introduction
Information management and tracking becomes more difficult as the number of things to track increases. For most users, the number of web pages that they wish to keep track of is quite large and, if they had to remember to check everything manually, it's easy to forget a webpage or two when you're tired or busy. Enter syndication, a mechanism by which a website can publish summaries as a feed that you can sign up to, so that you can be notified when something new has happened and then, if it interests you, go and look at it. Initial efforts in the world of syndication included the development of the RSS family of protocols but these are, effectively, not standardised. The ATOM syndication protocol is a standards-based approach to try and provide a solid basis for syndication. You can see the ATOM RFC here (Links to an external site.)Links to an external site. although you won't be implementing all of it!
XML-based formats are easy to transport via Hypertext Transport Protocol (HTTP), the workhorse protocol of the Web, and it is increasingly common to work with a standard format for interchange between clients and servers, rather than develop a special protocol for one small group of clients and servers. Where, twenty years ago, we might have used byte-boundary defined patterns in transmitted data to communicate, it is far more common to use XML-based standards and existing HTTP mechanisms to shunt things around. This is socket-based communication between client and server and does not need to use the Java RMI mechanism to support it - as you would expect as you don't have to use an RMI client to access a web page! In this prac, you will take data and convert it into ATOM format and then send it to a server. The server will check it and then distribute a limited form of that data to every client who connects and asks for it. When you want to change the data in the server, you overwrite the existing file, which makes the update operation idempotent (you can do it as many times as you like and get the same result). The real test of your system will be that you can accept PUT and GET requests from other students on your server and your clients can talk to them. As always, don't share code.
Syndication Servers
Syndication servers are web servers that serve XML documents which conform to the RSS or ATOM standards. On receipt of an HTTP GET, the server will respond with an XML response like this (from "Creating an ATOM feed in PHP" (Links to an external site.)Links to an external site.):
Fishing Reports
The latest reports from fishinhole.com
2015-07-03T16:19:54-05:00
NameOfYourBoss
nameofyourboss@fishinhole.com
tag:fishinhole.com,2008:http://www.fishinhole.com/reports
Speckled Trout In Old River
tag:fishinhole.com,2008:http://www.fishinhole.com/reports/report.php?id=4
2009-05-03T04:59:00-05:00
ReelHooked
Limited out by noon
...
The server, once configured, will serve out this ATOM XML file to any client that requests it over HTTP. Usually, this would be part of a web-client but, in this case, you will be writing the aggregation server, the content servers and the read clients. The content server will PUT content on the server, while the read client will GET content from the server.
Elements
The main elements of this assignment are:
? An ATOM server (or aggregation server) that responds to requests for feeds and also accepts feed updates from clients. The aggregation server will store feed information persistently, only removing it when the content server who provided it is no longer in contact, or when the feed item is not one of the most recent 25.
? A client that makes an HTTP GET request to the server and then displays the feed data, stripped of its XML information.
? A CONTENT SERVER that makes an HTTP PUT request to the server and then uploads a new version of the feed to the server, replacing the old one. This feed information is assembled into ATOM XML after being read from a file on the content server's local filesystem.
All code elements will be written in the Java programming language. Your clients are expected to have a thorough failure handling mechanism where they behave predictably in the face of failure, maintain consistency, are not prone to race conditions and recover reliably and predictably.
Summary of this prac
In this assignment, you will build the aggregation system described below, including a failure management system to deal with as many of the possible failure modes that you can think of for this problem. This obviously includes client, server and network failure, but now you must deal with the following additional constraints (come back to these constraints after you read the description below):
1. Multiple clients may attempt to GET simultaneously and are required to GET the aggregated feed that is correct for the Lamport clock adjusted time if interleaved with any PUTs. Hence, if A PUT, a GET, and another PUT arrive in that sequence then the first PUT must be applied and the content server advised, then the GET returns the updated feed to the client then the next PUT is applied. In each case, the participants will be guaranteed that this order is maintained if they are using Lamport clocks.
2. Multiple content servers may attempt to simultaneously PUT. This must be serialised and the order maintained by Lamport clock timestamp.
3. Your aggregation server will expire and remove any content from a content server that it has not communicated within the last 15 seconds. You may choose the mechanism for this but you must consider efficiency and scale.
4. All elements in your assignment must be capable of implementing Lamport clocks, for synchronization and coordination purposes.
Your Aggregation Server
To keep things simple, we will assume that there is one file in your filesystem which contains a list of entries and where are they come from. It does not need to be an ATOM format, but it must be able to convert to a standard ATOM file when the client sends a GET request. However, this file must survive the server crashing and re-starting, including recovering if the file was being updated when the server crashed! Your server should restore it as was before re-starting or a crash. You should, therefore, be thinking about the PUT as a request to handle the information passed in, possibly to an intermediate storage format, rather than just as overwriting a file. This reflects the subtle nature of PUT - it is not just a file write request! You should check the feed file provided from a PUT request to ensure that it is valid. The file details that you can expect are detailed in the Content Server specification.
All the entities in your system must be capable of maintaining a Lamport clock.
The first time your ATOM feed is created, you should return status 201 - HTTP_CREATED. If later uploads are ok, you should return status 200. (This means, if a Content Server first connects to the Aggregtion Server, then return 201 as succeed code, then before the content server lost connection, all other succeed response should use 200). Any request other than GET or PUT should return status 400 (note: this is not standard but to simplify your task). Sending no content to the server should cause a 204 status code to be returned. Finally, if the ATOM XML does not make sense you may return status code 500 - Internal server error.
Your server will, by default, start on port 4567 but will accept a single command line argument that gives the starting port number. Your server's main method will reside in a file called AggregationServer.java.
Your server is designed to stay current and will remove any items in the feed that have come from content servers which it has not communicated with for 15 seconds. How you do this is up to you but please be efficient!
Your GET client
Your GET client will start up, read the command line to find the server name and port number (in URL format) and will send a GET request for the ATOM feed. This feed will then be stripped of XML and displayed, one line at a time, with the attribute and its value. Your GET client's main method will reside in a file called GETClient.java. Possible formats for the server name and port number include "http://servername.domain.domain:portnumber", "http://servername:portnumber" (with implicit domain information) and "servername:portnumber" (with implicit domain and protocol information).
You should display the output so that it is easy to read but you do not need to provide active hyperlinks. You should also make this client failure-tolerant and, obviously, you will have to make your client capable of maintaining a Lamport clock.
Your Content Server
Your content server will start up, reading two parameters from the command line, where the first is the server name and port number (as for GET) and the second is the location of a file in the file system local to the Content Server (It is expected that this file located in your project folder). The file will contain a number of fields from the ATOM format that are to be assembled into an ATOM XML feed and then uploaded to the server. You may assume that all fields are text and that there will be no embedded HTML or XHMTL. The list of ATOM elements that you need to support are:
? title
? subtitle
? link
? updated
? author
? name
? id
? entry
? summary
Input file format
To make parsing easier, you may assume that input files will follow this format:
title:My example feed subtitle:for demonstration purposes link:www.cs.adelaide.edu.au updated:2015-08-07T18:30:02Z author:Santa Claus id:urn::uuid:60a76c80-d399-11d9-b93C-0003939e0af6 entry title:Nick sets assignment link:www.cs.adelaide.edu.au/users/third/ds/ id:urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a updated:2015-08-07T18:30:02Z summary:here is some plain text. Because I'm not completely evil, you can assume that this will always be less than 1000 characters. And, as I've said before, it will always be plain text. entry title:second feed entry link:www.cs.adelaide.edu.au/users/third/ds/14ds2s1 id:urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6b updated:2015-08-07T18:29:02Z summary:here's another summary entry which a reader would normally use to work out if they wanted to read some more. It's quite handy.
Note that the author field only contains a name and that you will have to convert this into a name element inside an author element. An entry is terminated by either another entry keyword, or by the end of file, which also terminates the feed. You may reject any feed or entry with no title, link or id as being in error. You may ignore any markup in a text field and just print it as is.
PUT message format
Your PUT message should take the format:
PUT /atom.xml HTTP/1.1 User-Agent: ATOMClient/1/0 Content-Type: (You should work this one out) Content-Length: (And this one too)
(And then your file of data) ...
Your content server will need to confirm that it has received the correct acknowledgment from the server and then check to make sure that the information is in the feed as it was expecting. It must also support Lamport clocks.
Some basic suggestions
The following would be a good approach to solving this problem:
? Think about how you will test this and how you are going to build each piece. What are the individual steps?
? Write a simple version of your servers and client to make sure that you can communicate between them.
? Use known working ATOM feeds for testing parts of your system and read all of the relevant spec sections carefully!
? There are many default Java XML parsers out there, learn how to use them rather than write your own. Both options are acceptable, but we have found that it does save time to use existing ones (if not for anything, you have a ton of tutorials out there!)
? We strongly recommend that you implement this assignment using Sockets rather than HttpServer
? Try modularising your code; for example, ATOM Feed parse function is required in all places, so it is better to have all those functions in one class, then reused in other places.
Notes on Lamport Clocks
Please note that you will have to implement Lamport clocks and the update mechanisms in your entire system. This implies that each entity will keep a local Lamport clock and that this clock will get updated as the entity communicates with other entities or processes events. It is up to you to determine which events (such as send, receive or processing) the entity will consider in the Lamport clock update (for example, a System.out.println might not be interesting). This granularity will influence the performance of your implementation. The local Lamport clocks will need to be sent through to other entities with every message/request (like in the request header) - you are responsible for ensuring that this tagging occurs and for the local update of Lamport clocks once messages/requests are received. Towards this, follow the algorithm discussed in class and/or in the Lamport clocks paper accessible from the forum. As part of this requirement, we are aware that your method for embedding Lamport clock information in your communications may mean that you lose interoperability with other clients and servers. This is an acceptable outcome for this assignment but, usually, we would take a standards-based approach to ensure that we maintain interoperability.
And lastly,
START EARLY!
Don't get caught out at the last minute trying to do the entire assignment at once - it is easy to misjudge the complexity and hours required for this assignment.
Contact the course coordinator, lectures or tutors if you need help getting started.
You are encouraged to post questions on the forums.
Submissions
Design Sketch
The design sketch is a rough architecture of your system for us to be able to provide feedback on early. You may want to consider use cases of your system and the flow of information through it in the sketch, or simply the components you have thought of and where they sit in the system.
Hints:
? Functional analysis is good
? A component view (even if it's extremely coarse: clients, Atom server, content servers) is required
? Multi-threaded interactions are a good place to focus some design effort. Show how you ensure that your thread interactions are safe (no races or unsafe mutations) and live (no deadlocks).
? Explain how many server replicas you need and why
? UML is a good way of expressing software designs, but it is not mandated.
? It would be useful to know how you will test each part
? Diagrams are awesome
Commit a Design.pdf into your svn assignment directory and submit it via websubmission.
Note: Assignments with no design file will receive a mark of zero.
For COMP SCI 7076 students, this design file will form the basis of your final submission; see below.
Preview
We strongly advise that you submit a draft revision/preview of your completed assignment 2 so that we can provide you with feedback.
You will receive feedback within 1 week. The feedback will be detailed but carries no marks. You are given the opportunity to revise and change your work based on the feedback for the final submission so you use it while you can.
Final revision
If you received feedback in the last submission, please add a PDF (Changes.pdf) that includes a discussion of the feedback received and what changes you decided to make and why.
Assessment
COMP SCI 3012 students only
The allocation of marks for this assignment is as follows:
? 60% - Software solution
? 35% - Automated testing
? 5% - Reflection
The assessment of your software solution will be allocated as follows:
? 10% - Code quality, following the checklist in Appendix A (below)
? 20% - Architecture design decisions
? 30% - Support for basic functionality, following the checklist in Appendix B (below)
? 40% - Support for full functionality and quality of design, following the checklist in Appendix B (below)
The assessment of your testing will be allocated as follows:
? The range of test cases considered
rather than focus on the number of tests, are you identifying the most important test cases with a good spread across possible cases?
? The clarity of your test cases
your test harness should be verbose enough to ensure that we understand both what you have tested and the outcome of the tests
Your testing architecture, ideally captured in a testing document should become an important part of your development process!
Appendix A
Code Quality Checklist
Do
? Write comments above the header of each of your methods, describing what the method is doing, what are the inputs and expected outputs
? describe in the comments any special cases
? create modular code, following cohesion and coupling principles
Don't
? use magic numbers
? use comments as structural elements
? mis-spell your comments
? use incomprehensible variable names
? have methods longer than 80 lines
? allow TODO blocks
Appendix B
Assignment 2 Checklist
Basic functionality refers to:
? XML parsing works
? client, Atom server and content server processes start up and communicate
? PUT operation works for one content server
? GET operation works for many read clients
? Atom server expired feeds works (15s)
? Retry on errors (server not available etc) works
Full functionality refers to:
? Lamport clocks are implemented
? All error codes are implemented: empty XML, malformed XML
? Content servers are replicated and fault tolerant
联系我们
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-21:00
微信:codinghelp
热点文章
更多
辅导 comm2000 creating socia...
2026-01-08
讲解 isen1000 – introductio...
2026-01-08
讲解 cme213 radix sort讲解 c...
2026-01-08
辅导 csc370 database讲解 迭代
2026-01-08
讲解 ca2401 a list of colleg...
2026-01-08
讲解 nfe2140 midi scale play...
2026-01-08
讲解 ca2401 the universal li...
2026-01-08
辅导 engg7302 advanced compu...
2026-01-08
辅导 comp331/557 – class te...
2026-01-08
讲解 soft2412 comp9412 exam辅...
2026-01-08
讲解 scenario # 1 honesty讲解...
2026-01-08
讲解 002499 accounting infor...
2026-01-08
讲解 comp9313 2021t3 project...
2026-01-08
讲解 stat1201 analysis of sc...
2026-01-08
辅导 stat5611: statistical m...
2026-01-08
辅导 mth2010-mth2015 - multi...
2026-01-08
辅导 eeet2387 switched mode ...
2026-01-08
讲解 an online payment servi...
2026-01-08
讲解 textfilter辅导 r语言
2026-01-08
讲解 rutgers ece 434 linux o...
2026-01-08
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 99515681 微信:codinghelp
© 2024
www.7daixie.com
站长地图
程序辅导网!