Przykładowa aplikacja - Hello World

Instalacja i uruchomienie

Przed uruchomieniem przykładowych aplikacji należy zapoznać się z Instalacją platformy jAgE

Wszystkie przykładowe aplikacje znajdują się w repozytorium svn pod adresem: https://caribou.iisg.agh.edu.pl/svn/age/jage/trunk/examples/ (lub dostep anonimowy: http://caribou.iisg.agh.edu.pl/pub/svn/age/jage/trunk/examples).

Należy ściągnąć cały katalog examples, a w nim:

  • solutions-examples - zawiera implementacje komponentów obliczeniowych, agentów, strategii, etc,
  • applications-examples - zawiera konfiguracje uruchomieniowe, które składają system obliczeniowy z dostępnych komponentów oraz pliku uruchomieniowe,
  • pom.xml - plik Mavena (Project Object Model) dla obu projektów - definiuje zależności, sposób budowania i dystrybucji projektu (więcej na temat plików pom: http://maven.apache.org/guides/introduction/introduction-to-the-pom.html).

W celu zaimportowania projektów do Eclipse'a należy wygenerować pliki .project oraz .classpath. Z poziomu głównego katalogu (examples) trzeba wykonać komendę

mvn eclipse:eclipse

Podczas wykonywania tego polecenia wymagane jest aktywne połączenie z Internetem, ponieważ Maven automatycznie pobiera wszystkie wymagane komponenty potrzebne do uruchomienia platformy. Przed zaimportowaniem projektów należy usunąć katalog .settings oraz pliki .project i .classpath z katalogu examples.

Do repozytorium nie commitujemy plików Eclipse'a.

Po wygenerowaniu w/w plików projekty można zaimportować do Eclipse'a (File -> Import -> Existing project into Workspace) - trzeba zaimportować oba wygenerowane projekty (tj. solutions i applications).

Przykładowe aplikacje są gotowe do uruchomienia: w katalogu src/main/config w projekcie applications znajdują się konfiguracje uruchomieniowe dla wszystkich przykładów. Uruchamia się je w Eclipsie klikając prawym klawiszem i wybierając Run As, a następnie nazwę konfiguracji.

Konfiguracja projektu - pom.xml

W pomie projektu, który zawiera implemetacje agentów, strategii, etc (solutions), musimy mieć zależność od core w wersji 2.4.0

<dependency>
  <groupId>org.jage.platform</groupId>
  <artifactId>core</artifactId>
  <version>2.4.0</version>
</dependency>
<dependency>
  <groupId>org.jage.platform</groupId>
  <artifactId>core</artifactId>
  <version>2.4.0</version>
  <classifier>sources</classifier>
</dependency>

Natomiast w pomie, modułu zawierającego pliki konfiguracyjne i startowe (applications), należy dodać zależność swojego modułu solutions oraz od node w wersji 2.4.0:

<dependency>
  <groupId>org.jage.platform</groupId>
  <artifactId>node</artifactId>
  <version>2.4.0</version>
</dependency>
<dependency>
  <groupId>org.jage.platform</groupId>
  <artifactId>node</artifactId>
  <version>2.4.0</version>
  <classifier>sources</classifier>
</dependency>

Pliki konfiguracyjne

Każda aplikacja składa się z co najmniej dwóch plików konfiguracyjnych:

  • age.xml, który zawiera konfigurację głównych komponentów platformy,
  • workplace.xml, który zawiera konfigurację pojedynczej jednostki obliczeniowej (workplace).

age.xml

Plik age.xml dla aplikacji helloworld (applications/src/main/resources/examples/helloworld/age.xml):

Plik age.xml

Istotne elementy


<?xml version="1.0" encoding="ISO-8859-1" ?>
<configuration xmlns="http://age.iisg.agh.edu.pl/AgE/2.3"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://age.iisg.agh.edu.pl/AgE/2.3 http://age.iisg.agh.edu.pl/xsd/age-2.3.xsd">

	<component name="workplaceManager" class="org.jage.pico.PicoWorkplaceManager"
		isSingleton="true">
		<include file="./workplace.xml" />
	</component>

	<component name="addressRegister"
		class="org.jage.address.provider.DefaultAddressRegister" isSingleton="true" />

	<component name="stopCondition"
		class="org.jage.workplace.FixedStepCountStopCondition" isSingleton="true">
		<constructor-arg>
			<value class="Long" value="10" />
		</constructor-arg>
	</component>

	<component name="configParams" class="org.jage.node.AgENodeParams"
		isSingleton="true">
		<property name="debug">
			<value class="Boolean" value="true" />
		</property>
	</component>
</configuration>




1. NEW: Definicja schematu pliku wg http://age.iisg.agh.edu.pl/xsd/age-2.3.xsd



2. Definicja workplace manager'a wraz z wczytaniem jego konfiguracji z osobnego pliku




3. NEW: Definicja serwisu nazw (IAddressRegister), który odpowiedzialny jest za zarządzaniem adresami na danym węźle

4. NEW: Warunek stopu (więcej). Obecna implementacja (FixedStepCountStopCondition) zatrzymuje workplace'y, jeśli jeden z nich osiągnie zadaną liczbę kroków.




5. Parametry platformy.

workplace.xml

Plik workplace.xml

Istotne elementy


<?xml version="1.0" encoding="ISO-8859-1" ?>
<configuration xmlns="http://age.iisg.agh.edu.pl/AgE/2.3"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://age.iisg.agh.edu.pl/AgE/2.3 http://age.iisg.agh.edu.pl/xsd/age-2.3.xsd">
	<agent name="workplace" class="org.jage.workplace.IsolatedSimpleWorkplace">
		<property name="address">
			<value class="AgentAddress" value="TheXFiles" />
		</property>

		<list name="agents">
			<agent name="scully" class="org.jage.examples.helloworld.HelloWorldSimpleAgent">
				<property name="address">
					<value value="Scully" class="AgentAddress" />
				</property>
			</agent>
			<reference target="scully"/>

			<agent name="mulder" class="org.jage.examples.helloworld.HelloWorldSimpleAgent">
				<property name="address">
					<value value="Mulder" class="AgentAddress" />
				</property>
			</agent>
			<reference target="mulder"/>

		</list>
		<property name="agents">
			<reference target="agents"/>
		</property>
	</agent>
</configuration>




1. NEW: Definicja schematu pliku wg http://age.iisg.agh.edu.pl/xsd/age-2.3.xsd



2. Definicja pojedynczego workplace'a




3. Definicje agentów rezydujących w workplace'ie