Přizpůsobení JSTL pro Google App Engine Datastore Vítězslav Novák Katedra Aplikovaná informatika Ekonomická fakulta, VŠB-TU Ostrava 1
Google App Engine Google App Engine je zástupcem distribučního modelu cloud computingu zvaného Platform as a Service - poskytuje kompletní prostředky pro podporu celého životního cyklu tvorby a poskytování webových aplikací. Google App Engine poskytuje mimo jiné tyto funkce: dynamické webové stránky s plnou podporou pro běžné webové technologie napsané v programovacích jazycích Java, Python nebo Go. Datastore - trvalé úložiště dat s dotazy, řazením a transakcemi, automatické škálování a vyvažování zátěže, API pro autentizaci uživatele a posílání e-mailů pomocí Google účtu, vývojové prostředí, které simuluje Google App Engine na vašem počítači. 2
Datastore Datastore je objektová databáze! Google App Engine implementuje následující API pro přístup k databazázi Datastore: nízkoúrovňové Datastore API, Java Data Objects jako dotazovací jazyk využívá JDOQL (Java Data Objects Query Language), SELECT FROM package.word ORDER BY date DESC Java Persistence API jako dotazovací jazyk využívá JPQL (Java Persistence Query Language). SELECT word FROM Word word ORDER BY word.date DESC 3
JSTL JavaServer Pages Standard Tag Library JSTL zapouzdřuje do jednoduchých značek základní funkcionalitu běžnou pro mnoho webových aplikací. JSTL poskytuje podporu pro běžné, strukturované úlohy jako jsou iterace nebo podmínky (Core), značky pro manipulaci s XML dokumenty (XML), internacionalizaci a formátování (Formatting) a značky SQL pro přístup k relačním databázím (SQL). <sql:query datasource="jdbc/mydatasource" var="tabulka"> SELECT word FROM Word ORDER BY date DESC </sql:query> <table> <c:foreach items="${tabulka}" var="radek"> <tr><td>${radek.word}</td></tr> </c:foreach> </table> 4
Problémy při použití JSTL značek typu SQL s databází Datastore JSTL značky typu SQL využívají JDBC, které Google App Engine neimplementuje. Příkazy SELECT jednotlivých dotazovacích jazyků jsou sice podobné, ale přesto se výrazně liší. SQL: SELECT word FROM Word ORDER BY date DESC JDOQL: SELECT FROM package.word ORDER BY date DESC JPQL: SELECT word FROM Word word ORDER BY word.date DESC Rozdíl je také v datovém typu výsledku provedeného dotazu v programovacím jazyce Java: SQL (JDBC) java.sql.resultset, JDOQL, JPQL java.util.list. 5
Návrh řešení problému při použití JSTL značek typu SQL s databází Datastore Naštěstí ostatní značky JSTL (např. typu Core) jsou univerzální a dokážou zpracovat i jiné datové typy než java.sql.resultset, např. java.util.list, který je výsledkem JDOQL nebo JPQL dotazu. Proto by stačilo jen JSTL značky typu SQL nahradit značkami podobnými, ale přizpůsobenými dotazovacím jazykům JDOQL nebo JPQL, např. pro JDOQL: <jdoql:query persistencemanagerfactory="${pmf}" var="seznam"> SELECT FROM package.word ORDER BY date DESC </jdoql:query> <table> <c:foreach items="${seznam}" var="objekt"> <tr><td>${objekt.word}</td></tr> </c:foreach> </table> Nové značky je možné vyvinout pomocí technologie Custom Tags, která je součástí Java Enterprise Edition. 6
Návrh značky <jdoql:query> <jdoql:query persistencemanagerfactory="${pmf}" var="seznam"> SELECT FROM package.word ORDER BY date DESC </jdoql:query> 7
Závěr Google App Engine je zajímavá možnost, jak lze prakticky vyzkoušet vyučované technologie Java Servlets, JSP, JSTL atd. na oboru Aplikovaná informatika na Ekonomické fakultě VŠB-TU Ostrava. Databáze Datastore sice není relační, přesto je možné si přístup k ní na JSP stránkách přizpůsobit pro použití standardních technologií, jako je např. JSTL. Děkuji za pozornost. 8