Дипломна работа Лист № Съдържание: Обзор. 2 Грид систем


Добавяне на услугата в контейнера



страница9/9
Дата18.09.2016
Размер0.59 Mb.
#10053
ТипДиплом
1   2   3   4   5   6   7   8   9

4.5. Добавяне на услугата в контейнера.


Както стана ясно по нагоре в текста, ГАР файлът съдържа всички необходими файлове и информация необходими на уеб сървъра за внедряване. Самото добавяне се извършва с инструмент предоставян от Глобус тулкит 4, използвайки Ант, разархивирайки ГАР файла и копира файловете по ключови места в директорийното дърво на Глобус Тулкит 4. Това става със следната команда:

globus-deploy-gar $EXAMPLES_DIR/org_globus_examples_services_core_first.gar

Има команда и за противоположното действие:

globus-undeploy-gar org_globus_examples_services_core_first

С тази процедура завършват петте етапа, които бяха необходими за да се напише и да се вгради в контейнер една уеб услуга.

5. Резултати и изводи.

5.1. Резултати.


След извършените процедури разполагаме с уеб услуга, внедрена в контейнер, който позволява отдалечено извикване на реализираните в него услуги. Сега посредством простичко клиент приложение ще проверим функционалността на нашата уеб услуга. Клиентският клас се нарича Client и се намира във файла:

$EXAMPLES_DIR/org/globus/examples/clients/MathService_instance/Client.java

За да компилираме клиента трябва да направим следното:

javac \


-classpath ./build/stubs/classes/:$CLASSPATH \

org/globus/examples/clients/MathService_instance/Client.java

Преди да изпълним клиента е необходимо да стартираме контейнера с услуги, в противен случай нашата услуга няма да е на разположение и клиента няма да сработи. След като контейнера е вече стартиран може да видим във файла container.log, стартираните услуги. Веднага забелязваме, че нашата услуга е успешно стартирана от следния ред:

https://140.221.8.31:8443/wsrf/services/examples/core/first/MathService

Проверихме и се убедихме. Че услугата ни е стартирана и вече можем да изпълним клиента:

java \


-classpath ./build/stubs/classes/:$CLASSPATH \

org.globus.examples.clients.MathService_instance.Client \

https://140.221.8.31:8443/wsrf/services/examples/core/first/MathService

Набюдава се следният резултат:

Current value: 15

Current value: 10


5.2. Изводи.

Проектираната и реализирана в дипломната работа експериментална ГРИД среда предоставя напълно функционираща среда за паралелни изчисления, позволяваща използването на разнообразни по вид услуги.



  • Предложеното решение за ГРИД среда може да бъде внедрено на практика в структурата на университетската мрежа за да предостави възможност на студентите да експериментират с различни приложения в паралелното програмиране.

  • Изградената ГРИД система може да бъде лесно развивана и разширявана с добавянето на нови изчислителни възли по описаната процедура.

  • Възможно е разширяване на функционалността посредством внедряването на нови услуги в контейнера, които да отговарят на съответните нужди на потребителите.

  • При разрастване на ГРИД средата ще бъде необходимо отделянето на приложението отговарящо за сертификатите на отделна машина, която не участва в изчислителния процес за да се подобри производителността.

Приложение 1:


Участници в Българския Grid Консорциум

Институт по Паралелна Обработка на Информацията
Институт за Ядрени Изследвания и Ядрена Енергетика
Институт по Механика
Централна Лаборатория по Електрохимични Източници на Ток
Институт по Астрономия
Факултет по Математика и Информатика - Пловдивски Университет
Институт за Космически Изследвания
Американски Университет в България

Отворени форуми

Global Grid Forum - http://www.gridforum.org/

Grid Computing Info Centre (GRID Infoware) - http://www.gridcomputing.com/

eGrid: European Grid Computing Initiative - http://www.egrid.org/

EuroTools SIG on Metacomputing - http://www.eurotools.org/Sigs/Metacomputing.html

GGF Computing Portals Initiative - http://www.computingportals.org/

Peer-to-Peer Working Group - http://www.peer-to-peerwg.org/

New Productivity Initiative (NPI) - http://www.pulsipher.org/npia/



Приложение 2:

Програмен код на файла Math.wsdl




targetNamespace="http://www.globus.org/namespaces/examples/core/MathService_instance"

xmlns="http://schemas.xmlsoap.org/wsdl/"

xmlns:tns="http://www.globus.org/namespaces/examples/core/MathService_instance"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"

xmlns:wsrpw="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.wsdl"

xmlns:wsdlpp="http://www.globus.org/namespaces/2004/10/WSDLPreprocessor"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

namespace=

"http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.wsdl"

location="../../wsrf/properties/WS-ResourceProperties.wsdl" />

============================================================
T Y P E S

============================================================-->





xmlns:tns="http://www.globus.org/namespaces/examples/core/MathService_instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

REQUESTS AND RESPONSES -->























RESOURCE PROPERTIES -->























============================================================


M E S S A G E S

============================================================-->


















============================================================


P O R T T Y P E

============================================================-->

wsdlpp:extends="wsrpw:GetResourceProperty"

wsrp:ResourceProperties="tns:MathResourceProperties">



























Програмен код на уеб услугата


package org.globus.examples.services.core.first.impl;
import java.rmi.RemoteException;
import org.globus.wsrf.Resource;

import org.globus.wsrf.ResourceProperties;

import org.globus.wsrf.ResourceProperty;

import org.globus.wsrf.ResourcePropertySet;

import org.globus.wsrf.impl.ReflectionResourceProperty;

import org.globus.wsrf.impl.SimpleResourcePropertySet;

import org.globus.examples.stubs.MathService_instance.AddResponse;

import org.globus.examples.stubs.MathService_instance.SubtractResponse;

import org.globus.examples.stubs.MathService_instance.GetValueRP;
public class MathService implements Resource, ResourceProperties {
/* Resource Property set */

private ResourcePropertySet propSet;


/* Resource properties */

private int value;

private String lastOp;
/* Constructor. Initializes RPs */

public MathService() throws RemoteException {

/* Create RP set */

this.propSet = new SimpleResourcePropertySet(

MathQNames.RESOURCE_PROPERTIES);
/* Initialize the RP's */

try {


ResourceProperty valueRP = new ReflectionResourceProperty(

MathQNames.RP_VALUE, "Value", this);

this.propSet.add(valueRP);

setValue(0);


ResourceProperty lastOpRP = new ReflectionResourceProperty(

MathQNames.RP_LASTOP, "LastOp", this);

this.propSet.add(lastOpRP);

setLastOp("NONE");

} catch (Exception e) {

throw new RuntimeException(e.getMessage());

}

}
/* Get/Setters for the RPs */



public int getValue() {

return value;

}
public void setValue(int value) {

this.value = value;

}
public String getLastOp() {

return lastOp;

}
public void setLastOp(String lastOp) {

this.lastOp = lastOp;

}
/* Remotely-accessible operations */
public AddResponse add(int a) throws RemoteException {

value += a;

lastOp = "ADDITION";
return new AddResponse();

}
public SubtractResponse subtract(int a) throws RemoteException {

value -= a;

lastOp = "SUBTRACTION";


return new SubtractResponse();

}
public int getValueRP(GetValueRP params) throws RemoteException {

return value;

}
/* Required by interface ResourceProperties */

public ResourcePropertySet getResourcePropertySet() {

return this.propSet;

}

}
Програмен код на файла deploy-server.wsdd





xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">



share/schema/examples/MathService_instance/Math_service.wsdl


Програмен код на файла deploy-jndi-config.xml









factory

org.globus.wsrf.jndi.BeanFactory







Програмен код на клиента
package org.globus.examples.clients.MathService_instance;
import org.apache.axis.message.addressing.Address;

import org.apache.axis.message.addressing.EndpointReferenceType;


import org.globus.examples.stubs.MathService_instance.MathPortType;

import org.globus.examples.stubs.MathService_instance.GetValueRP;

import org.globus.examples.stubs.MathService_instance.service.MathServiceAddressingLocator;
public class Client {
public static void main(String[] args) {

MathServiceAddressingLocator locator = new MathServiceAddressingLocator();


try {

String serviceURI = args[0];


// Create endpoint reference to service

EndpointReferenceType endpoint = new EndpointReferenceType();

endpoint.setAddress(new Address(serviceURI));

MathPortType math = locator.getMathPortTypePort(endpoint);


// Get PortType

math = locator.getMathPortTypePort(endpoint);


// Perform an addition

math.add(10);


// Perform another addition

math.add(5);


// Access value

System.out.println("Current value: "

+ math.getValueRP(new GetValueRP()));
// Perform a subtraction

math.subtract(5);


// Access value

System.out.println("Current value: "

+ math.getValueRP(new GetValueRP()));

} catch (Exception e) {

e.printStackTrace();

}

}


}
Програмен код на файла ClientAdd.java
package org.globus.examples.clients.MathService_instance;
import java.io.FileInputStream;
import org.apache.axis.message.addressing.Address;

import org.apache.axis.message.addressing.EndpointReferenceType;


import org.globus.examples.stubs.MathService_instance.GetValueRP;

import org.globus.examples.stubs.MathService_instance.MathPortType;

import org.globus.examples.stubs.MathService_instance.service.MathServiceAddressingLocator;

import org.globus.wsrf.encoding.ObjectDeserializer;

import org.xml.sax.InputSource;
public class ClientAdd {
public static void main(String[] args) {

MathServiceAddressingLocator instanceLocator = new MathServiceAddressingLocator();


try {

int value = Integer.parseInt(args[1]);

EndpointReferenceType instanceEPR;
if (args[0].startsWith("http")) {

// First argument contains a URI

String serviceURI = args[0];

// Create endpoint reference to service

instanceEPR = new EndpointReferenceType();

instanceEPR.setAddress(new Address(serviceURI));

} else {

// First argument contains an EPR file name

String eprFile = args[0];

// Get endpoint reference of WS-Resource from file

FileInputStream fis = new FileInputStream(eprFile);

instanceEPR = (EndpointReferenceType) ObjectDeserializer

.deserialize(new InputSource(fis),

EndpointReferenceType.class);

fis.close();

}
// Get PortType

MathPortType math = instanceLocator

.getMathPortTypePort(instanceEPR);


// Perform addition

math.add(value);


// Access value

System.out

.println("Current value:" + math.getValueRP(new GetValueRP()));

} catch (Exception e) {

e.printStackTrace();

}

}



}

Програмен код на файла ClientSubtract.java


package org.globus.examples.clients.MathService_instance;
import java.io.FileInputStream;
import org.apache.axis.message.addressing.Address;

import org.apache.axis.message.addressing.EndpointReferenceType;


import org.globus.examples.stubs.MathService_instance.GetValueRP;

import org.globus.examples.stubs.MathService_instance.MathPortType;

import org.globus.examples.stubs.MathService_instance.service.MathServiceAddressingLocator;

import org.globus.wsrf.encoding.ObjectDeserializer;

import org.xml.sax.InputSource;
public class ClientSubtract {
public static void main(String[] args) {

MathServiceAddressingLocator instanceLocator = new MathServiceAddressingLocator();

try {

int value = Integer.parseInt(args[1]);



EndpointReferenceType instanceEPR;
if (args[0].startsWith("http")) {

// First argument contains a URI

String serviceURI = args[0];

// Create endpoint reference to service

instanceEPR = new EndpointReferenceType();

instanceEPR.setAddress(new Address(serviceURI));

} else {

// First argument contains an EPR file name

String eprFile = args[0];

// Get endpoint reference of WS-Resource from file

FileInputStream fis = new FileInputStream(eprFile);

instanceEPR = (EndpointReferenceType) ObjectDeserializer

.deserialize(new InputSource(fis),

EndpointReferenceType.class);

fis.close();

}
// Get PortType

MathPortType math = instanceLocator

.getMathPortTypePort(instanceEPR);


// Perform addition

math.subtract(value);


// Access value

System.out.println("Current value:" + math.getValueRP(new GetValueRP()));

} catch (Exception e) {

e.printStackTrace();



}

}

}


Използвана литература:


  1. Introduction to Grid Computing - Bart Jacob, Michael Brown, Kentaro Fukui, Nihar Trivedi

  2. http://www.globus.org/

  3. http://www.globus.org/toolkit/

  4. Българският Грид Портал - http://www.grid.bas.bg

  5. Уикипедия - http://www.wikipedia.org/

  6. Документи от http://www.gridcomputing.com

Проектиране и изграждане на експериментална ГРИД среда


Каталог: 123
123 -> Възникване и развитие на телевизионната индустрия. Модели телевизионни организации
123 -> Списание „Прозорец”3/12
123 -> Н а р е д б а за реда за придобиване, управление и разпореждане с общинско имущество
123 -> Програма за действие по околната среда: Към устойчиво развитие Европейска Общностна програма за политиката и действията по отношение на околната среда и устойчивото развитие
123 -> Curriculum vitae
123 -> За произхода на някои български названия на малки предмети Живка Колева-Златева
123 -> Съобщение на комисията до европейския парламент и съвета план за действие за намаляване на инцидентния улов на морски птици в риболовните уреди
123 -> На научната продукция на ДНК маргарита карамихова
123 -> Програма за овм. Концепция за опазване и мониторинг на овм, чрез изграждане на мрежа от сътрудници по места


Сподели с приятели:
1   2   3   4   5   6   7   8   9




©obuch.info 2024
отнасят до администрацията

    Начална страница