Memakai URL openConnection() di Google App Engine Untuk Membaca File di WEB-INF ?

25 views
Skip to first unread message

Newbie

unread,
Jul 14, 2012, 9:08:02 AM7/14/12
to jakar...@googlegroups.com
Hi,

Saat mencoba memakai Apache Tiles 3 di App Engine, saya mendapatkan kesalahan "Unable to find the definition" saat akan menampilkan view saya.  Setelah mengaktifkan logger ke level FINE, saya mendapatkan pesan "File Resource /WEB-INF/tiles.xml at file:/WEB-INF/tiles.xml not found, continue".  Padahal file tersebut sudah ada dan App Engine seharusnya memperbolehkan akses read-only ke file tersebut..  

Saat men-debug dengan source Tiles, saya ketemu baris untuk membaca resources berupa "url.openConnection().getInputStream()"..  Dari yang saya baca, App Engine mengimplementasikan URL Fetch service di package java.net, termasuk java.net.URL.. Sementara biasanya yang dicontohkan untuk membaca file  adalah "servletContext.getResourceAsStream()".. Tapi karena kode ini ada di library, saya tidak bisa mengubah sesuka hati..

Saya mencoba Tiles di server Jetty lokal (App Engine plugin untuk eclipse) tanpa framework lain.  Konfigurasi yang saya pakai di web.xml adalah:

<servlet>
  <servlet-name>Tiles Dispatch Servlet</servlet-name>
  <servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Tiles Dispatch Servlet</servlet-name>
  <url-pattern>*.tiles</url-pattern>
</servlet-mapping>
<listener>
  <listener-class>org.apache.tiles.web.startup.simple.SimpleTilesListener</listener-class>
<listener>

Apakah class URL tidak bisa dipakai untuk membaca file di WEB-INF? Apa App Engine tidak compatible dengan Tiles 3 ?



Newbie

unread,
Jul 14, 2012, 12:29:42 PM7/14/12
to jakar...@googlegroups.com
Setelah membuat TilesListener baru, yang meng-override method protected Map<String, Definition> loadDefinitionFromResource(ApplicationResource resource) di class BaseLocalUrlDefinitionDAO, dimana baris:

stream = resource.getInputStream();

diganti dengan:

ServletContext sc = (ServletContext) applicationContext.getContext();
stream = sc.getResourceAsStream(resource.getPath());

Apache Tiles bisa bekerja di Google App Engine sama seperti di server lainnya..
Reply all
Reply to author
Forward
0 new messages