Веб-сервис для комбинированного алгоритма целочисленной задачи линейного раскроя

Вестник Сыктывкарского университета. Сер.1. Вып. 6. 2006

УДК 519.717

ВЕБ-СЕРВИС ДЛЯ КОМБИНИРОВАННОГО АЛГОРИТМА ЦЕЛОЧИСЛЕННОЙ ЗАДАЧИ ЛИНЕЙНОГО РАСКРОЯ

В. Л. Никитенков, В. И. Ясинский

Рассмотрены проблемы, возникающие при работе по сети и Интернет, превосходство веб-сервисов над другими серверными приложениями, краткое описание реализованного веб-сервиса, примеры вызова веб-сервиса.

Сеть Интернет стала общепризнанным фактором деловой и общественной жизни. Широкая распространенность и возросшая пропускная способность создают условия, при которых выгодно решать многие задачи при помощи интернет-технологий. Однако Интернет объединяет в себе много различных платформ, а информация содержится в разнообразных источниках данных. Поэтому актуальна проблема связи таких разнородных данных, а также создания способа, который позволяет получать их в виде удобном для дальнейшей обработки.

По требованию руководства ОАО ’’МБП-СЛПК” для комбинированного алгоритма решения целочисленной задачи линейного раскроя был реализован веб-сервис, А почему именно веб-сервис? Приложения и раньше обменивались информацией через Интернет — для этого служат DCOM-, CORBA-, Java RMI-, HTTP GET/POST-запросы. Все эти способы обладают одним или несколькими недостатками: у них отсутствует расширяемость, есть проблемы с доступом через сетевой экран, они привязаны к определенной платформе программирования, возникают сложности при разработке сервиса и клиентского приложения. Типичные примеры - различные финансовые серверы выдают курсы валют и котировки по-разному, та же неразбериха с погодой, статистикой и другими данными, что заметно усложняет разработку Ь2Ь-(business-to-business) систем и порождает сложные системы.

© Никитенков В.Л., Ясинский В.И., 2006.

А что такое веб-сервис? Веб-сервис это универсальный метод для вызова удаленных процедур. Благодаря своей простоте, независимости от языков программирования и способности кросс-платформенного взаимодействия веб-сервисы имеют большие шансы стать основным протоколом для построения распределенных систем. Веб-сервисы преобразуют XML-документы (Extensible Markup Language, XML) в ИТ-системах. Веб-сервисы — это XML-приложения, осуществляющие связывание данных с программами, объектами, базами данных либо с деловыми операциями целиком. Между веб-сервисом и программой осуществляется обмен XML-документами, оформленными в виде сообщений, Стандарты веб-сервисов определяют формат таких сообщений, интерфейс, которому передается сообщение, правила привязки содержания сообщения к реализующему сервис приложению и обратно, а также механизмы публикации и поиска интерфейсов. Веб-сервисы могут использоваться во многих приложениях. Независимо от того, откуда запускаются веб-сервисы, с настольных компьютеров клиентов или с переносных, они могут использоваться для обращения к таким интернет-приложениям, как система предварительных заказов или контроля выполнения заказов. Веб-сервисы пригодны для В2В-интеграции (business-to-business), замыкая приложения, выполняемые различными организациями, в один производственный процесс. Веб-сервисы также могут решать более широкую проблему интеграции приложений предприятия (Enterprise Application Integration, EAI), осуществляя связь нескольких приложений одного предприятия с несколькими другими приложениями, размещенными как ”до”, так и ’’после” брандмауэра. Во всех перечисленных случаях технологии веб-сервисов являются ’’связующим звеном”, объединяющим различные части программного обеспечения. Веб-сервисы представляют собой оболочку, обеспечивающую стандартный способ взаимодействия с прикладными программными средами, такими как системы управления базами данных (СУБД), .NET, J2EE (Java2 Platform, Enterprise Edition), CORBA (Common Object Request Broker Architecture), посредники пакетов планирования ресурсов предприятия (Enterprise Resource Planning, ERP), брокеров интеграции и пр. Интерфейсы веб-сервисов получают из сетевой среды стандартные XML-сообщения, преобразуют XML-данные в формат, ’’понимаемый” конкретной прикладной программной системой, и отправляют ответное сообщение (последнее — не обязательно). Программная реализация веб-сервисов (базовое программное обеспечение, нижний уровень) может быть создана на любом языке программирования с использованием любой операционной системы и любого связую-

щего программного обеспечения (middleware). Веб-сервисы объединяют программирование и концепции Сети, Веб-сервисы сочетают параметры программных приложений и абстрактные характеристики Сети, Современные интернет-технологии частично достигают своих целей, поскольку они определены на очень высоком отвлеченном уровне, что обеспечивает совместимость с любой операционной системой, любым программным и аппаратным обеспечением. Инфраструктура, основанная на применении веб-сервисов, пользуется этим уровнем абстракции и включает в себя связанную с данными семантическую информацию, то есть веб-сервисы определяют не только данные, но и порядок обработки и преобразования этих данных в базовые программные приложения и обратно,

1. Описание веб-сервиса.

Решение задачи форматного раскроя с оптимизацией по материалам и количеству различных планов раскроя при наличии люфта в векторе требований на форматы реализовано в виде веб-сервиса, построенного на основе сессионного бина, Сессионыый бин состоит из трех классов: CPartTambourEJB_Luft - удаленный интерфейс, CPartTambourEJB_LuftHome - домашний интерфейс, CPartTambourEJB_LuftBean — класс бина,

В классе бина реализован алгоритм. Реализация состоит из двух классов: CPartTambourEJB_LuftBean - в нем производится оптимизация по отходам и класса mainl - в нем сам раскрой и оптимизация по числу различных раскладок,

В классе CPartTambourEJB_Luft - заголовок метода, который открыт для клиента (в данном случае это метод start). Веб-сервис собран в архив Для клиента открыт метод start. Этому методу передаются исходные данные в следующем порядке:

Smax — максимальная ширина тамбура

Smin — минимальная ширина тамбура

MaxEdge — максимальная кромка

MinEdge — минимальная кромка

Knifelnterval — минимальное расстояние между ножами

Stringl — строка, содержащая форматы через пробел

String2 — строка, содержащая максимальное количество каждого формата через пробел

String3 — строка, содержащая разность между максимальным и минимальным количеством каждого формата

Результат:

String4="Sets=N Total_ostatok=Nl Efficiency=Eff % !

Ai * [Xi * CiXXi * CCi... ||Bi||Di||effi%] ... ",

i = [1..q], где q — количество различных съёмов,

Sets=N — количество съёмов

S=Smax-2*MinEdge

ii

i ii

i i

I3i _ остаток на i_0M съёме Di = S — Вi

effi _ эффективность на i-ом съёме effi = (B^S) * 100%

Total_ostatok=Nl — общий ocTaTOK

Efficiency Eff/i: — эффективность по материалам (Efficiency=

(l-Total_ostatok/ (S*Sets)))*100%

Пример:

Форматы Мин Макс Разность

600 26 28 2

816 17 19 2

840 15 16 1

888 64 66 2

1440 106 113 7

1490 31 166 135

1550 23 25 2

Smax=8480

Smin=8460

MaxEdge=100

MinEdge=20

Knifelnterval=200

KnifeCount=18

Minlnterval=170

Stringl="600 816 840 888 1440 1490 1550"

String2="28 19 16 66 113 166 25"

String3="2 2 1 2 7 135 2"

Siring! "Sds 10 Total _ostatok=424 Efficiency=99.87% ! 7*| 2*1550 1*1490 1*1440 4*600 ||8430 ||10 ||99.88%] 3*1 4*1490 1*840 2*816 Ц8432 ||8 ||99.91%] 20*[ 4*1440 3*888 Ц8424 ||16 ||99.81%] 6*1 1*1550 1*1490 2*1440 1*888 2*816 Ц8440 ||0 ||100.0%] 3*1 1*1550 1*1490 2*1440 3*840 Ц8440 ||0 ||100.0%] 1*[ 3*1490 1*1440 3*840 Ц8430 ||10 ||99.88%j"

Для того, чтоб вызвать веб-сервис, необходимо, чтобы он был развернут на Weblogic server-e. Далее, просто нужно узнать ссылку на WSDL файл, в котором находится описание сервиса, WSDL файл это документ в формате XML, описывающий методы, предоставляемые веб-сервисом. Также параметры методов, их типы, названия и местонахождение Listener‘a сервиса, SOAP Toolkit визард автоматически генерирует этот документ.

Вот как выглядит WSDL файл:

<?xml version^" 1.0"encodings"UTF-8"?>

- <definitions xmlns:tns="http:/'cparttambour with luftl"

xmlns: wsr="http: Ц www.openuri.org/2002/10/soap / reliability/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soapl2= "http: Ц schemas.xmlsoap.org/wsdl / soapl2/" xmlns:http= "http:/schemas.xmlsoap.org/wsdl/http/"

xmlns:soapenc= " http: / schemas.xmlsoap.org / soap / encoding / " xmlns:soapl2enc= "http: / www.w3.org/2003/05/soap-encoding"

xmlns:coi№="http:/www.openuri.org/2002/04/wsdl/conversation/" xmlns:soap="http: jj schemas.xmlsoap.org / wsdl / soap/" xmlns:s="http:/www.w3.org/2001/XMLSchema" xmlns "http: scheinas.xinlsoap.org wsdl " targetNamespace="http:/cparttambour_with_luftl" >

<message name="getSample"/>

- Cmessage name="getSampleResponse" >

<part xmlns:partns="http:/www.w3.org/2001/XMLSchema"type= "partns:string" nnnio " result" / >

< / message>

- Cmessage name="start" >

<part xmlns:partns="http:/www.w3.org/2001/XMLSchema"type= "partns:int" nnnio " int Val" />

<part xnilns:p;iri 11s "http: vvww.w3.tjrg 2001 XMLScheitia"typo "partns:int" nnnio " intValO" / >

<part xnilns:p;iri ns "http: vvww.w3.tjrg 200 1 X\ILScheitia"i\po "partns:int" nnnio " int Val 1" / >

<part xnilns:p;iri ns "http: vvvvvv.vv3.org 200 1 XMLScheitia"typo "partns:int" nnnio " int Val2 " / >

<part xiiilns:p;iri ns "http: vvvvvv.vv3.org 200 1 XMLSchtnna"i vpc "partns:int" nnnio " int Val3 " / >

<part xinliis:p;iri ns "http: www.vv3.org 2001 XMLScheitia"typo "partns:int" nnnio " int Val4" / >

<part xnilns:p;m ns "http: vvvvvv.vv3.org 200 1 XMLScheitia"typo "partns:int" nnnic " int Val5 " / >

<part xnilns:p;m ns "http: www.vv3.org 2001 XMLScheitia"typo "partiis:striiig"n;mic "string"

<part xnilns:p;m ns "http: vvvvvv.vv3.org 200 1 XMLScheitia"typo "partiis:striiig"n;mic "stringO"

<part xmlns:p;irt ns "http: vvvvvv.vv3.org 200 1 XMLSchtnna"i vpc "partiis:striiig"n;mic "string 1"

< / message>

- <message name="startResponse" >

<part xnilns:p;m ns "http: vvvvvv.vv3.org 200 1 XMLScheitia"typo "part ns:string"name= "result "/>

< / message>

- <portTvpe name "CPartTambourBeanlPort" >

- <operation name="getSample" >

<input message="tns:getSample"/>

<output message="tns:getSampleResponse"/>

< / operation>

- <operation name="start" >

<input message="tns:start"/>

<output message="tns:startResponse"/>

< / operation>

< / portTvpe>

- <binding type="tns:CPartTambourBeanlPort"name= "CPartTambourBeanlPort" >

<soap:binding style="rpc"transport=

" ht t p :/schemas. xmlsoap. org/soap/ht t p "/>

- <operation name="getSample" >

<soap:operation style="rpc"soapAction= />

- < input >

<soap:body namespace="http:/cparttambour_with_luftl" encodingStvle = "http: // schemas.xmlsoap.org/soap / encoding/ " use "encoded"

</input >

- < out put >

<soap:body namespace="http:/cparttambour_with_luftl"

encodingStvle^ "http: // schemas.xmlsoap.org/soap/encoding/" use "encoded"

</output>

< / operation>

- <operation name="start" >

<soap:operation style="rpc"soapAction= />

- < input >

<soap:body namespace="http:/cparttambour_with_luftl"

encodingStvle^ "http: // schemas.xmlsoap.org/soap / encoding/ " use "encoded"

</input >

- < out put >

<soap:body namespace="http:/cparttambour_with_luftl"

encodingStvle = "http:/schemas, xmlsoap.org/soap/encoding/" use "encoded"

</output>

< / operation>

</binding>

- <service пате "CPartTambourBeanl11 >

- <port и ми и1 "CPartTambourBeanl Port "hi tiding "tns:CPartTambourBeanlPort" >

<soap:address location^ "http:/syk-sv30:7001/CPartTambour -web-services / CPartTambourBeanl "/>

</port>

</service>

</definitions>

Затем пишется код клиента. Это можно сделать несколькими способами.

Приведем два примера:

1.

import package,CPartTambourBeanl :

String wsdlUrl = "http:/syk-1609:7001/CPartTambour-web-services/

CPart Tambour Beanl ?'W SDL ":

CPartTambourBeanl service new CPartTambourBeanl_Impl( wsdlUrl ): CPartTambour Beanl Port port=service,getCPartTambourBeanlPort(): result=port,start( ...);

Это пример вызова сервиса, разработанного с помощью инструмента JBuilder фирмы Borland, развернутого на syk-1609.

2.

package wsconnect;

у**

* ©author YasinskyV

7

import java.util,*: import net,n3,nanoxml,*: import wsdynamicclient,*:

import org,apache,axis,encoding.SerializationContext,*:

public class Main {

private static String wsdl="http:/syk-svl8:7003/CPartTambour-web-services / CPartTambour Beanl?WSDL"; public static void main(String[] args) { try{

wsdynamicclient,BC_invoker_xml invoker=new wsdynamicclient, BC_invoker_xml(wdl);

String[ j wsargs = new String[lj:

String result = ;

String params = " <params SSmax = ’8440’ SSmin = ’O’ MMaxEdge = ’O’ MMinEdge = ’O’ KKnifelnterval = ’O’ KKnifeCount = ’18’ MMinInterval=’0’ cf = ’600 800 400’ Lmax = ’53 54 55’ difference = ’1 10 20’ /> ": wsargs[0]=params;

if (invoker != null) result = invoker.invokeMethod ("startOOl", null, wsargs);

System, out, println(result);

}catch(Exception e){e,printStackTrace( ):}

}

}

Это вызов сервиса, развернутого на syk-svl8. Там для клиента открыт метод startOOl, которому на вход подается строка вида " <params SSmax = ’8480’ SSmin = ’8460’ MMaxEdge = ’100’ MMinEdge = ’20’ KKnifelnterval = ’200’ KKnifeCount = ’18’ MMinInterval=’200’ cf

= ’600’ Lmax = ’53’ difference = ’1’ / =" cf - эквивалентно Stringl из примера Lmax - String2 difference - String3

Результат возвращается в том же виде.

Также создан пользовательский интерфейс для сессионного бина в виде веб-приложения diagrams развернутого на syk-sv30. К нему можно обратиться по ссылке http:/syk-sv30:7001/diagrams/material,jsp? limes sess О

Литература

1, Никитенков В.Л.. Саковнич Д.Ю. Реализация комбинированного алгоритма решения целочисленной задачи линейного раскроя. Вестник Сыктывкарск. ун-та. Сер.1: Мат. Мех. Инф. 2006. Вып. 6. С. 199-209.

2, Хабибулин Э.Ш. Самоучитель Java2. СПб: БХВ-Петербург. 2005,

3, Эккель Б. Философия Java, Библиотека программиста, СПб: Питер, 2003,

4, Ньюкомер Э. Веб-сервисы, ХМ I.. WSDL, SOAP и UDDI, Для профессионалов, СПб: Питер, 2004,

5, ВЕА WebLogic ServerProgramming Web Services for WebLogic Server Version 9.0 Revised: July 22, 2005.

Summary

Nikitenkov V.L.,Yasinsky V.I. Web-services of complex algorithm for integer-valued problem of linear cutting

The problems of working over a network and the Internet, the superiority of Web-services over the other server-applications, a short description of the applied Web-service and the examples of Web-service query are discussed.

Сыктывкарский университет

Поступила 19.04-2006