El día de hoy, Edgar (no el que se cae, sino otro) me reportó que en el JDeveloper desde donde estaba intentando hacer un deploy hacia el Oracle Application Server de pruebas (OAS 10gR2) estaba recibiendo errores como los siguientes:
#### DCM command did not complete
successfully (-1) #### HTTP return code was -1 Exit
status of DCM servlet client: -1
Elapsed time for deployment: 41 seconds ####
Deployment incomplete. #### 6/10/2006 11:44:02 AM
y en los logs marca:
MOD_OC4J_0015: recv() returns 0. There has no message
available to be received and oc4j has gracefully
(orderly) closed the connection.
MOD_OC4J_0054: Failed to call network
routine to receive an ajp13 message from oc4j.
MOD_OC4J_0033: Failed to receive an
ajp13 message from oc4j.
MOD_OC4J_0078: Network connection errors
happened to host: prod05ws.itesm.mx and port: 12502
while receiving the first response from oc4j. This
request is recoverable.
Pues resulta que el servidor donde se aloja el susodicho OAS sufrió un ataque de pánico el día de ayer y se reinició (el sistema operativo indicaba "panic"), por lo que supuse que algo quedó inconsistente al cerrarse abruptamente la aplicación. Entonces recordé que ayer yo había tenido problemas con otro OAS de laboratorio y había encontrado un comando "resyncInstance", por lo que se me ocurrió que éste podía ayudar. Antes de correr dicho comando, verificamos algunos logs (Oc4jDcmServlet.log), encontrando algunos errores como:
The configuration files for this Oracle Application Server instance are
inconsistent with the configuration stored in the repository. In order to
protect the repository, no further configuration or deployment operations are
allowed until the problem with the configuration on the filesystem is resol
ved. This condition arises when a prior operation was unsuccessful.
igualmente, checamos el estatus de la instancia con otro comando:
[PATH-TO-ORACLE-HOME]/dcm/bin/dcmctl getState
y encontramos lo siguiente:
Current State for Instance:infra.prod05ws.itesm.mx
Component Type Up Status
In Sync Status
======================================================
1 HTTP_Server HTTP_Server Up True
2 OC4J_SECURITY OC4J Up True
3 home OC4J Down True(Disabled)
4 oca OC4J Up True
Entonces procedimos a correr el comando que mencioné anteriormente,
[PATH-TO-ORACLE-HOME]/dcm/bin/dcmctl resyncInstance -force
Después de eso hubo que reiniciar desde la consola (EM), todo lo que marcaba como estatus "down", como los contenedores (OC4J).
Y voilà! Al intentar de nuevo hacer un deploy, ya funcionó bien. Sin embargo, notamos otro problema, y es que se borraron unas clases que estaban puestas bajo el directorio del OC4J_SECURITY y se eliminaron unas modificaciones hechas al web.xml del mismo contenedor. Supuse entonces que, como dichas clases y modificaciones se hicieron directamente en el file system, en lugar de hacerlo a través de un "deploy" desde la consola o desde el JDeveloper, pues los cambios no estaban registrados en el repositorio, y el resyncInstance obviamente los eliminó. Tengo que verificar esto, y lo haré el lunes, junto con Edgar (que a veces también se cae), nomás pa'estar seguros. Así que, amiguitos y amiguitas, aquí tenemos una muestra del por qué no hay que modificar los archivos a patín, o directamente, sino que hay que hacerlo a través de las herramientas que Oracle proporcione, aunque a veces este procedimiento sea más tardado y/o tedioso :S Dicen que no hay lonche gratis!
Por cierto, en el servidor de OAS de laboratorio también corrí el "resyncInstance" y al parecer sí le ayudó, pero sigo teniendo algunos problemas con él. Me había estado marcando errores extraños y no me dejaba modificar los archivos httpd.conf e incluidos (a través de la consola, por supuesto), desaparecía los nombres de los DADs, etc. Ahora se perdieron los cambios que había hecho en httpd.conf y me desapareció un archivo que inclui (dat.conf), así que estoy dudando lo que realmente hace el "resyncInstance"... el lunes nos daremos cuenta. :)