2011-03-01 18 views
7

Después de más de 1.5 años de la programación de Ruby and Rails, finalmente comencé a trabajar en uno de los nuevos proyectos en Scala y Lift. Básicamente, estoy tratando de escribir una API para acceder a la información de una enorme base de datos (millones de filas). Lift debería ayudarme a codificar la interfaz de este proyecto (la parte API). Pero ahora, esto también implica un módulo que leería desde un archivo comprimido ZIP XML para poblar inicialmente la base de datos con filas. Este módulo necesitaría ejecutarse una vez cada 3 meses.¿Cómo organizar el código Scala en el proyecto Lift?

¿Dónde debería colocar este código de módulo? o más bien, ¿cómo debería organizar mi código Lift y Scala? ¿A dónde van los procesos en segundo plano? Cualquier sugerencia al respecto es bienvenida.

+0

"enorme base de datos (millones de filas)"? Veo declaraciones similares de vez en cuando y me gusta señalar pedante, solo para una referencia, que "millones de filas" no es una gran base de datos (a menos que cada fila/objeto sea> GB). Estoy trabajando con bases de datos de BI donde las tablas individuales tienen cientos de millones de filas con conjuntos de datos de trabajo ~ 50 GB. Y esta todavía no es una base de datos "enorme". Los metadatos solo son millones de "filas". – nicerobot

+2

Creo que el OP está usando el "Huge" imperial, mientras que te refieres a la métrica "Huge". –

Respuesta

5

No estoy seguro si esto es lo que está buscando, pero estoy usando SBT (http : //code.google.com/p/simple-build-tool/). Dibuja una estructura de proyecto predeterminada. Debería ver especialmente los subproyectos (http://code.google.com/p/simple-build-tool/wiki/SubProjects).

Para los procesos programados, puede utilizar un actor y ActorPing para reiniciar el proceso en intervalos regulares. Para intervalos tan largos como 3 meses, puede realizar un seguimiento de la última invocación al tocar un archivo y verificar la fecha de reinicio de la aplicación. El ActorPing necesita iniciarse en el inicio de la aplicación; esto se puede hacer en el arranque del elevador. Si necesita modularlo más, podría crear un servlet que inicie ActorPing en el servlet init.

+0

Bueno, yo sabía sobre SBT, pero los subproyectos son algo bueno de mirar. También la explicación sobre proyectos de fondo es realmente útil. Gracias. –

2

Elevación sigue (al menos las versiones que uso) una estructura estándar Maven 2, por lo que no hay nada especial allí. Solo agregue el código en la carpeta src. Los paquetes a crear dependerán de su diseño/preferencias, no podemos ayudarlo con eso :)

+0

Eso definitivamente es útil de nuevo. Entonces, básicamente, no parece haber ninguna forma convencional de hacer las cosas en Lift. No sé si eso es bueno o malo. –

1

El proyecto de elevación "estándar" utilizando SBT como la acumulación general requiere la siguiente estructura del proyecto:

project 
src 
    main 
    scala 
     bootstrap 
     liftweb 
      Boot.scala 
     project-name 
     comet 
     lib 
     model 
     snippet 
     view 
    resources 
    webapp 
     WEB-INF/web.xml 
     index.html 
    test 
    resources 
    scala 
     RunWebApp.scala 

Si está utilizando la elevación Mapper ORM, por lo general, poner sus modelos en el directorio src/main/scala/project-name/model directory. Del mismo modo, cualquiera de tus CometActors debería ir en src/main/scala/project-name/comet. Cualquier fragmento personalizado que escriba debe estar en src/main/scala/nombre-proyecto/fragmento y cualquier componente de vista personalizado en el directorio de vista bajo nombre-proyecto. Todo el código relacionado con el inicio de su aplicación y el establecimiento de conectores de bases de datos, etc., debe ir en src/main/scala/bootstrap/liftweb/Boot.scala. El resto de la estructura cae como lo han dicho las respuestas anteriores, que sigue la estructura general de Maven 2.

Esta es solo la estructura general que proporciona la aplicación Lift por defecto. Lo único que se requiere es el archivo bootstrap.liftweb.Boot.scala, ya que Lift Servlet busca esa clase durante el arranque.

Cuestiones relacionadas