ejemplo - ¿Dónde debería una aplicación web Java almacenar sus datos?
java web netbeans (5)
Creo que depende de qué tipo de datos está tratando. La mayoría de las veces, los datos entran en la base de datos simplemente porque es rápido y fácil de realizar un CRUD. Si desea almacenar la configuración de usuario localizada y no le importa lo portátil que sea, quizás pueda guardarla en user.home , lo hice para uno de mis proyectos y eso funciona bien. Dicho todo esto, realmente no creo que haya ninguna mejor práctica en esto y la base de datos parece ser la opción más obvia porque puede hacer muchas tareas diferentes en su contra, y la mayoría de ellas es gratis, para empezar. :)
Mi aplicación web Java ( myapp.war
) se implementa colocándola en el directorio de aplicaciones web en Tomcat en Ubuntu 10.04.
Esta aplicación necesita guardar algunos datos en archivos. Pero el usuario, que ejecuta Tomcat ( tomcat6
), no tiene acceso de escritura al directorio de inicio /usr/share/tomcat6/
y no tiene acceso de escritura a la direcotry de trabajo actual /var/lib/tomcat6/
, ya que ambos pertenecen a la root
.
Entonces, ¿dónde debería una aplicación web almacenar sus datos? Espero que no sea el archivo extraído en el directorio de aplicaciones web. Este podría ser eliminado muy fácilmente por accidente. Y Tomcat se puede configurar, no para extraer archivos .war. Entonces no habría direcotry extraído.
¿Quizás /var/lib/tomcat6/
debería pertenecer al usuario tomcat6
y esto es un error en Ubuntu?
Encontré la solución en Launchpad. /var/lib/tomcat6/webapps/
se puede escribir. Esto significa, que los siguientes trabajos:
File myFile = new File("webapps/myfile.txt");
No he visto ninguna guía específica sobre dónde debería almacenar ese tipo de datos localmente, probablemente porque normalmente almacenaría ese tipo de datos en una base de datos.
Cuando necesito almacenar datos rápidos y sucios de esa manera, los almaceno en un sistema de archivos específicamente para esos datos, para aislarlos de otras áreas donde podrían quedar atrapados en otra actividad. No he tenido ningún problema con el enfoque hasta ahora. Además, si es importante, asegúrate de guardarlo en algún lugar donde lo estés respaldando :)
Respondiendo a su propia pregunta, Witek declaró que /var/lib/tomcat6/webapps/ is writable
, al menos en su instalación de su versión de Ubuntu. En mi sistema RHEL 5.2 /var/lib/tomcat<X>
ni siquiera existe, por lo que no hay un subdirectorio webapps con capacidad de escritura o no, lo que lleva a mi respuesta.
P: ¿Dónde debería una aplicación web Java almacenar sus datos?
R: Donde sea que lo hayas configurado para almacenar sus datos.
Haga que la ubicación sea configurable, en web.xml como <context-param>
o en un archivo myApplication.properties.
- Puedo ponerlo donde quiera en mi caja, los administradores del sistema pueden ponerlo donde quieran en el sistema de producción.
- Puedes cambiar de opinión después.
- No necesitas enlaces simbólicos (que mágicamente han desaparecido en mí antes, rompiendo el sistema).
- Puede tener varios conjuntos de datos de prueba y simplemente apuntar la configuración a la que desee.
- Puedes ponerlo donde quiera que haya espacio en el disco.
- Vas a cambiar de opinión después.
Si los archivos no necesitan permanecer más tiempo que el ciclo de vida del contexto del servlet, el contenedor del servlet proporciona un directorio temporal privado para cada contexto del servlet, especificado por el atributo javax.servlet.context.tempdir
.
Ver Especificación de Servlet 2.3 , Capítulo 3 Contexto de Servlet
3.7.1 Directorios de trabajo temporales
Se requiere la conveniencia de un directorio de almacenamiento temporal para cada contexto de servlet. Los contenedores de servlets deben proporcionar un directorio temporal privado por contexto de servlet y ponerlo a disposición a través del atributo javax.servlet.context.tempdircontext. El objeto asociado con el atributo debe ser de tipo java.io.File