Статьи

WSO2 DSS: образец пакетной вставки (от конца до конца)

WSO2 DSS оборачивает Data Services Layer и предоставляет нам простой графический интерфейс для определения Data Services с нулевым кодом Java. При этом для изменения источника данных достаточно одного щелчка мышью, и никакой другой стороне не нужно знать об этом.

В этом примере демонстрации мы увидим, как выполнить пакетную вставку в таблицу. Пакетная вставка полезна, когда вы хотите вставить данные последовательно. Это также означает, что в случае сбоя хотя бы одного из запросов на вставку все остальные запросы, выполненные до сих пор в пакете, также будут откатываться. Если одна вставка в пакете не удалась, значит, вся партия вышла из строя.

Это можно использовать, если вы выполняете один и тот же запрос, чтобы вставить данные много раз. С пакетной вставкой все данные будут отправлены в один звонок. Таким образом, это уменьшит количество звонков, которые вам нужно позвонить, чтобы вставить данные. 

Это приходит с одним условием, что

Запрос не должен давать результаты назад. (Мы будем только уведомлены, был ли запрос успешным или нет.)

Предпосылки: 

Сервер служб данных WSO2 — http://wso2.com/products/data-services-server/  (последняя версия  3.1.1)

MySQL соединитель (JDBC) —  https://www.mysql.com/products/connector/

Если у нас уже запущена служба данных, которая не отправляет обратно набор результатов, то это просто вопрос добавления следующего свойства в объявление службы.

enableBatchRequests="true"

В любом случае я буду демонстрировать создание сервиса с нуля.

1. Создайте сервис следующим образом, пройдя через мастера,


2. Создайте источник данных

3. Создайте запрос — (Это запрос на вставку. Также обратите внимание на то, что сопоставление ввода, которое мы добавили, имеет отношение к запросу. Чтобы узнать больше о сопоставлении ввода и использовании проверки, обратитесь к документации .)

4. Создайте операцию — выберите запрос, который будет выполнен после вызова операции. Включив статус запроса на возврат, мы получим уведомление о том, была ли операция успешной или нет.

5. Попробуй это! — Когда мы перечислим услуги, мы увидим эту новую услугу сейчас. Справа у нас будет возможность попробовать это.


Здесь мы видим возможность попробовать сервис, предоставляющий входные параметры. Здесь я попробовал две вставки в партии.
Теперь, если мы перейдем к XML-представлению службы, оно будет похоже на следующее, которое сохраняется на сервере в виде файла .dbs.

<data enableBatchRequests="true" name="BatchInsertSample">
   <config id="json">
      <property name="driverClassName">com.mysql.jdbc.Driver</property>
      <property name="url">jdbc:mysql://localhost:3306/json_array</property>
      <property name="username">root</property>
      <property name="password">root</property>
      <property name="minIdle">1</property>
      <property name="maxActive">10</property>
      <property name="validationQuery">SELECT 1</property>
   </config>
   <query id="addFlightQuery" useConfig="json">
      <sql>insert into flights (flight_no, number_of_cases, created_by, description, trips) values (:flight_no,:number_of_cases,:created_by,:description,:trips)</sql>
      <param name="flight_no" ordinal="1" sqlType="BIGINT"/>
      <param name="number_of_cases" ordinal="2" sqlType="BIGINT"/>
      <param name="created_by" ordinal="3" sqlType="STRING"/>
      <param name="description" ordinal="4" sqlType="STRING"/>
      <param name="trips" ordinal="5" sqlType="BIGINT"/>
   </query>
   <operation name="addFlight" returnRequestStatus="true">
      <call-query href="addFlightQuery">
         <with-param name="flight_no" query-param="flight_no"/>
         <with-param name="number_of_cases" query-param="number_of_cases"/>
         <with-param name="created_by" query-param="created_by"/>
         <with-param name="description" query-param="description"/>
         <with-param name="trips" query-param="trips"/>
      </call-query>
   </operation>
</data>

Если мы нажмем на имя службы в списке служб, мы будем перенаправлены на панель инструментов службы, где мы увидим несколько других вариантов службы. Он предоставляет возможность создания клиента Axis2 для службы. Как только мы получим клиента, нужно вызвать методы в заглушке следующим образом.

private static BatchRequestSampleOldStub.AddFlight_type0 createFlight(int cases, String creator, String description, int trips) {

        BatchRequestSampleOldStub.AddFlight_type0 val = new BatchRequestSampleOldStub.AddFlight_type0();
        val.setNumber_of_cases(cases);
        val.setCreated_by(creator);
        val.setDescription(description);
        val.setTrips(trips);
        printFlightInfo(cases, creator, description, trips);
        return val;
    }


    public static void main(String[] args) throws Exception {
        String epr = "http://localhost:9763" + "/services/BatchInsertSample";
        BatchRequestSampleOldStub stub = new BatchRequestSampleOldStub(epr);
        BatchRequestSampleOldStub.AddFlight_batch_req vals1 = new BatchRequestSampleOldStub.AddFlight_batch_req();


        vals1.addAddFlight(createFlight(1, "Pushpalanka", "test", 2));
        vals1.addAddFlight(createFlight(2, "Jayawardhana", "test", 2));
        vals1.addAddFlight(createFlight(3, "lanka@gmail.com", "test", 2));
        try {
            System.out.println("Executing Add Flights..");
            stub.addFlight_batch_req(vals1);
        } catch (Exception e) {
            System.out.println("Error in Add Flights!");
        }

Полный код клиента можно найти 
здесь .

Ура!

Ссылка: 
http://docs.wso2.org/display/DSS311/Batch+Processing+Sample