martedì, febbraio 20, 2007

Mobi ready score

.mobi e' un dominio pensato per siti realizzati per cellulari e palmari... in mancanza, durante lo sviluppo, di una serie di device per il test del sito su cui si lavora, esiste uno strumento web adatto allo scopo, in grado inoltre di validare il sito e suggerire le correzioni del caso (spesso relative a difetti non riscontrabili con la sola navigazione sul semplice device mobile):

http://mr.dev.mobi

Java Reverse Proxy

Ho trovato, e sto utilizzando con grande soddisfazione all'interno di un web container, un reverse proxy open source scritto in java:

http://j2ep.sourceforge.net

jEasy Extensible Proxy (j2ep) dipende da alcune librerie opensource:

commons-beanutils
commons-codec
commons-digester
commons-httpclient
commons-logging

Nel mio progetto mi e' stato utile per proxare delle richieste HTTP le cui response venivano chesciate dalla Cache Servlet Filter di OpenSymphonyCache.

Configurare j2p e' davvero semplice...

Come prima cosa e' necessario scrivere un file di configurazione xml con l'elenco degli host che andranno proxati, ed il path (dal context, escluso, in poi) che fa scattare la chiamata HTTP proxata; questo file lo chiameremo data.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<server className="net.sf.j2ep.servers.BaseServer" domainName="osnews.com">
<rule className="net.sf.j2ep.rules.DirectoryRule" directory="/feed" />
</server>
</config>

In questo caso l'host da proxare e' osnews.com, l'url che si desidera proxare e' http://osnews.com/files/recent.xml, e la chiamata al reverse proxy sara' questa:
http://myhost/mywebapp/feed/files/recent.xml.

Il reverse proxy viene configurato con una Servlet Filter nel web.xml (specificando il path del file di configurazione e l'url-pattern sul quale il filter deve scattare) in questo modo:

<filter>
<filter-name>ProxyFilter</filter-name>
<filter-class>net.sf.j2ep.ProxyFilter</filter-class>
<init-param>
<param-name>dataUrl</param-name>
<param-value>/WEB-INF/cfg/data.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ProxyFilter</filter-name>
<url-pattern>/feed/*</url-pattern>
</filter-mapping>

Resin e Jdk Logging

Resin permette di configurare l'output ottenuto dalle api java.util.logging.* nel file di configurazione resin-web.xml:

<resin:set var="logpath" value="~/logs/" />
<resin:set var="logfile" value="${logpath}${app.name}.log" />
<resin:set var="tmstamp" value="[%Y/%m/%d %H:%M:%S.%s]" />

<log name="${app.name}" level="info" path="${logfile}" timestamp="${tmstamp}" size="100mb" format=" ${fmt.sprintf('%-7s %-35s %s',log.level,log.loggerName,log.message)}">
<logger name="net.sf.j2ep" level="fine" />
<logger name="com.opensymphony.oscache" level="info" />
</log>

IE ed il content type application/xhtml+xml

Microsoft Internet Exploder, anche nella nuova e fiammante versione 7, non e' ancora in grado di gestire il content type application/xhtml+xml.
Nella realizzazione di un sito web per il mobile (.mobi) fruibile anche da web con un normale browser, mi sono scontrato con questo problema.
Una semplice soluzione e' stata configurare il web server Apache affinche' servisse, nel caso in cui il client non fosse stato in grado di gestire il suddetto content type, delle pagine con estensione .html, automaticamente servite da Apache con contet type text/html:

RewriteEngine on
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml
RewriteRule (.*)\.xhtml$ $1\.html [L]