-
-
- Tips and Tricks
Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
Release date: Monday, 25.11.13 - Due date: Sunday, 01.12.13, 23:59
11 = 7+4 points |
---|
a) Formulate in 1-3 sentences a description in your own words for:
b) At the beginning of the lecture we enacted the possibilities of intercepting the communication between components (e.g. CORBA, Enterprise Java Beans, OSGi).
10 points |
---|
You can find the source code for this assignment in the project A06T32_UntanglingBanking. 'BankSession' in the folder 'tangled' contains the example for tangled code from the lecture. 'untangled' contains already a new untangled version with aspects. Sadly the aspects still need to be implemented. Your task is to restore the functionality found in the tangled example code. Don't change anything except for the aspects. Make sure the test runs.
Implement the aspects ContractChecking
, Security
, Logging
and Transactionality
.
The aspect ContractChecking
should contain all functionality that checks the input arguments, the supposed content of the aspects Security
, Logging
and Transactionality
should be obvious.
If you are unsure about what code in the tangled application matches what concern take a look at the lecture slides (slides 22-25).
8 points |
---|
Check out the project A06T33_UnscatteringSecurity
. Your task is to de-scatter another banking example. Extract the permission checking (the calls to AccessController.checkPermission(..)
) into an aspect. Don’t forget to run the JUnit-tests after each step.
Before you can run the tests you will have to adapt the banking.policy file as described in notes.jpage
.1) As this is a bit tricky, you get 2 points just for getting the tests run.
It should be possible to solve this just ad-hoc. If someone wants to learn a systematic way of doing this refactoring, she might want to read slide 15 and following of the refactoring class of the AOSD lecture, or the original article by Ramnivas Laddad on which the lecture is based.
8 points |
---|
throws
clauses. A better design might be to wrap the exception in a RuntimeException
.
In this task you will introduce RMI-based distribution to the hotel example. If you are completely new to RMI have at look at a RMI tutorial first.
The base code you find in A06T34_DistributedReservation
is not distributed, yet. We already anticipated that a distributed object must always be accessed via an interface and
all methods in the interface must throw the checked exception RemoteException
, see hotel.control.ReservationHandler.
Your task is to complete the aspect hotel.control.Distribution which should:
Remote
to the ReserverationHandler
interface, see the AspectJ Quick Reference how this can be done (declare parents ..
).Serializable
to other classes, where it is required.hotel.control.StartTestServer
class, which is responsible for registering a remote reservation object.2)ReserverationHandler
with a remote object. Hint: You can look up RMI object directly from the Registry, e.g. Registry registry = LocateRegistry.getRegistry(); return (ReservationHandler) registry.lookup("<registered name>");
[2 + 6 points] |
---|
a) Read through the last slides of the AOP lecture to understand how the DisplayUpdating
aspect can be optimized with the cflow
and cflowbelow
pointcuts. Explain the solution in 2-4 sentences.
b) For those of you who like to play around with some algebraic equations, we have some cute challenges here. Nevertheless, the goal of this task is not start an axiomatic theory of pointcuts, but practice thinking in dynamic joinpoints:
Are the following equations true? The ==
operator should be read as “has the same semantics as”.
01) cflow(cflow(ptc)) == cflow(ptc) 02) cflow(ptc1 || ptc2) == cflow(ptc1) || cflow(ptc2) 03) cflow(ptc1 && ptc2) == cflow(ptc1) && cflow(ptc2) 04) cflow(cflow(ptc1) || ptc2) == cflow(ptc1) || cflow(ptc2) 05) cflow(cflow(ptc1) && ptc2) == cflow(ptc1) && cflow(ptc2) 06) (cflow(ptc1) && !cflow(ptc2)) || (!cflow(ptc1) && cflow(ptc2)) == (cflow(ptc1) || cflow(ptc2)) && !(cflow(ptc1) && cflow(ptc2)) 07) cflowbelow(cflow(ptc)) == cflow(ptc) 08) cflowbelow(cflow(ptc)) == cflowbelow(ptc) 09) cflow(cflowbelow(ptc)) == cflow(ptc) 10) cflow(cflowbelow(ptc)) == cflowbelow(ptc) 11) !cflow(!cflowbelow(ptc1)) == !cflow(ptc2) && (cflowbelow(ptc2) || ptc2)