Java klient pre subsystém EDA predstavuje rozhranie do EDA z prostredia programovacieho jazyka Java. Je možné ho zaintegrovať do aplikácie alebo komponentu, ktorých runtime prostredím je JVM (Java Virtual Machine). Distribuovaný je vo forme JAR (Java Archive) súboru d2jeda.jar.

Podmienkou použitia J-EDA je bežiaci proces EDA Server v aplikácii D2000, ktorý je sieťovo dostupný z klientských staníc používajúcich J-EDA.

Komponenty systému využívajúceho D2000 J-EDA

  • D2000 Kernel
  • D2000 EDA Server – proces zabezpečujúci prístup k dátam uloženým v EDA databáze a výpočty nad nimi. S D2000 Kernelom komunikuje cez zdieľanú pamäť alebo cez TCP/IP sieť.
  • EDA databáza – úložisko dát EDA v databázovom systéme.
  • D2000 J-EDA – Java knižnica (d2jeda.jar) poskytujúca Java aplikácii rozhranie na vytvorenie a manažovanie spojenia s D2000 EDA Serverom a tým prístup k dátam a výpočtom v subsystéme EDA. Komunikácia medzi J-EDA a EDA Serverom používa TCP/IP sieťové spojenie.

Podporovaná funkcionalita

  • synchrónne a aynchrónne volanie funkcií EDA,
  • paralelné vykonávanie požiadaviek na EDA Serveri,
  • prerušenie vykonávaného výpočtu na EDA Serveri,
  • príjem asynchrónne odosielaných správ z EDA Servera (upozornenia, informácie o priebehu spracovania výpočtu, ...),
  • presmerovanie logovacích informácií na ľubovoľný výstup.

Závislosti D2000 J-EDA

D2000 J-EDA je distribuovaná ako sada JAR (Java Archive) súborov. Pre klientské aplikácie je potrebný súbor d2jeda.jar, ktorý obsahuje implementáciu entít a rozhraní pre komunikáciu s EDA Serverom. Jediná závislosť J-EDA je Java Runtime Environment (JRE) verzie 5.0, preto je možné ju použiť v štandardnom aj enterprise prostredí JVM. Súbor d2jeda-javadoc.jar obsahuje Javadoc dokumentáciu entít a metód J-EDA.

Entity D2000 J-EDA

Základné entity D2000 J-EDA sú triedy Connection a Session:

Connection

Inštancia objektu triedy Connection predstavuje spojenie medzi Java aplikáciou a EDA Serverom. V aplikácii je povolená existencia len jednej inštancie tejto triedy a tým len jedno spojenie na jeden EDA Server. Inštanciu triedy je možné získať volaním statickej metódy getInstance triedy Connection. Pripojenie na EDA Server sa realizuje volaním metódy connect, kde je potrebné zadať názov alebo IP adresu počítača, kde beží EDA Server, a port, na ktorom počúva prichádzajúce spojenia od klientov. Okrem toho je potrebné zadať meno a heslo D2000 užívateľa, ktorým sa klient autentifikuje do systému D2000. Na odpojenie od EDA Servera je možné použiť metódu close alebo disconnect.

Session

Inštancia objektu triedy Session reprezentuje jednu logickú konverzáciu medzi Java aplikáciou a EDA Serverom. V rámci tejto konverzácie sú všetky požiadavky na EDA Server spracovávané serializovane. V aplikácii je povolených viacero inštancií triedy Session, čím je možné dosiahnuť paralelné spracovanie požiadaviek na EDA Serveri. Inštancia triedy Session sa získava volaním metódy createSession triedy Connection. Ukončenie konverzácie sa realizuje volaním metódy close. Po jej zavolaní už nie je možné objekt Session používať.

Požiadavky na EDA Server

Zasielanie požiadaviek na EDA Server prebieha pomocou metód inštancie triedy Session. Každá požiadavka, ktorá vracia odpoveď, je implementovaná metódou vracajúcou implementáciu interface java.util.concurrent.Future. V mieste, kde sú požadované výsledné dáta zo spracovanej požiadavky, je potrebné zavolať metódu get vráteného Future objektu. V prípade, že požiadavka ešte nebola spracovaná, metóda get čaká na jej spracovanie. Ak pri spracovaní požiadavky došlo ku chybe, metóda get skončí výnimkou java.util.concurrent.ExecutionException, z ktorej je možné získať dôvod chyby metódou getCause.

EDAException

Chyby, ktoré nastali počas spracovávania požiadavky v subsystéme EDA sú zabalené do výnimky typu EDAException. Metódou getErrorCode je možné získať konkrétny EDA chybový kód. Pre databázové chyby je implementovaný potomok triedy EDAException s názvom EDADbException. Táto trieda je rozšírená o metódu getDbErrorCode, ktorá vracia číselný kód databázovej chyby. Ďalším potomkom triedy EDAException je trieda EDAInternalException. Tento typ výnimiek sa používa v prípade neočakávaného stavu v knižnici J-EDA a pravdepodobne znamená chybu v J-EDA. Popis spomenutých ako aj ďalších entít J-EDA a ich metód je súčasťou Javadoc dokumentácie k J-EDA.

Príklad použitia D2000 J-EDA

package com.ipesoft.d2000.eda.tests;

import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ExecutionException;

import com.ipesoft.d2000.eda.Connection;
import com.ipesoft.d2000.eda.EDAException;
import com.ipesoft.d2000.eda.Session;
import com.ipesoft.d2000.eda.messages.ReadValuesFromVectorRequest;
import com.ipesoft.d2000.eda.messages.ReadValuesFromVectorResponse;
import com.ipesoft.d2000.eda.types.Value;

public class Test {

  public static void main(String[] args) throws EDAException {
    Calendar calendar = Calendar.getInstance();
    Connection connection = Connection.getInstance();

    // connect to EDA Server running on srvapp13v:54321
    connection.connect("srvapp13v", 54321, 60, "d2000_user", "secret_password");

    // create session for communication with EDA Server
    Session session = connection.createSession();

    // create request to EDA Server
    calendar.set(Calendar.MILLISECOND, 0);
    calendar.set(2015, 0, 1, 0, 0, 0);
    Date bt = calendar.getTime();
    calendar.set(2015, 0, 1, 23, 59, 59);
    Date et = calendar.getTime();
    ReadValuesFromVectorRequest request = new ReadValuesFromVectorRequest("test.vector.1", bt, et);

    try {
      // send request and wait for response
      ReadValuesFromVectorResponse response = session.readValuesFromVector(request).get();

      // print values to console
      for (Value v : response.getValues()) {
        if (v.isValid()) {
          System.out.println(v.getTime() + ": " + v.getValue());
        } else {
          System.out.println(v.getTime() + ": " + "invalid");
        }
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    } catch (ExecutionException e) {
      e.printStackTrace();
    }

    // close session
    session.close();
    // close connection
    connection.close();
  }

}
 
Napíšte komentár