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