2012-01-24 13 views
5

Tengo un GWT que necesita acceder a algunos recursos estáticos. No quiero colocar estos recursos en el directorio real/src/main/webapp (nota: usando Maven y el diseño correspondiente) porque no son parte de la aplicación, sino parte de los datos.Agregar recursos externos al servidor GWT dev mode (Jetty)

Mi problema no es cómo dar a la aplicación acceso a estos recursos en el momento del despliegue; eso debería ser fácil de hacer a través de la configuración de Tomcat. Más bien, el problema es cómo dar a mi aplicación acceso a algunos datos de prueba durante el desarrollo. Tengo algunos archivos estáticos de prueba en un directorio fuera de mi árbol de aplicaciones GWT, y me gustaría configurar el servidor Jetty del modo de desarrollo de GWT para acceder a esos recursos. Es decir, quiero poder decir mvn gwt: ejecutar (o ejecutar o depurar la aplicación en modo dev desde Eclipse) y hacer que el servidor sirva esos recursos estáticos.

Conozco (y uso) la opción dev mode -noserver. Sin embargo, dado que estoy modificando mucho el código del lado del servidor, junto con el código del cliente, no es práctico volver a desplegar el servidor cada vez que cambia el código del servidor.

Hasta ahora lo que he estado intentando es crear un archivo jetty-web.xml en mi directorio WEB-INF, y agregar un nuevo contexto para que el servidor sirva mis recursos. Aquí están mis intentos fallidos embarcadero-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> 

Si pongo que, en el embarcadero-web.xml, entonces cuando comienzo a modo de dev, Espolón sirve a mis recursos externos, pero no sirve a mi GWT aplicación

Por otro lado, si hago esto ...

<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> 

... embarcadero sirve ni estática ni mis cosas mi aplicación GWT.

¿Alguna sugerencia? ¿Qué estoy haciendo mal?

(Nota: el modo de desarrollador GWT utiliza la versión 6 [o 6.something] del embarcadero, y lo configura mediante programación, por lo que yo puedo ver, no hay otros archivos de configuración Jetty se leen.)

¡Muchas gracias!

+1

FWIW, cuando tengo que personalizar el servidor, no me molesto con la instancia de embarcadero de modo alojado, sino que configuro un servidor diferente y uso -noserver para evitar que el embarcadero se inicie. –

+0

Correcto, a veces uso esa opción. Pero eso significa empaquetar e implementar .war en el otro servidor cada vez que cambia el código del servidor, ¿no? ¿Y luego configurar la depuración en el otro servidor también? Quiero decir, me puedo imaginar que es posible y que hay formas de automatizarlo, pero no parece ser la opción más directa. – Andrew

+0

Mi enfoque general allí (los comentarios ya que en realidad no soluciona el problema) es ejecutar el otro servidor fuera de mi ide. Usando 'mvn war: explosioned' copia todos los bits importantes en el directorio correcto, a la vez que me deja depurar de la forma habitual. La principal diferencia es que existen dos sesiones de depuración y dos botones para hacer clic para iniciar cosas en lugar de una, aunque necesito reiniciar el modo dev de gwt más que el servidor. –

Respuesta

0

El enfoque que me gusta usar es escribir un Servlet simple que pueda transmitir cualquier archivo, similar a: http://www.exampledepot.com/egs/javax.servlet/GetImage.html, y asignarlo en mi web.xml a ciertos patrones de URL.

Luego puedo configurar fácilmente el directorio base para los archivos estáticos a través de uno de mis archivos de configuración. También puedo hacer cosas arbitrarias como mezclar varios directorios u obtener el contenido del archivo desde una base de datos, ...

Prefiero este enfoque, ya que funciona con todos los contenedores de servlets en cualquier entorno.

-1

Mi único trabajo:

<?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. se pone debajo de WEB-INF
  2. Descargar [jetty-naming-6.1.12.jar][1] y [jetty-plus-6.1.12.jar][2] y ponerlos bajo `WEB-INF \ lib'

Eclipse Reiniciar y correr de nuevo debería hacer el truco.

+0

¡Muchas gracias! Voy a probar esto (y con suerte, marcar la respuesta como correcta) pronto! – Andrew

+1

-1 Ese xml no muestra cómo agregar una carpeta externa como base de recursos para archivos estáticos, solo un origen de datos. – n3k0

Cuestiones relacionadas