Porovnávané verzie

Kľúč

  • Tento riadok sa pridal
  • Riadok je odstránený.
  • Formátovanie sa zmenilo.

...

4.3.2.4. Mapovanie parametra so štruktúrovaným typom

Blok kódu
languagejava
themeEclipse
@RPC(name = "Redim",

...


	parameters =

...


	{
		@Parameter(name = "n", type = ParameterType.integer, inOut = false),

...


		@Parameter(name = "r", type = ParameterType.record, recordType = Person.class)

...


	})

...


@ReturnValue(name = "r")

...


public List<Person> redim(

...


	@ParameterValue(name = "n") Integer length,

...


	@ParameterValue(name = "r") List<Person> data);

Metóda redim mapuje RPC, ktorej druhým formálnym parametrom je štruktúrovaná hodnota. Pre správne mapovanie je typ parametra v anotácii nastavený na @Parameter.type = ParameterType.record a nepovinný parameter anotácie @Parameter.recordType = Person.class. Použitá definícia štruktúry SD.Person a jej mapovanie triedou Person pochádza z kapitoly 5.2.1.

Pri použití metódy redim bude pre účely návratovej hodnoty vytvorená nová inštancia typu List<Person> a jej prvky budú nové inštancie typu Person napriek tomu, že majú rovnaký obsah ako inštancie, ktoré boli použité ako parametre.

4.3.2.5. Mapovanie asynchrónneho volania a časovej značky hodnoty

...

Blok kódu
languagejava
themeEclipse
@RPC(name = "SetValue",

...


	asynchronous = true,

...


	parameters =

...


	{
		@Parameter(name = "v", type = ParameterType.time, inOut = false)

...


	})

...


public void setValue(

...


	@ParameterValue(name = "v") Date value,

...


	@ParameterAttribute(name = "v", attributeType = UnivalAttributeType.valueTime)

...


	Long valueTime);

Metóda setValue sa od predošlých príkladov odlišuje tým, že mapuje asynchrónne volanie (RPC.asynchronous = true). To znamená, že z pohľadu používateľa skončí jej volanie okamžite (po odoslaní správy) a nečaká sa na doručenie odpovede o výsledku. Preto tiež asynchrónna metóda nemôže pristupovať ku výstupnej časti parametrov volania a teda nemôže použiť anotáciu @ReturnValue alebo @ReturnAttribute a takisto nemôže nastaviť parametre anotácií ParameterValue.direction a ParameterAttribute ParameterAttribute.direction na hodnoty inout alebo out.

Nová anotácia @ParameterAttribute mapuje vybraný unival atribút – v tomto prípade časovú značku hodnoty (attributeType = UnivalAttributeType.valueTime) . Pozor, nie je dovolené zavolať metódu s null hodnotou null hodnotou tohto parametra – mapovanie null na atribút univalu nie je možné.

V príklade je zámerne použitý iný typ parametra value (java.util.Date) a parametra valueTime (java.lang.Long). Obidva typy je možné rovnako dobre použiť na mapovanie hodnoty vyjadrujúcej „D2000 absolútny čas", ich výber je na tvorcovi mapovania.

4.3.2.6. Mapovanie procedúry s dvomi výstupnými štruktúrovanými parametrami

...

Blok kódu
languagejava
themeEclipse
@RPC(name = "GetDataAndMetadata",

...


	asynchronous = false,

...


	parameters =

...

 
		{
			@Parameter(
				name = "data",

...


				inOut = true,

...


				type = ParameterType.record,

...


				recordType = Person.class),

...


			@Parameter(

...


				name = "meta",

...


				inOut = true,

...


				type = ParameterType.record,

...


				recordType = Metadata.class)})

...


public void getDataAndMetadata(

...


	@ParameterValue(name = "data") InOut<List<Person>> data,

...


	@ParameterValue(name = "meta") InOut<List<Metadata>> meta);

Metóda getDataAndMetadata mapuje procedúru s dvomi vstupno-výstupnými parametrami (2 parametre s inOut = true). V porovnaní s predošlými metódami stojí za povšimnutie:

...