Studium Wykonalności

Transkrypt

Studium Wykonalności
Studium wykonalności
Andrzej Stasiak
Grzegorz Graczyk
WIktor Sztajerowski
Rafał Markiewicz
W celu analizy możliwości wykonania projektu od strony technologicznej, utworzyliśmy kilka
prostych aplikacji w planowanych do wykorzystania technologiach: web serwisy w .NET oraz
JavaEE. oraz klienty web serwisów na platformie Android oraz w języku Python.
WebServices centrali wykonany jest przy użyciu technologii Java z wykorzystaniem biblioteki
CXF. Przykładowa implementacja udostępnia funkcjonalność CRUD dla danych notatek oraz
oddziałów przechowywanych w bazie centrali. Interfejs web serwisu przedstawia poniższy
listing:
@WebService(name = "Central", targetNamespace = "http://pai.ics.p.lodz.pl/")
public interface Central {
@WebMethod(operationName = "getAllInfos", action = "urn:GetAllInfos")
List<NoteInfo> getAllInfos();
@WebMethod(operationName = "getInfosByOwner", action = "urn:GetInfosByOwner")
List<NoteInfo> getInfosByOwner(@WebParam(name = "owner") String owner);
@WebMethod(operationName = "getInforByAgency", action = "urn:GetInforByAgency")
List<NoteInfo> getInforByAgency(@WebParam(name = "agencyCode") String agencyID);
@WebMethod(operationName = "getAllAgencies", action = "urn:GetAllAgencies")
List<AgencyInfo> getAllAgencies();
@WebMethod(operationName = "getInfoByID", action = "urn:GetInfoByID")
NoteInfo getInfoByID(@WebParam(name = "infoId") String id) throws BusinessException;
@WebMethod(operationName = "getAgency", action = "urn:GetAgency")
AgencyInfo getAgency(@WebParam(name = "agencyCode") String agencyID);
@WebMethod(operationName = "registerNote", action = "urn:RegisterNote")
void registerNote(@WebParam(name = "note") NoteInfo info) throws BusinessException;
@WebMethod(operationName = "updateNote", action = "urn:UpdateNote")
void updateNote(@WebParam(name = "note") NoteInfo info) throws BusinessException;
@WebMethod(operationName = "deleteNote", action = "urn:DeleteNote")
void deleteNote(@WebParam(name = "note") NoteInfo info);
@WebMethod(operationName = "registerAgency", action = "urn:RegisterAgency")
void registerAgency(@WebParam(name = "agency") AgencyInfo agencyInfo) throws BusinessException;
}
Listing 1.1. Interfejs web serwisu wystawianego przez centralę.
Web serwis komunikuje się z klientem poprzez dwa obiekty POJO: NoteInfo i AgencyInfo.
Poniżej przedstawiony jest fragment obiektów biznesowych:
public class AgencyInfo {
private String agencyCode;
private String hostname;
private Date registerDate;
//seters and getters ...
}
Listing 1.2. Fragment implementacji obiektu biznesowego AgencyInfo.
public class NoteInfo {
private String noteID;
private String owner;
private String name;
private String agencyCode;
private int version;
private Date registerDate;
//seters and getters ...
}
Listing 1.3. Fragment implementacji obiektu biznesowego NoteInfo..
Aplikacja w .NET jest aplikacją uruchamianą w oddziałach. Musi jednocześnie wystawiać
web serwisy dla klientów końcowych oraz wykorzystywać serwis wystawiony przez centralę.
Wystawienie serwisu oferującego pobranie listy notatek wygląda następująco:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class NoteService : System.Web.Services.WebService
{
[WebMethod]
public List<Note> Get()
{
List<Note> ret = new List<Note>();
foreach (var note in Note.Notes.Values)
{
ret.Add(new Note { id = note.id, mime = note.mime, title = note.title });
}
return ret;
}
}
Listing 2.1. Wystawienie webserwisu w C#
Ze względu brak infrastruktury pozwalającej na testowanie pełnego systemu przykład użycia
zewnętrznego web serwisu wykonano z użyciem publicznie dostępnego serwisu do konwersji
waluty. Po skonfigurowaniu referencji do serwisu użyto następującego kodu
var service = new net.webservicex.www.CurrencyConvertor();
double curr = service.ConversionRate(net.webservicex.www.Currency.PLN,
net.webservicex.www.Currency.EUR);
Listing 2.2. Użycie zewnętrznego webserwisu w C#
Klient w Pythonie łączy się z przykładowym web serwisem pod adresem http://
www.webservicex.net/ConvertTemperature.asmx. Wywoływana metoda pozwala na zmianę
jednostek temperatury. Użycie biblioteki suds pozwala na bardzo proste korzystanie z
funkcjonalności web servisu poprzez automatyczną konfigurację z pliku WSDL. Serwis
testowy jest w technologii .NET, co odpowiada projektowi systemu. Przykład wykorzystania jej
możliwości:
from suds.client import Client
url = 'http://www.webservicex.net/ConvertTemperature.asmx?WSDL'
client = Client(url)
print client.service.ConvertTemp(
Temperature=120.,FromUnit='degreeCelsius',ToUnit='degreeFahrenheit')
Listing 3.1. Zdalny dostęp do funkcjonalności web serwisu z użyciem biblioteki suds
Klient na plaformie Android korzysta z biblioteki ksoap2-android. Również tutaj funkcjonalność
jest szczątkowa i służy jedynie pokazaniu możliwości komunikacji z web servicem. Aplikacja
łączy się z testowym servisem w technologii .NET i wywołuje jedną metodę konwertującą
jednostki temperatury. Przykładowy kod wywołania metody web servisu:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius", "32");
SoapSerializationEnvelope env = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
env.dotNet = true;
env.setOutputSoapObject(request);
AndroidHttpTransport trans = new AndroidHttpTransport(URL);
trans.call(SOAP_ACTION, env);
SoapPrimitive response = (SoapPrimitive)env.getResponse();
Listing 4.1. Zdalny dostęp do funkcjonalności web serwisu z użyciem biblioteki suds

Podobne dokumenty