2012-01-24 19 views
5

Ho un GWT che deve accedere ad alcune risorse statiche. Non voglio mettere queste risorse nella directory/src/main/webapp attuale (nota: usando Maven e il layout corrispondente) perché non fanno parte dell'app, ma parte dei dati.Aggiunta di risorse esterne al server modalità GWT (Jetty)

Il mio problema non è come fornire all'applicazione l'accesso a queste risorse al momento dell'implementazione; che dovrebbe essere facile da fare tramite la configurazione di Tomcat. Piuttosto, il problema è come consentire alla mia app di accedere ad alcuni dati di test durante lo sviluppo. Ho alcuni file statici di test in una directory al di fuori del mio albero app GWT e vorrei configurare il server Jetty in modalità sviluppo di GWT per accedere a tali risorse. Cioè, voglio essere in grado di dire mvn gwt: eseguire (o eseguire o eseguire il debug dell'applicazione in modalità dev da Eclipse) e fare in modo che il server serva quelle risorse statiche.

Conosco (e uso) la modalità dev opzione -noserver. Tuttavia, poiché sto modificando molto il codice lato server, insieme al codice client, non è pratico ridistribuire il server ogni volta che il codice del server cambia.

Finora ciò che ho cercato è creare un file jetty-web.xml nella mia directory WEB-INF e aggiungere un nuovo contesto in modo che il server possa servire le mie risorse. Qui sono i miei tentativi falliti molo-web.xml:

<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler"> 
    <Set name="contextPath">/static_resources</Set> 
    <Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set> 
    <Set name="handler"> 
    <New class="org.mortbay.jetty.handler.ResourceHandler"> 
     <Set name="cacheControl">max-age=3600,public</Set> 
    </New> 
    </Set> 
</Configure> 

Se ho messo in banchina-web.xml, poi quando comincio modalità dev, Gettata fa servire i miei risorse esterne, ma non serve il mio GWT app.

D'altra parte, se faccio questo ...

<Configure id="parentHandler" class="org.mortbay.jetty.handler.ContextHandler"> 
    <New id="newHandler" class="org.mortbay.jetty.handler.ContextHandler" > 
     <Set name="contextPath">/static_resources</Set> 
     <Set name="resourceBase">/real/filesystem/path/to/static/resources/</Set> 
     <Set name="handler"> 
      <New class="org.mortbay.jetty.handler.ResourceHandler"> 
       <Set name="cacheControl">max-age=3600,public</Set> 
      </New> 
     </Set> 
    </New> 
    <Get id="server" name="server"> 
     <Call name="setHandler"> 
      <Arg><Ref id="newHandler" /></Arg> 
     </Call> 
    </Get> 
    <Ref id="newHandler"> 
     <Set name="server"><Ref id="server" /></Set> 
    </Ref> 
</Configure> 

... Jetty serve né la mia roba statica né il mio GWT app.

Qualche suggerimento? Che cosa sto facendo di sbagliato?

(Nota: la modalità dev GWT utilizza la versione 6 [o 6.something] di Jetty, e imposta l'alto livello di codice, in modo per quanto posso vedere, nessun altro file di configurazione Jetty vengono letti.)

Grazie molto!

+1

FWIW, quando ho bisogno di personalizzare il server, non mi preoccupo dell'istanza di jetty in modalità host, ma di configurare un server diverso e usare -noserver per impedire l'avvio del jetty. –

+0

A destra, a volte uso questa opzione. Ma questo significa confezionare e distribuire il file .war nell'altro server ogni volta che il codice del server cambia, no? E poi impostando il debug anche sull'altro server? Voglio dire, posso immaginare che sia possibile e che ci siano modi per automatizzarlo, ma non sembra l'opzione più diretta. – Andrew

+0

Il mio approccio generale (i commenti non risolvono il problema) è di far uscire l'altro server dal mio ide. L'uso di 'mvn war: exploded' copia tutti i bit importanti nella dir giusta, mentre mi consente comunque di eseguire il debug normalmente. La differenza principale è che ci sono due sessioni di debug in corso e due pulsanti per avviare le cose invece di una, anche se ho bisogno di riavviare la modalità dev di gwt più del server. –

risposta

0

L'approccio che mi piace utilizzare è scrivere un semplice Servlet in grado di eseguire lo streaming di qualsiasi file, simile a: http://www.exampledepot.com/egs/javax.servlet/GetImage.html e mapparlo nel mio web.xml su determinati pattern URL.

Quindi posso facilmente creare la directory di base per i file statici configurabili tramite uno dei miei file di configurazione. Posso anche fare cose arbitrarie come combinare più directory, o ottenere il contenuto del file da un DB, ...

Preferisco questo approccio, perché funziona con tutti i contenitori servlet in qualsiasi ambiente.

-1

mio lavoro uno:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 

<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 
     <New id="sampleDS" class="org.mortbay.jetty.plus.naming.Resource">    
      <Arg>java:jboss/datasources/sampleDS</Arg> 
      <Arg> 
       <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
       <Set name="URL">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</Set>     
       <Set name="User">user</Set> 
       <Set name="Password">pass</Set> 
       </New> 
      </Arg> 
     </New> 
</Configure> 
  1. metterla sotto WEB-INF
  2. Scarica [jetty-naming-6.1.12.jar][1] e [jetty-plus-6.1.12.jar][2] e metterli sotto `WEB-INF \ lib'

riavviare Eclipse ed eseguire di nuovo dovrebbe fare il trucco

+0

Grazie mille! Lo proverò (e spero, segnerà la risposta come corretta) presto! – Andrew

+1

-1 Che xml non mostra come aggiungere una cartella esterna come base di risorse per i file statici, solo un'origine dati. – n3k0

Problemi correlati