GAE - dostęp do datastore

0

Jak pobierać, przesyłać dane z GAE datastore?

Chcę się łączyć z aplikacji Androida, oraz z aplikacji na komputerze poprzez aplikację Java(nie koniecznie na serwerze).

Jest jakieś połączenie, które można uzyskać itp, aby wykonywać operacje na danych(jakiś ORM(niby można używać JPA, czy Hibernate też))?
A z Androida to wiem, że poprzez HTTP ale co wtedy wszystko w stringach wysyłać, nie można całego obiektu przesłać?

1

Datastore nie udostępnia dostępu na zewnątrz. Hibernate chyba nie obsługuje Datastore. Zamiast JPA czy JDO możesz użyć np twig-persist: http://code.google.com/p/twig-persist/
Żeby mieć dostęp do danych z Datastore z zewnątrz musisz po prostu stworzyć jakąś własną usługę webową do tego. Obiekty w sumie chyba da się normalnie serializować (do Javowego formatu) i przesyłać. Możesz też serializować do Jsona, np używając Jacksona http://jackson.codehaus.org/

0

Czyli jest to słabo przydatne jeśli chodzi o przechowywanie danych, dostęp do nich?

Jak napisać taką usługę, macie możesz jakieś ciekawe blogi, itd?

0

Ale jakich danych? Datastore nie jest relacyjną bazą danych, więc nie obsługuje SQLa (ma własny GQL), a ORMy dla typowych relacyjnych baz danych słabo się sprawdzają. Datastore jest zaprojektowane tak, aby było w miarę łatwe do ogarnięcia, a zarazem mocno skalowalne. Tradycyjne podejście oparte na wszechobecnych JOINach nie skaluje się.

Masz do dyspozycji jeszcze Blobstore oraz Google Cloud Storage, obie funkcjonalności są zintegrowane z Google App Engine.

O jakie dane chodzi i jak chcesz się do nich dobierać? Ew jakie są rozwiązania, które udostępniają wymaganą przez ciebie funkcjonalność?

0

Jakieś zwykłe dane jak na stronie www.
Chyba nie ma znaczenia czy to trzymane w relacyjnej czy nie bazie.

Np. kontakty, jakieś teksty, opisy, ewentualnie zdjęcia/pliki.

A jeśli nie GAE, to jakie serwisy można znaleŹć do tego przeznaczone.
Wymagania odnośnie bazy raczej malutkie, aby darmowa była najlepiej.

1

Dlaczego nie zrobisz tego po ludzku, czyli nie zapiszesz/ odczytasz danych po stronie App Engine? API bazy ciągle się zmienia, jak wbudujesz sterownik w aplikację do Androida to przy aktualizacji wersji bazy ta aplikacja na Androida może przestać działać. Jaki jest problem w zrobieniu serwleta (czy tam jakiegoś Page jeśli korzystasz z frameworka webowego), który przyjmuje zserializowane obiekty i je zapisuje do bazy lub przyjmuje żądania i wysyła zserializowane obiekty?

A darmowe bazy dostępne z zewnątrz to chyba tylko MySQLe hostowane tak, że lepiej nie podchodzić.

0

Ano, dlatego, że nie wiedziałem, że tak lepiej.
Oczywiście dzięki za nakierowanie na dobry kierunek.

Druga kwestia, że nie wiem, jak zrobić tutaj taki servlet zapisujący do datastore.
A co dopiero przesłanie tego z androida, bądź lokalnej aplikacji.

Przydała by się jakaś pomoc, dobry przykład, tutorial.

1

No musisz po kolei przelecieć tutoriale o:

  • tworzeniu serwletów - generalnie serwlet to zwykła Javowa klasa, poza zrobieniem takiej klasy musisz jeszcze wyedytować plik web.xml
  • następnie musisz przejść tutoriale ze dokumentacji Google App Engine,
  • potem przejrzeć dokładnie opis Datastore na tej samej stronie,
  • a następnie przejść np do używania twig-persist, oczywiście czytając wcześniej dokumentację tego frameworka,

Z Google App Engine można łączyć się chyba tylko poprzez HTTP i XMPP. Jeśli chodzi o pobieranie/ wysyłanie stron po HTTP to masz klasę java.net.URL, w której jest metoda openConnection(...), a w klasie URLConnection są np metody getInputStream() czy getOutputStream(). Nie używałem tego dokładnie, więc nie bierz tego za pewnik, ale generalnie cała sprawa powinna być dość prosta, o ile nie skomplikujesz jej sobie SQLami, JPA czy Hibernatami.

Ja teraz w robocie np zaimplementowałem wysyłanie mejli z midletu (J2ME) poprzez otwarcie socketa i napieprzanie protokołem SMTP i danymi zgodnymi z MIME za pomocą OutputStream.write(...) :P Wszystko ręcznie robię i tragedii nie ma. Jakoś mocno skomplikowane to nie jest. W J2SE raczej do tego są gotowe klasy czy biblioteki.

0

Ponoć GAE na Pythonie lepiej śmiga i łatwiej.

Czy możę być server postawiony na Pythonie, a komunikacja normalnie z Javy?

1

Java ma narzut na odpalanie maszyny wirtualnej z aplikacją. Jak już będzie odpalona instancja to odpowiedź jest szybka. Jeśli aplikacja będzie mało popularna, tzn będzie dochodzić do niej mało żądań, to będzie sporo narzutu, bo instancje są zamykane po pewnym okresie bezczynności. Czas odpalania nowej maszyny wirtualnej z aplikacją jest zależny od tego co do tej aplikacji włożysz. Z drugiej strony możesz mieć do 10 aplikacji za darmo i chyba różne aplikacje mogą korzystać z tego samego datastore. A więc jeśli w miarę sprytnie podzielisz aplikację to narzut będzie mały.

Jeśli aplikacja po jednej i drugiej stronie będzie w Javie, to nie będziesz musiał dwa razy robić klas to serializacji obiektów. Jeśli będziesz chciał użyć dwóch różnych języków to będziesz musiał użyć jakiegoś przenośnego formatu do serializacji i w obu językach napisać hierarchię klas, poprzez których instancje będziesz przesyłał dane między aplikacją na App Engine i aplikacją na Androidzie/ desktopie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1