WikiWS

Informacje ogólne

WikiWS jest platformą umożliwiającą składowanie, wersjonowanie, tworzenie oraz wykonanie usług sieciowych. Serwis dostępny jest pod adresem https://wikiws.os.niwa.gda.pl/.

Jedną z podstawowych funkcjonalności WikiWS jest możliwość wytwarzania aplikacji zorientowanych na usługi. Przyjmuje się założenie, że aplikacje złożone są ze scenariuszy usług sieciowych gdzie pojedyncza usługa znajduje się w repozytorium usług. WikiWS udostępnia zarówno środowisko deweloperskie, jak i produkcyjne. Przy czym usługi, które zostały wdrożone do środowiska produkcyjnego mogą być wielokrotnie wykorzystywane w budowie innych aplikacji.

Zastosowana polityka dostępu pozwala na wytwarzanie oraz wdrażanie otwartych usług sieciowych ze swobodnym dostępem do kodu oraz możliwością jego edycji, jak i zamkniętych, gdzie uprawnienia (edycyjne, wykonawcze) w stosunku do osób nie będących właścicielami pozostają ograniczone. WikiWS łączy funkcjonalności repozytoriów o otwartej polityce oraz polityce korporacyjnej. Otwartość kodu oraz możliwość dokonywania zmian bazująca na założeniach ruchu Open Source ma za zadanie zwiększenie tempa wytwarzania dojrzałych rozwiązań.

Rejestracja w serwisie

Aby móc w pełni korzystać z serwisu konieczna jest rejestracja konta. W tym celu należy kliknąć link Zarejestruj (Register), który przeniesie nas do serwisu rejestracji, lub przejść bezpośrednio do (Systemu Rejestracji kont Otwartej Nauki). Rejestracja opisana jest szczegółowo na stronie Rejestracja użytkowników.

Po poprawnej rejestracji możemy wrócić do systemu WikiWS i zalogować się.

Nawigacja po serwisie

Na stronie głównej użytkownik ma do dyspozycji trzy opcje:

Można również przejść do Panelu użytkownika (Profile) klikając na swój login w prawym górnym rogu ekranu oraz wylogować się korzystając z opcji Wyloguj się (Logout).
Na każdej stronie witryny możliwa jest zmiana języka (PL / EN).

W Panelu użytkownika (Profile) możliwe jest korzystanie z następujących opcji:

Menu boczne umożliwia z kolei dostęp do opcji:

Zarządzanie serwerami

Przeglądanie serwerów

W systemie WikiWS występują dwa rodzaje serwerów:

  • repozytoria kodu, na chwilę obecną wspierane jest repozytorium SVN,
  • serwery wdrożeniowe, na chwilę obecną wspierany jest serwer IIS 8.5 oraz Glassfish 4.

Do realizacji usługi sieciowej niezbędne są oba rodzaje serwerów - użytkownik musi wskazać serwer służący do składowania kodu oraz serwer służący do wdrażania usług.

Serwery można przeglądać korzystając z odnośnika Dostępne serwery(Available servers) na stronie głównej lub poprzez opcje w menu bocznym w profilu (tylko serwery wdrożeniowe).

Z poziomu powyższego ekranu użytkownik może przeglądać szczegóły poszczególnych serwerów. W każdym przypadku użytkownikowi prezentowana jest lista dostępnych dla niego projektów (jego własnych oraz publicznych). Dla każdego z widocznych projektów możliwe jest zarówno podejrzenie jego szczegółów jak i wysłanie prośby o dołączenie do projektu (o ile jeszcze nie jesteśmy jego członkiem).

Zarządzanie usługami

Przeglądanie usług

Użytkownicy mogą przeglądać listę usług na dwa sposoby:

  • pełna lista publicznych projektów, dostępna poprzez opcję Przeglądaj usługi (Browse services) na stronie głównej

  • lista własnych usług, dostępna poprzez menu Moje projekty (My projects) w Panelu użytkownika (Profile)

W obu przypadkach użytkownik może przeglądać szczegóły projektu klikając przycisk Pokaż (Show).

Widok szczegółów projektu pozwala na:

  • przeglądanie meta-danych projektu (jego nazwę, ustawienia, przypisane serwery itp.)
  • ustawienia kompilacji (Presets)
  • rewizje kodu (SVN revisions)
  • listę uczestników projektu (Users)
  • kompilacje (Builds)
  • dodanie własnych bibliotek

Z pozycji tego menu możliwe jest przeglądanie zawartości repozytorium. W tym celu należy kliknąć przycisk Pokaż (Show) w tabeli rewizji.

W każdym przypadku użytkownik ma możliwość przeglądania listy plików w repozytorium a następnie przejść do widoku zawartości pliku.

Wybór opcji Edytuj plik (Edit file) pozwala z kolei na przejście do trybu edycji pliku, gdzie można wykonać interwencyjne zmiany w kodzie. Zmiany w każdym z plików należy każdorazowo przesłać na serwer wybierając opcję Zapisz (Save). Wymagane jest ponowne podanie hasła użytkownika oraz opisu zmian, login ustawiany jest na zgodny z loginem aktualnie zalogowanego użytkownika.

UWAGA! Możliwe jest wysyłanie zmian tylko z uprawnieniami aktualnie zalogowanego do WikiWS użytkownika!

Tworzenie projektu

Projekt można utworzyć na dwa sposoby:
  1. Utworzenie nowego projektu bezpośrednio w systemie WikiWS
  2. Import projektu z systemu Redmine

Tworzenie nowego projektu bezpośrednio w systemie WikiWS

Aby utworzyć projekt wybieramy pozycję "Nowy projekt" (New project). Należy wypełnić wszystkie pola, zwracając szczególną uwagę na pole "Identyfikator projektu" oraz wybór właściwego serwera aplikacji i język programowania. Dopuszczalne kombinacje to:
  • IIS WikiWS+ C#
  • Glassfish WikiWS + Java (JAX-WS).

Identyfikator projektu jest tekstowym polem pozwalającym na indeksowanie projektu, na jego podstawie utworzony zostanie adres URL projektu w WikiWS (https://wikiws.os.niwa.gda.pl/Project/Details/<identyfikator>) jak i repozytorium kodu (https://svn.os.niwa.gda.pl/<identyfikator>).

Po utworzeniu projektu należy oczekiwać na jego zatwierdzenie przez administratora systemu. Do tego momentu widoczne będą na liście projektów w zakładce "Oczekujące na akceptację" (Waiting for confirmation). Akceptacja przez administratora aktywuje projekt w WikiWS, utworzy domenę wdrożeniową na wskazanym serwerze oraz utworzy sprzęgnięty z projektem projekt w systemie Redmine (https://projects.os.niwa.gda.pl/projects/<identyfikator>) oraz repozytorium SVN.

Import projektu z systemu Redmine

W przypadku, gdy użytkownik posiada już projekt w systemie Redmine i chciałby wdrożyć wypracowany tam kod w ramach platformy WikiWS możliwy jest import projektu. W pole Identyfikator projektu należy wprowadzić identyfikator projektu z systemu Redmine. Parę serwer aplikacji - repozytorium wybieramy analogicznie jak przy tworzeniu projektu.

Import może wykonać tylko kierownik projektu. System przeprowadzi weryfikację, czy aktualnie zalogowany użytkownik jest kierownikiem projektu. Jeżeli tak, projekt zostanie zaimportowany a wybrany serwer utworzony.

Tworzenie i edycja usług

Do poprawnego utworzenia nowej usługi konieczne jest wgranie kodu do repozytorium SVN sprzęgniętego z projektem. Poniżej przedstawiono procedurę wraz z przykładowym kodem dla serwerów IIS oraz Glassfish.

UWAGA! Zaleca się by w nazwach projektu oraz kompilacji unikać stosowania znaków diakrytycznych i spacji, gdyż nazwy te zostaną użyte przy generowaniu adresów URL umożliwiających dostęp do usługi.

Ogólna instrukcja wdrażania usługi

Aby wdrożyć usługę należy wykonać następujące kroki:
  1. Utworzyć projekt - jeżeli jeszcze takowego nie mamy lub usługa powinna być uruchamiana w nowym projekcie
  2. Wgrać pliki do repozytorium i utworzyć konfigurację kompilacji - struktura repozytorium może być dowolna, należy jedynie pamiętać o następujących zasadach:
    • cały kod usługi i zasoby dodatkowe muszą znajdować się w jednym wspólnym podkatalogu, powinien on być podany w polu "Katalog z plikami do kompilacji" (względem korzenia repozytorium)
    • w przypadku usług wdrażanych na IIS bezpośrednio we wspomnianym powyżej katalogu muszą znajdować się pliki Web.config oraz plik z rozszerzeniem asmx.
    • pozostałe pliki z kodem muszą znajdować się bezpośrednio w tym katalogu w jego podkatalogach
    • wymieniając podając pliki do kompilacji wymieniamy wszystkie pliki jakie powinny zostać skompilowane wraz z ścieżką względem katalogu podanego w polu "Katalog z plikami do kompilacji". Na liście tej nie podajemy pliku asmx oraz Web.config
    • w polu "Nazwa usługi (nazwa głównej klasy)" podajemy plik z rozszerzeniem asmx w przypadku C# lub klasę główną kodu dla Java.
  3. Na podstawie konfiguracji kompilacji tworzymy kompilację.
  4. Ewentualne błędy kompilacji pokażą się w kolumnie "Błędy".

Kompilację można każdorazowo wykonać ponownie klikając przycisk "Zmiana".

Szczegółowo dalsze kroki zaprezentowane zostaną na przykładach dla każdego z serwerów.

Usługi w obrębie jednego projektu nie muszą być ze sobą powiązane. Możliwe jest wdrożenie dowolnych usług w ramach pojedynczego projektu.

IIS/C#

Przykładowy kod

W przykładzie utworzona zostanie usługa sieciowa odpowiedzialna za sortowanie techniką Bubble Sort składająca się z plików: Sort.asmx, Sort.asmx.cs oraz Web.config. Pliki te należy umieścić w repozytorium w jednym katalogu. W szczególności pliki Web.config oraz plik asmx powinny znaleźć się w jednym katalogu, pliki z kodem (*.cs) oraz pozostałe zasoby mogą znajdować się w podkatalogach tego katalogu. W tym przypadku umieszczone zostały w katalogu głównym repozytorium.

UWAGA! Plik Web.config jest obowiązkowy nawet jeżeli domyślne ustawienia są wystarczające. Konieczne jest więc utworzenie przynajmniej pliku Web.config o treści:

<configuration>
</configuration>

Treść plików jest następująca:

Sort.asmx

<%@ WebService Language="C#" CodeBehind="Sort.asmx.cs" Class="Sortowanie.Sort" %>

Sort.asmx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;

namespace Sortowanie {

  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  public class Sort:System.Web.Services.WebService {

    [WebMethod]
    public int[] BubbleSort(int[] x) {

      bool exchanges;

      do {
        exchanges = false;
        for(int i=0;i<x.Length - 1;i++) {
          if (x[i] < x[i+1]) {
            int temp=x[i];
            x[i] = x[i+1];
            x[i+1] = temp;
            exchanges = true;
          }
        }
      } while (exchanges);

      return x;
    }
  }
}

Web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" >
      <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v4.0"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
  <runtime>
    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Tworzenie usługi

W celu rejestracji usługi kolejno wykonujemy operacje:

  1. Jeżeli jeszcze takowego nie posiadamy tworzymy nowy projekt lub importujemy takowy z systemu Redmine.
  2. Wrzucamy kod do repozytorium wskazanego przez odnośnik zatytułowany Serwer SVN i odświeżamy stronę projektu. Na liście Rewizji SVN powinny pojawić się nowe wpisy.
  3. Klikamy Utwórz nową konfigurację kompilacji (Create new preset)
  4. Wypełniamy formularz
     

     
  5. Klikamy Zapisz (Save)
  6. Następnie wybieramy Utwórz kompilację (Create new build)
  7. Wypełniamy formularz pamiętając by wybrać najbardziej aktualną rewizję kodu z repozytorium
     

     
  8. Klikamy Zapisz (Save)
  9. Jeżeli kompilacja powiedzie się usługa zostanie wdrożona pod adresem wskazywanym przez Odnośnik do usługi (Link to Service)
     

Glassfish/JAX-WS

Przykładowy kod

W przykładzie utworzona zostanie prosta usługa sieciowa zwracająca parametr podany przez użytkownika połączony ze słowem Hello. Nazwa pliku to calculator.java a pakiet to example. Plik powinien zostać umieszczony w repozytorium projektu w katalogu example. Katalog pakietu możemy umieścić w dowolnym podkatalogu. Treść klasy jest następująca:

calculator.java

package example;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

@WebService(serviceName = "calculator")
public class calculator {
  @WebMethod(operationName = "hello")
  public String hello(@WebParam(name = "name") String txt) {
    return "Hello " + txt + " !";
  }
}
Tworzenie usługi

W celu rejestracji usługi kolejno wykonujemy operacje analogicznie jak w przypadku serwera IIS. Jedyna różnica jest taka, że w polu "Nazwa usługi (nazwa głównej klasy)" zamiast pliku asmx podajemy nazwę klasy startowej naszej usługi. W tym przypadku "calculator".

Edycja usług

Zarejestrowane przez użytkownika usługi oraz te, do których dołączył widoczne są w menu Moje projekty (My projects) w Panelu użytkownika (Profile). Użytkownik może przeglądać ich szczegóły oraz z odpowiednimi uprawnieniami usunąć projekt.

Przechodząc kolejno do szczegółów projektu, następnie szczegółów określonej rewizji a tam do widoku pliku użytkownik może edytować raz przesłane pliki poprzez wbudowany edytor. Docelowo system umożliwi edycję plików w zewnętrznym IDE i ich transfer poprzez repozytorium kodu.

Zarządzanie uczestnikami

Właściciel projektu, bądź osoba z odpowiednimi uprawnieniami ma możliwość dodawania i zarządzania uczestnikami projektu. Każdy użytkownik ma możliwość zgłoszenia chęci uczestnictwa w projektach publicznych. Właściwości usług zawierają listę uczestników wraz z ich rolami/uprawnieniami.

Zgłoszenia uczestnictwa można odrzucać. Przyjętym użytkownikom można nadawać nowe, bądź zmieniać istniejące uprawnienia. Istnieje również możliwość usunięcia użytkownika z projektu.

 

Biblioteki zewnętrzne

W przypadku, gdy nasza aplikacja wymaga bibliotek zewnętrznych użytkownik może wysłać zgłoszenie dodania takowej do systemu. W przypadku usług napisanych w języku C# możliwe jest dodanie bibliotek w postaci plików DLL a w przypadku języka Java w postaci plików JAR. Aby zgłosić zapotrzebowanie na bibliotekę należy:

  1. Umieścić ją w repozytorium
  2. Z ekranu szczegółów projektu wybieramy opcję Dodaj niestandardową bibliotekę (Add custom library).
     

     
  3. Należy podać ścieżkę w repozytorium gdzie znajduje się biblioteka (sam katalog) oraz nazwę biblioteki (nazwa pliku).
  4. wskazujemy rewizję, z której należy pobrać plik. Domyślnie wybierana jest najnowsza rewizja.

Po akceptacji przez administratora biblioteka stanie się dostępna dla wszystkich użytkowników systemu. Będzie można wybrać ją w trakcie tworzenia konfiguracji kompilacji.

W systemie domyślnie dostępna jest biblioteka umożliwiająca połączenia z bazą danych zarówno z usług napisanych w języku Java (mysql-connector-java-5.1.34-bin.jar) jak i C# (MySql.Data.dll i MySql.Web.dll).

Tworzenie Bazy Danych

  1. Przechodzimy do profilu użytkownika i wybieramy opcję Nowa Baza Danych (New Data Base)
  2. Wypełniamy formularz
     

     
  3. Klikamy Zapisz (Save)
  4. Baza danych zostaje stworzona i jesteśmy przeniesieni na listę wszystkich baz danych
  5. Stworzona baza jest nieaktywna, wymaga aktywacji przez administratora
  6. Po aktywacji możemy dokonać resetu hasła
     

     
  7. Nowe hasło wyświetli się w zakładce Powiadomienia (Notification)
     

     
  8. Automatycznie wygenerowane hasło możemy zmienić na dowolne własne wybierając odpowiednią opcję na ekranie listy bazy danych. W celu zmiany hasła konieczne jest podanie poprzedniego hasła.

Łączenie się z bazą danych

System posiada wbudowane biblioteki umożliwiające łączenie się z tak utworzonymi bazami danych z wnętrza usługi. W przypadku usług wdrożonych na serwerze Glassfish połączenie możemy nawiązać np. za pomocą kodu:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

...

    private Connection getConnection() throws SQLException {
        MysqlDataSource dataSource = new MysqlDataSource();
        // MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();

        dataSource.setUser("login");
        dataSource.setPassword("hasło");
        dataSource.setServerName("192.168.100.130");
        dataSource.setDatabaseName("nazwa_bazy");
        // may throw SQLException
        return dataSource.getConnection();
    }

Przykładowa usługa listująca bazy

Poniższy prosty kod usługi nawiązuje połączenie z bazą danych a następnie zwraca ciąg znaków postaci:

Hello użytkownik, the SQL engine contains the following databases: lista baz dostępnych dla użytkownika!

Poniższy kod należy zapisać do pliku example/DBQuery.java.

package example;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

/**
 *
 * @author boing
 */
@WebService(serviceName = "DBQuery")
public class DBQuery {

    /**
     * This is a sample web service operation
     */
    @WebMethod(operationName = "queryDB")
    public String queryDB(@WebParam(name = "name") String txt) {
        return "Hello " + txt + ", the SQL engine contains the following databases: " + displayDatabases() + " !";
    }

    private Connection getConnection() throws SQLException {
        MysqlDataSource dataSource = new MysqlDataSource();
        // MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();

        dataSource.setUser("login");
        dataSource.setPassword("password");
        dataSource.setServerName("192.168.100.130");
        dataSource.setDatabaseName("db-name");
        // may throw SQLException
        return dataSource.getConnection();
    }

    public String displayDatabases() {
        StringBuilder result = new StringBuilder("");
        try {
            Connection conn = getConnection();
            Statement stmt = conn.createStatement();
            ResultSet resultSet = stmt.executeQuery("SHOW DATABASES;");

            while (resultSet.next()) {
                result.append(resultSet.getString("Database"));
                result.append(" ");
            }
            resultSet.close();
            stmt.close();
        } catch (SQLException e) {
            //e.printStackTrace();
            return e.toString();
        }
        return result.toString();
    }
}

Korzystanie z usług

Usługi sieciowe byłyby nieprzydatne, gdyby nie możliwość ich zdalnego wywołania. Poniżej przedstawiona została przykładowa aplikacja w język C# i Java wołająca wcześniej utworzoną usługę sieciową w języku Java.

Klient w C#

Otwieramy Visual Studio i kolejno wykonujemy kroki:

  1. Tworzymy nowy projekt
     
    Tworzenie projektu w VisualStudio
     
  2. Tworzymy prosty układ elementów graficznych aplikacji
     
    Tworzenie układu aplikacji w VisualStudio
     
  3. Dodajemy referencję do usługi
     
    Dodawanie referncji do usługi w VisualStudio
     
  4. Pobieramy WSDL
     
    Pobieranie WSDL usługi w VisualStudio
     
  5. Kod aplikacji wprowadzamy jak niżej:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CalculatorUsageApp
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Calculator.calculatorClient client = new Calculator.calculatorClient();
      label1.Text = client.hello("student");
    }
  }
}

Klient w Java

Podstawowy klient dla usługi najlepiej pozyskać w narzędziu NetBeans. Poniższy przykład wywoływać będzie usługę sieciową zaprezentowaną wcześniej w tej instrukcji mającą za zadanie odpytać serwer bazodanowy o dostępne bazy danych. WSDL usługi dostępny jest pod adresem http://wikiws2.dev.os.niwa.gda.pl/gf/10002/k1/DBQuery?wsdl.

Aby wygenerować klienta wykonujemy następujące kroki:

  1. Tworzymy nową aplikację typu Java Web
  2. Nazywamy ją dowolnie i klikamy Next
  3. Wybieramy serwer (dowolny, w razie problemów Tomcat chyba lżejszy i prostszy) i klikamy Finish
  4. Klikamy na głównym węźle projektu prawym klawiszem i wybieramy New -> Web Service Client. Jak nie ma na liście to klikamy Other->Web Services->Web Service Client
  5. Wybieramy WSDL URL i wklejamy adres do wsdla skopiowany z okienka przeglądarki, Package zostawiamy puste, klikamy Finish
  6. Rozwijamy gałąź Web Pages, klikamy dwukrotnie na index.html lub index.jsp (zależy co się wygenerowało) i zamiast sekcji <body>...</body> wklejamy:
     
    <body>
        <form name="Test" method="post" action="WSServlet">
            <p>Enter the text you want to check:</p>
            <p>
            <p><textarea rows="7" name="TextArea1" cols="40" ID="Textarea1"></textarea></p>
            <p>
                <input type="submit" value="Get info" name="calculatebutton">
        </form>
    </body>
    

    Tworzymy w ten sposób formularz z polem tekstowym, gdzie podamy komunika do naszego Web Servica
     
  7. Klikamy ponownie prawym na głównym węźle i wybieramy New->Servlet
  8. Class Name ustawiamy na WSServlet, a Package na clientservlet. Klikamy Next a potem Finish
  9. Otworzy nam się plik WSServlet. Klikamy prawym gdziekolwiek, wybieramy "Insert Code..." a następnie "Call Web Service Operation...". Z drzewa wybieramy metodę queryDB. Wygeneruje nam się metoda queryDB z wymaganymi parametrami na samym dole klasy.
  10. Wnętrze metody processRequest modyfikujemy zastępując blok try {} kodem:
     
            try {
                //Get the TextArea from the web page
                String TextArea1 = request.getParameter("TextArea1");
    
                //Initialize WS operation arguments
                java.lang.String bodyText = TextArea1;
    
                //Process result
                String res = queryDB(bodyText);
    
                out.println("<html>");
                out.println("<head>");
    
                //Display the report's name as a title in the browser's titlebar:
                out.println("<title>WS Result</title>");
                out.println("</head>");
                out.println("<body>");
    
                //Display the report's name as a header within the body of the report:
                out.println("<h2><font color='red'>WS Result</font></h2>");
    
                //Display all the content (correct as well as incorrectly spelled) between quotation marks:
                out.println("<p><b>Response is:</b> \"" + res + "\"" + "</p>");
                out.println("</body>");
                out.println("</html>");
    
            } finally {
                out.close();
            }
    

    11. Zapisujemy zmiany i uruchamiamy naszą aplikację wciskając F6.
    12. W okienku wpisujemy jakikolwiek tekst i wciskamy "Get info". W wyniku powinniśmy otrzymać tekst postaci:
WS Result

Response is: "Hello <tekst_z_formularza>, the SQL engine contains the following databases: information_schema tboinski test !" 

project_list.png - Lista projektów (111,231 KB) boing, 2014-05-10 17:53

my_project_list.png - Lista projektów użytkownika (38,438 KB) boing, 2014-05-10 17:58

project_details_metadata.png - Metadane projektu (48,321 KB) boing, 2014-05-10 18:13

project_details_other.png - Pozostałe dane projektu (45,159 KB) boing, 2014-05-10 18:13

svn_file_list.png - Lista plików w repozytorium (27,822 KB) boing, 2014-05-10 18:52

svn_code.png - Widok kodu pliku (43,562 KB) boing, 2014-05-10 18:52

browse_servers.png - List of all available servers (79,691 KB) boing, 2014-05-11 10:37

browse_servers_repo_details.png - Lista projektów przypisanych do repozytorium (33,496 KB) boing, 2014-05-11 11:18

iis_details.png - Szczegóły porjektu dla serwera IIS (65,278 KB) boing, 2014-05-11 11:31

iis_establish_new_project.png - Tworzenie nowego projektu dla serwera IIS (47,124 KB) boing, 2014-05-11 11:31

iis_creat_build.png - Tworzenie nowych ustawień kompilacji dla serwera IIS (17,135 KB) boing, 2014-05-11 12:25

iis_creat_build_success.png - Sukces kompilacji dla serwera IIS (21 KB) boing, 2014-05-11 12:25

iis_create_preset.png - Definiowanie plików projektu dla serwera IIS (17,967 KB) boing, 2014-05-11 12:25

gf_creat_build_success.png - Sukces kompilacji dla serwera Glassfish (21,501 KB) boing, 2014-05-11 12:51

gf_create_preset.png - Definiowanie plików projektu dla serwera Glassfish (18,945 KB) boing, 2014-05-11 12:51

gf_details.png - Szczegóły porjektu dla serwera Glassfish (57,576 KB) boing, 2014-05-11 12:51

gf_establish_new_project.png - Tworzenie nowego projektu dla serwera Glassfish (61,56 KB) boing, 2014-05-11 12:51

vs_add_reference.png - Dodawanie referncji do usługi w VisualStudio (17,719 KB) boing, 2014-05-11 13:34

vs_get_wsdl.png - Pobieranie WSDL usługi w VisualStudio (30,373 KB) boing, 2014-05-11 13:34

vs_create_layout.png - Tworzenie układu aplikacji w VisualStudio (7,819 KB) boing, 2014-05-11 13:34

vs_create_project.png - Tworzenie projektu w VisualStudio (62,49 KB) boing, 2014-05-11 13:34

gf_creat_build.png - Tworzenie nowych ustawień kompilacji dla serwera Glassfish (18,162 KB) boing, 2014-05-11 13:46

Lista_serwerów.png - Lista wszystkich dostępnych serwerów (42,962 KB) k.babiarz, 2014-09-17 09:18

na_SVN.png - Lista projektów przypisanych do repozytorium (48,172 KB) k.babiarz, 2014-09-17 09:18

wszystkie_projekty.png - Lista wszystkich usług (100,584 KB) k.babiarz, 2014-09-17 09:40

moje_projekty.png - Lista projektów użytkownika (82,322 KB) k.babiarz, 2014-09-17 09:41

pozostałe_szczegóły.png - Pozostałe dane projektu (56,072 KB) k.babiarz, 2014-09-17 10:16

Lista_plików.png - Lista plików w repozytorium (30,866 KB) k.babiarz, 2014-09-17 10:45

kod_pliku.png - Podgląd kodu (48,859 KB) k.babiarz, 2014-09-17 10:54

wlasciwosci_nowy.png - Właściwości nowego projektu (72,405 KB) k.babiarz, 2014-09-17 11:54

formularz_nowy.png - Formularz tworzenia nowego projektu (20,766 KB) k.babiarz, 2014-09-17 12:09

sukces.png (11,202 KB) k.babiarz, 2014-09-17 12:24

formularz_nowy_gf.png - Formularz nowego projektu dla serwera Glassfish (23,435 KB) k.babiarz, 2014-09-17 12:39

formularz_preset_gf.png - Formularz nowej konfiguracji kompilacji serwera Glassfish (15,196 KB) k.babiarz, 2014-09-17 12:42

formularz_nowy_build_gf.png - Formularz nowej kompilacji serwera Glassfish (14,72 KB) k.babiarz, 2014-09-17 12:44

uczestnicy.png - Widok uczestników projektu (12,706 KB) k.babiarz, 2014-09-17 12:50

uprawnienia.png - Formularz edycji uprawnień (11,167 KB) k.babiarz, 2014-09-17 12:53

database1.png (12,453 KB) AdrianWalczak, 2015-02-03 13:04

database2.png (26,523 KB) AdrianWalczak, 2015-02-03 13:24

database3.png (26,538 KB) AdrianWalczak, 2015-02-03 13:24

database4.png (37,243 KB) AdrianWalczak, 2015-02-03 13:31

build1.png (15,153 KB) AdrianWalczak, 2015-02-04 08:47

projects1.png (25,627 KB) AdrianWalczak, 2015-02-04 08:47

instrukcja1.jpg (31,954 KB) AdrianWalczak, 2015-04-01 12:33

listaserwerow.jpg (56,774 KB) AdrianWalczak, 2015-04-01 13:50

instrukcja3.jpg (36,282 KB) admin, 2015-05-22 11:33

szczegóły_proj.jpg (131,013 KB) admin, 2015-05-22 11:33

instrukcja.jpg (49,732 KB) admin, 2015-05-22 11:33

formularz_preset.png (25,825 KB) admin, 2015-05-22 12:02

formularz_nowy_build.png (21,108 KB) admin, 2015-05-22 12:02

wlasciwosci_nowy2.png (112,406 KB) admin, 2015-05-22 12:02

create_project.png (29,422 KB) boing, 2015-07-14 11:10

import_project.png (20,06 KB) boing, 2015-07-14 11:20

custom_library.png (19,251 KB) boing, 2015-07-14 12:21

listaserwerow2.jpg (61,298 KB) tturonek, 2015-07-20 10:37

na_SVN2.jpg (38,669 KB) tturonek, 2015-07-20 10:50

instrukcja2.jpg (59,51 KB) tturonek, 2015-07-20 10:53

instrukcja3n.jpg (79,013 KB) tturonek, 2015-07-20 10:57

szczegóły_proj2.jpg (179,223 KB) tturonek, 2015-07-20 11:07

lista_plików2.jpg (48,837 KB) tturonek, 2015-07-20 11:09

kod_pliku2.jpg (98,764 KB) tturonek, 2015-07-20 11:10

edytuj_kod_pliku.jpg (80,234 KB) tturonek, 2015-07-20 11:12

uczestnicy2.jpg (34,966 KB) tturonek, 2015-07-20 11:17

uprawnienia2.jpg (38,033 KB) tturonek, 2015-07-20 11:18

uczestnicy2.jpg (38,838 KB) tturonek, 2015-07-20 11:20

database1n.jpg (29,808 KB) tturonek, 2015-07-20 11:23

database3n.jpg (48,569 KB) tturonek, 2015-07-20 11:45

database4n.jpg (110,533 KB) tturonek, 2015-07-20 11:48

formularz_preset.png (24,831 KB) tturonek, 2015-07-20 11:52

formularz_nowy_build.png (15,708 KB) tturonek, 2015-07-20 11:53

sukces.png (14,284 KB) tturonek, 2015-07-20 11:55