Pregunta

De acuerdo con la Documentación de reproducción, es posible empacar una aplicación de reproducción en un archivo de guerra e implementarla en WebSphere, pero tengo problemas.

Estoy usando el play war comando con el --zip opción, que funciona correctamente. El archivo de guerra resultante tiene el diseño correcto (Web-INF en el nivel superior, con mis frascos movidos a Web-INF/lib).

Después de implementar el archivo de guerra en mi servidor WebSphere, cambio la orden de carga de clase de la aplicación a la última vez para los padres para que use la versión de Play de cualquier LIBS que confiera. Y luego intento cargar una página, cualquier página, de mi aplicación, y recibir un error.

He intentado implementar aplicaciones de demostración y una nueva aplicación vacía de la misma manera, pero de nuevo, solo obtengo una página vacía que dice Not found Get /. Lo único en el registro es WARN ~ 404 -> GET / (GET /).

Lo probé con Play 1.2.3 y 1.2.4, WebSphere 7.0.0.0 y 7.0.0.19. También he intentado alternar las diferentes opciones de implementación en WebSphere, aunque las opciones predeterminadas parecen funcionar.

¿Alguien ha recibido una aplicación de juego para trabajar en WebSphere? ¿Si es así, cómo?

¿Fue útil?

Solución

Finalmente lo tengo funcionando. Documentaré mis pasos en caso de que alguien más se encuentre con problemas similares implementando una aplicación de reproducción en WebSphere en el futuro.

1 - El primer problema fue el 404. WebSphere no pasa solicitudes de root (/) a la aplicación para manejar (¿WTF?), Por lo que la solución es definir una ruta similar en su archivo de rutas:

GET    /*    Application.index

en lugar de (o encima de)

GET    /    Application.index

2 - El siguiente problema fueron los errores relacionados con los métodos de persistencia (JPA) que no existen. Play usa JPA 2.0, mientras que WebSphere 7 usa su propia versión personalizada de OpenJPA 1.0. Puedes instalar Un paquete de características para JPA 2 y OSGI (No necesita la parte OSGI, por lo que se puede ignorar). Tenga en cuenta que el paquete de funciones requiere que tenga WebSphere 7.0.0.9 o más tarde instalado. Eso significa que coinciden los paquetes de fijación tanto para el servidor de aplicaciones como para el JDK agrupado. IE Fix Pack 21 (el último en el momento o la escritura) para el servidor y el JDK debe instalarse primero antes de instalar el paquete de funciones JPA. Al final de la instalación del paquete de funciones, le preguntará si desea ejecutar la herramienta de perfil. Decir que sí. Esta herramienta le permitirá "aumentar" su perfil (el nodo del servidor va a instalar su guerra). ¡Aumenta!

3 - Cree un archivo de guerra que funcione en WebSphere:

play war <appFolder> -o <outputFolder> --zip --%prod

Esto creará una carpeta llamada <outputFolder> (una guerra explotada) y un archivo .war llamado <outputFolder>.War, con la identificación de la aplicación establecida en Prod. La guerra explotada se puede eliminar.

Ejecutar este comando en Linux sigue colocando mi carpeta Web-INF dentro de una carpeta sin nombre (por lo tanto, hacia abajo un nivel desde el nivel raíz del archivo de guerra). En otras palabras, en lugar de/web-inf/, está creando una estructura como // web-inf/. De todos modos, lo estoy arreglando manualmente por ahora, volviéndolo correctamente. ¿Alguien sabe cómo evitar este problema?

4 - Instale el archivo de guerra en WebSphere con todas las configuraciones predeterminadas en la consola de administración ... o ajíjalos si sabe lo que está haciendo.

5 - No estoy completamente seguro de si este paso es necesario (no cambia nada para mi aplicación en particular), pero todos los consejos que he leído en línea sobre cómo hacer que las aplicaciones se ejecuten en WebSphere diga para hacer esto. Meh, no puede doler. Haga clic en su aplicación instalada. Haga clic en el enlace "Carga de clase y actualización de detección". Luego seleccione la opción "Clases cargadas con el cargador de clase local primero (el último último)". Está bien. Ahorrar.

6 - Abra una página del navegador a su dirección (localhost: 9080 si se ejecuta WebSphere localmente) y prueba. ¡En este punto debería funcionar! Ojalá. Buena suerte.

Otros consejos

Un problema común con la implementación de contenedores de servlet es que a menos que esté implementando su aplicación como el archivo de guerra raíz, entonces a menudo se encuentra con problemas. ¿Está seguro de que su archivo de guerra se ha implementado para que la ruta a la aplicación esté disponible como /.

Este hilo es un problema común encontrado

¿Cómo usar "War.Context" en el archivo de configuración de Play Framework?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top