Spring Android

8 views
Skip to first unread message

Filip Kolarik

unread,
Nov 10, 2011, 7:55:19 AM11/10/11
to ctu...@googlegroups.com
Čau,
Spring nabízí i Spring Android jako extension. Nemám s tím žádné zkušenosti, ale pokud to někdo vyzkoušíte, podělte se.

Spring Android is an extension of the Spring Framework that aims to simplify the development of native Android applications.

http://www.springsource.org/spring-android


Zdraví

Filip Kolařík

Jan Pěček

unread,
Nov 10, 2011, 8:02:34 AM11/10/11
to ctu...@googlegroups.com
Zdravím,

On 10.11.2011 13:55, Filip Kolarik wrote:
> Spring nabízí i Spring Android jako extension. Nemám s tím žádné zkušenosti, ale pokud to někdo
> vyzkoušíte, podělte se.

chtěl bych jenom při této příležitosti vzpomenout na další RESTful frameworky. Již zmíněný Restlet
nebo Jersey. Jsou přímo určené pro tvorbu Restful služby a v podstatě je není nutné vůbec
konfigurovat. Osobně mi použití Springu přijde dobré, za předpokladu, že by existovalo i webové
rozhraní. To třeba náš tým neplánuje, a proto spíše využijeme třeba Restletu. Pokud by někdo
potřeboval s rozchozením poradit, pište. Aktuálně v tom jednu funkční aplikaci mám (a mohu ji
poskytnout), tedy bez napojení na Android, ale mohu nějaký prototyp vytvořit (bude-li čas).

Honza

Filip Kolarik

unread,
Nov 10, 2011, 8:58:24 AM11/10/11
to ctu...@googlegroups.com
supr že se vám podařilo RESTlet rozchodit, dneska na přednášce někdo zmiňoval že má s RESTlet problémy, tak skelet určite nasdílejte.

add Spring vs RESTlet, je to trochu jabka a hrusky, RESTlet je framework primo navrzeny pro tvorbu RESTful API zatímco Spring Framework je soubor modulů obecne pro podporu tvorby java aplikací.
Spring například ve formě Data Access a IoC najdete dneska i v desktop aplikacích, s címž samozřejmě přicházejí nevýhody v tom že není vše šito na míru RESTu jako u RESTletu, a musíte toho více nastudovat protože je ten framework prostě mohutnější. Volte podle potřeb, ale zajímavá může být i kvalita dokumentace, podpora, atp. 

add Spring a UI, spring ma View obstrakci, která mimo jiné umožnuje použít i šablon, integrovaná je podpora pro JSP, Velocity, FreeMarker, na druhou stranu tuto možnost nikdy využít nemusíte, Spring vás nenutí, nebral bych to jako dúvod proč spring odmítnout. Pokud byste ale napsal že vzhledem k typu vaší aplikace vám bohatě stačí RESTlet tak není co dodat ;) a faktem také je, že server - side scriptovaní je jednoznačne thin client technologie, což by neměl být váš primární cíl, neděláme nějaké webovky ale mobilní aplikace.

Zdraví
Filip

2011/11/10 Jan Pěček <pece...@fel.cvut.cz>

Libor Bukata

unread,
Nov 10, 2011, 4:11:03 PM11/10/11
to ctu...@googlegroups.com
Dobrý den,

nahrál jsem na naší HP zdrojové kódy zatím nefunkční aplikace:
https://sites.google.com/site/partypooliscool/restlet-base

Používám tam knihovny stažené z http://www.restlet.org/.

Zdrojáky obsahují jak klienta, tak server.

Základní problémy:
Funguje pouze metoda Get/Put/Delete bez parametru (viz. současná
implementace GET metody serveru).
Jakmile předám do těchto metod jako parametr objekt, kterým přenáším
data, tak put spadne na chybě "Unsupported Media Type", zkusím-li
delete, tak je chyba "Bad Request".
Zajímavé ovšem je, že pokud se zruší u datového objektu implementace
Serializable, tak se metody zavolají, ovšem to má jeden háček, jakmile
se přistoupí přes get metody k libovolné datové položce, tak to spadne
na vyjímce, která vrátí zprávu o velikosti nula => nulová informační
hodnota.
Zkoušel jsem všechny verze, tj. stable, testing, unstable.

Do projektu se musí knihovny importovat, a to konkrétně takto:
GAE server: war/WEB-INF/lib/ (z archivu pro GAE)
org.restlet.jar
org.restlet.ext.servlet.jar
org.restlet.ext.jackson.jar
org.codehaus.jackson.mapper.jar
org.codehaus.jackson.core.jar

Android klient: Eclipse - Add External JARs (balíček pro Android)
org.restlet.jar

Mám největší podezření, že neprobíhá korektně
serializace/deserializace, avšak nevím jak to ověřit, přes Wireshark
jsem toho moc nevyčetl (data byla pravděpodobně zkomprimována).

Děkuji za jakoukoliv pomoc.

S pozdravem Libor Bukata.


Dne 10. listopadu 2011 14:58 Filip Kolarik <fil...@gmail.com> napsal(a):

Jan Pěček

unread,
Nov 11, 2011, 5:32:21 AM11/11/11
to ctu...@googlegroups.com
Zdrav�m,

kouknul jsem zat�m pouze na server, klienta jsem v emul�toru nastartoval, ale zat�m jsem ne�e�il,
aby se p�ipojil na b��c� lok�ln� server. Tak jsem pou�il mobil...

On 10.11.2011 22:11, Libor Bukata wrote:
> Funguje pouze metoda Get/Put/Delete bez parametru (viz. sou�asn�
> implementace GET metody serveru).
> Jakmile p�ed�m do t�chto metod jako parametr objekt, kter�m p�en��m
> data, tak put spadne na chyb� "Unsupported Media Type", zkus�m-li


> delete, tak je chyba "Bad Request".

> Zaj�mav� ov�em je, �e pokud se zru�� u datov�ho objektu implementace
> Serializable, tak se metody zavolaj�, ov�em to m� jeden h��ek, jakmile
> se p�istoup� p�es get metody k libovoln� datov� polo�ce, tak to spadne
> na vyj�mce, kter� vr�t� zpr�vu o velikosti nula => nulov� informa�n�
> hodnota.

1. K testov�n� funk�nosti serveru bych doporu�il Rest klienta:
http://code.google.com/p/rest-client/

2. Metody GET a DELETE dle v�eho nemaj� obsah (RFC se o tom ani nezmi�uje). Nediv�m se pak, �e
DELETE spadne. http://tools.ietf.org/html/rfc2616#section-9

3. U PUT moc neporad�m, je t�eba odchytit tu s�ovou komunikaci.
J� jsem p�es program (1.) tam poslal toto (application/json):
{"stringId": 10, "value": "aaaaa"}
a data se p�ijala.
V uk�zkov� implementaci v dokumentaci
http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet/303-restlet.html
objekt rozhran� Serializable m�. Netu��m, jestli nem�e d�lat probl�m anotace od JDO.
Zkusil jsem uk�zkovou aplikaci p�elo�it (dalo mi to trochu pr�ce) a rozjet p��mo na telefonu. P�i
odchycen� s�ov� komunikace tam chod� norm�ln� serializovan� objekty. Doporu�il bych se t�mto
examplem inspirovat.

K tomuto a pro v�echny: Pokud si podep�ete aplikaci a nainstalujete do za��zen�, tak alespo� m�j
HTC Desire um� n�co jako Internet pass-thought (jak je to s tabletem nev�m), tedy �e kabelem
p�ipojen�m k po��ta�i se p�ipoj� k internetu. To ale ani nen� pot�eba - d�le�it� je to s�ov�
rozhran�. Pokud pak rozjedete lok�ln� AppEngine na v�ech rozhran�ch (defaultn� poslouch� jen na
localhostu), je mo�n� se z Androida na n�j rovnou p�ipojit a co v�c, chytat rovnou s�ovou
komunikaci (bez nutnosti deploye na Google AppEngine server, tj. funguje debugger!!). Rozhran� t�eba
u m� m� IP 192.168.99.54, u v�s bude m�t tak� n�jakou podobnou lok�ln�. Nastaven� poslouchan�ch
rozhran� lze v Run Configuration v AppEngine Settings (prav� my��tko projekt -> Google -> AppEngine
Settings -> Run Configuration -> zvolte aplikaci -> Arguments) buďż˝ pomocďż˝ -bindAddress 0.0.0.0 nebo
pomoc� --address=0.0.0.0, podle toho, zda pou��v�te GWT (prvn�) nebo ne (druh�) - GWT toti� pou��v�
jinďż˝ startovacďż˝ knihovny.

Tak snad to alespo� trochu pom�e.

Honza

Libor Bukata

unread,
Nov 12, 2011, 2:38:31 PM11/12/11
to ctu...@googlegroups.com
Dobrý den,

po cca 24 hodinách čistého času jsem odhalil skutečnou příčinu
nefunkčnosti. Tím bylo to, že balíček datových tříd, co jsem přenášel
skrz síť, byl různě pojmenovaný na klientovi i serveru. Docela mě to
překvapilo, a to z toho důvodu, že vše ostatní bylo naprosto stejné
(metody, datové typy, název třídy...). Až malinko doladím klienta a
server, tak to pošlu na naší HP, aby všichni ostatní mohli použít
tento alternativní framework, pokud budou mít zájem. Pokud na tom
ušetří celkově více času, než jsem do tohoto investoval, tak vím, že
má práce nebyla zbytečná. Jinak děkuji za rady, testovací aplikace na
REST služby byla jistě užitečná.

Přeji hezký den a hodně zdaru s laděním Android aplikací.

2011/11/11 Jan Pěček <pece...@fel.cvut.cz>:
> Zdravím,
>
> kouknul jsem zatím pouze na server, klienta jsem v emulátoru nastartoval, ale zatím jsem neřešil,
> aby se připojil na běžící lokální server. Tak jsem použil mobil...


>
> On 10.11.2011 22:11, Libor Bukata wrote:

>> Funguje pouze metoda Get/Put/Delete bez parametru (viz. současná
>> implementace GET metody serveru).


>> Jakmile předám do těchto metod jako parametr objekt, kterým přenáším
>> data, tak put spadne na chybě "Unsupported Media Type", zkusím-li

>> delete, tak je chyba "Bad Request".

>> Zajímavé ovšem je, že pokud se zruší u datového objektu implementace
>> Serializable, tak se metody zavolají, ovšem to má jeden háček, jakmile
>> se přistoupí přes get metody k libovolné datové položce, tak to spadne
>> na vyjímce, která vrátí zprávu o velikosti nula => nulová informační
>> hodnota.
>

> 1. K testování funkčnosti serveru bych doporučil Rest klienta:
> http://code.google.com/p/rest-client/
>
> 2. Metody GET a DELETE dle všeho nemají obsah (RFC se o tom ani nezmiňuje). Nedivím se pak, že
> DELETE spadne. http://tools.ietf.org/html/rfc2616#section-9
>
> 3. U PUT moc neporadím, je třeba odchytit tu síťovou komunikaci.
> Já jsem přes program (1.) tam poslal toto (application/json):
> {"stringId": 10, "value": "aaaaa"}
> a data se přijala.
> V ukázkové implementaci v dokumentaci
> http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet/303-restlet.html
> objekt rozhraní Serializable má. Netuším, jestli nemůže dělat problém anotace od JDO.
> Zkusil jsem ukázkovou aplikaci přeložit (dalo mi to trochu práce) a rozjet přímo na telefonu. Při
> odchycení síťové komunikace tam chodí normálně serializované objekty. Doporučil bych se tímto
> examplem inspirovat.
>
> K tomuto a pro všechny: Pokud si podepíšete aplikaci a nainstalujete do zařízení, tak alespoň můj
> HTC Desire umí něco jako Internet pass-thought (jak je to s tabletem nevím), tedy že kabelem
> připojeným k počítači se připojí k internetu. To ale ani není potřeba - důležité je to síťové
> rozhraní. Pokud pak rozjedete lokální AppEngine na všech rozhraních (defaultně poslouchá jen na
> localhostu), je možné se z Androida na něj rovnou připojit a co víc, chytat rovnou síťovou
> komunikaci (bez nutnosti deploye na Google AppEngine server, tj. funguje debugger!!). Rozhraní třeba
> u mě má IP 192.168.99.54, u vás bude mít také nějakou podobnou lokální. Nastavení poslouchaných
> rozhraní lze v Run Configuration v AppEngine Settings (pravý myšítko projekt -> Google -> AppEngine
> Settings -> Run Configuration -> zvolte aplikaci -> Arguments) buď pomocí  -bindAddress 0.0.0.0 nebo
> pomocí --address=0.0.0.0, podle toho, zda používáte GWT (první) nebo ne (druhý) - GWT totiž používá
> jiné startovací knihovny.
>
> Tak snad to alespoň trochu pomůže.
>
> Honza
>

Jan Sedivy

unread,
Nov 12, 2011, 2:41:35 PM11/12/11
to ctu...@googlegroups.com

Libore, koordinujte to, prosim, s Filipem.

Jan Pěček

unread,
Nov 12, 2011, 2:45:46 PM11/12/11
to ctu...@googlegroups.com
Zdrav�m,


On 12.11.2011 20:38, Libor Bukata wrote:
> po cca 24 hodin�ch �ist�ho �asu jsem odhalil skute�nou p���inu
> nefunk�nosti. T�m bylo to, �e bal��ek datov�ch t��d, co jsem p�en�el
> skrz s�, byl r�zn� pojmenovan� na klientovi i serveru. Docela m� to
> p�ekvapilo, a to z toho d�vodu, �e v�e ostatn� bylo naprosto stejn�
> (metody, datov� typy, n�zev t��dy...).

To je dost pochopiteln�. Kdy� se objekt serializuje, tak se p�en�� spousta informac� v�etn� jeho
jm�na. Sta�� jej ulo�it do souboru nebo pod�vat se na s�ovou komunikaci. P��t� by bylo mo�n� lep��
poslat k�d a zeptat se, ne� marnit takov� �as. Je tu spoustu lid�, kte�� r�di ob�tuj� chv�li a
kouknou na to, proto�e to pro n� m�e b�t t�eba tak� u�ite�n�.

Pr�v� pro shodnost objekt� doporu�uju objekty, kter� se maj� p�en�et, d�t rovnou do p��slu�n�ch
rozhran� (ano, i v rozhran� m�e b�t t��da), p�i�em� na serveru i klientovi pou�iju stejnou sadu
t��d (�pln� nejl�pe zkompilovan� jako JARko, abych do n�j nemohl zasahovat).


Honza

Libor Bukata

unread,
Nov 12, 2011, 3:19:23 PM11/12/11
to ctu...@googlegroups.com
Dobrý den,

kód jsem poslal (viz. HP a předchozí příspěvek), a nikdo mi neporadil,
kde je chyba. Když jsem napsal řešení, tak pak je každý chytrý...
A Wiresharkem jsem neměl moc šancí vyčíst, kde je chyba, bylo by
dobré, aby jste mi to předvedl, nevšiml jsem si, kde se tam posílá
název balíčku.

Libor B.

2011/11/12 Jan Pěček <pece...@fel.cvut.cz>:
> Zdravím,


>
>
> On 12.11.2011 20:38, Libor Bukata wrote:

>> po cca 24 hodinách čistého času jsem odhalil skutečnou příčinu
>> nefunkčnosti. Tím bylo to, že balíček datových tříd, co jsem přenášel
>> skrz síť, byl různě pojmenovaný na klientovi i serveru. Docela mě to
>> překvapilo, a to z toho důvodu, že vše ostatní bylo naprosto stejné
>> (metody, datové typy, název třídy...).
>

> To je dost pochopitelné. Když se objekt serializuje, tak se přenáší spousta informací včetně jeho
> jména. Stačí jej uložit do souboru nebo podívat se na síťovou komunikaci. Příště by bylo možná lepší
> poslat kód a zeptat se, než marnit takový čas. Je tu spoustu lidí, kteří rádi obětují chvíli a
> kouknou na to, protože to pro ně může být třeba také užitečné.
>
> Právě pro shodnost objektů doporučuju objekty, které se mají přenášet, dát rovnou do příslušných
> rozhraní (ano, i v rozhraní může být třída), přičemž na serveru i klientovi použiju stejnou sadu
> tříd (úplně nejlépe zkompilované jako JARko, abych do něj nemohl zasahovat).
>
>
> Honza
>
>

Jan Pěček

unread,
Nov 12, 2011, 4:14:16 PM11/12/11
to ctu...@googlegroups.com
Zdrav�m,

On 12.11.2011 21:19, Libor Bukata wrote:

> k�d jsem poslal (viz. HP a p�edchoz� p��sp�vek), a nikdo mi neporadil,
> kde je chyba. Kdy� jsem napsal �e�en�, tak pak je ka�d� chytr�...

no flame pls. Sna�il jsem se ve sv�m p�edchoz�m postu (ne dne�n�m) poradit co nejv�ce, jak jsem um�l
(v�etn� �asu, kter� jsem tomu mohl v�novat). Net�eba si myslet, �e po bitv� je ka�d� gener�lem. Na
k�d jsem se tak� d�val ale ��dn� fat�ln� chyby jsem nena�el.

Nelze �ekat, �e n�kdo �ekne, �e na ��dku 250 v souboru XY je chyba. Sna�il jsem se nast�nit mo�n�
p���iny probl�mu (v�etn� uveden� anotace, co� mohlo sm��ovat k odhalen� skute�n� chyby).

Jinak mysl�m, �e odhalen� probl�mu ur�it� pom�e nejednomu v�voj��i, p�i hled�n� mo�n�ch chyb.
Douf�m, �e v�ichni te� Restlet nezahod� a nebudou se sna�it konfigurovat Spring...

> A Wiresharkem jsem nem�l moc �anc� vy��st, kde je chyba, bylo by
> dobr�, aby jste mi to p�edvedl, nev�iml jsem si, kde se tam pos�l�
> n�zev bal��ku.

Vych�z� to z podstaty serializace, kdy se p�en�� kompletn� jm�no objektu, kter� obsahuje samoz�ejm�
i n�zev bal��ku (pr�v� proto, aby bylo mo�n� data spolehliv� deserializovat). Sta�� si zkusit
p�elo�it tento p��klad:
http://pastebin.com/CSAnVs8E
Ten vyprodukuje n�co takov�ho:
http://pastebin.com/vhxEw6uq

Osobn� Wireshark pou��v�m jen v�jime�n�. Zvykl jsem si pou��vat mnohem snadn�j�� aplikaci (pro Win):
http://www.nirsoft.net/utils/smsniff.html

Na z�v�r bych m�l jednu radu: anotac� by m�lo b�t mo�n� Restlet donutit, aby pou��val JSON/XML pro
komunikaci (nutno pak p�idat n�jak� bal��ky). P�ev�d�n� do JSONu i z n�j u jednoduch�ch struktur
funguje v�born� (osobn� ov��eno). Vyhneme se tak probl�m�m se serializac� a deserializac� objekt�,
nav�c na�e aplikace m�e n�sledn� poslou�it jako slu�ba n�komu jin�mu (pakli�e to nechceme, sta��
jednodu�e zabezpe�it autentizac�).


Hezk� v�kend p�eje

Honza P��ek


P.S. Pro p. �ediv�ho: Filip je tu pokud v�m taky a p�vodn� dotaz se t�kal probl�mu s rozjet�
aplikace, kter� mohou potkat ka�d�ho. Tazatel se tak prost� zeptal, ostatn� jak jste vyz�val na
hodin�ch...


Libor Bukata

unread,
Nov 13, 2011, 6:14:11 AM11/13/11
to ctu...@googlegroups.com
Zdravím,

2011/11/12 Jan Pěček <pece...@fel.cvut.cz>:
> Zdravím,
>

> On 12.11.2011 21:19, Libor Bukata wrote:

>> kód jsem poslal (viz. HP a předchozí příspěvek), a nikdo mi neporadil,
>> kde je chyba. Když jsem napsal řešení, tak pak je každý chytrý...
>

> no flame pls. Snažil jsem se ve svém předchozím postu (ne dnešním) poradit co nejvíce, jak jsem uměl
> (včetně času, který jsem tomu mohl věnovat). Netřeba si myslet, že po bitvě je každý generálem. Na
> kód jsem se také díval ale žádné fatální chyby jsem nenašel.

samozřejmě nemám zájem o žádný flame. Jenom se mi nelíbilo, že jste mi
napsal, že marním čas, a že zde bych to měl vyřešeno za zlomek času,
kdybych to sem poslal.
Což jsem i udělal (již ve čtvrtek), a jak bylo vidět, záludné chyby se
hledají velmi špatně. Samozřejmě děkuji za Vaší pomoc.

> Nelze čekat, že někdo řekne, že na řádku 250 v souboru XY je chyba. Snažil jsem se nastínit možné
> příčiny problému (včetně uvedené anotace, což mohlo směřovat k odhalení skutečné chyby).

Anotace byla jedna z prvních věcí, co jsem zkusil zakomentovat.

> Jinak myslím, že odhalení problému určitě pomůže nejednomu vývojáři, při hledání možných chyb.
> Doufám, že všichni teď Restlet nezahodí a nebudou se snažit konfigurovat Spring..


>
>> A Wiresharkem jsem neměl moc šancí vyčíst, kde je chyba, bylo by

>> dobré, aby jste mi to předvedl, nevšiml jsem si, kde se tam posílá
>> název balíčku.
>
> Vychází to z podstaty serializace, kdy se přenáší kompletní jméno objektu, které obsahuje samozřejmě
> i název balíčku (právě proto, aby bylo možné data spolehlivě deserializovat). Stačí si zkusit
> přeložit tento příklad:
> http://pastebin.com/CSAnVs8E
> Ten vyprodukuje něco takového:
> http://pastebin.com/vhxEw6uq
>
> Osobně Wireshark používám jen výjimečně. Zvykl jsem si používat mnohem snadnější aplikaci (pro Win):
> http://www.nirsoft.net/utils/smsniff.html

Wireshark je mocný, přitom malinko složitý program. Název balíčku jsem
mezi přenášenými daty skutečně našel.


Přeji hezký den.

Libor B.

Reply all
Reply to author
Forward
0 new messages