jueves, 28 de julio de 2016

WebLogic 11g Workaround - The BPEL process deployment session is already active.


Cuando trabajamos con WebLogic 10.3.X es buena practica tener un dominio ya preparado , comprimido, para pasarlo de desarrollador a desarrollador. Y cada tanto esta clase de practicas suele presentar detalles a la hora de levantar dicho dominio, como problemas de sincronización, Data Sources con referencias incompletas, entre otras.

Un Error que se presentó hace poco a la hora de deployar un .JAR en la consola service bus, fue un tanto desconcertante ya que indicaba que una sesión de BPEL se encontraba activa.


Por más que se intentó bajar el dominio completo y volverlo a levantar, seguía impidiendo que uno deployara un .JAR en la consola service bus. Arrojando el siguiente detalle:

com.bea.bpel.deployment.SessionAlreadyActiveException: The BPEL process deployment session is already active.
     at com.bea.bpel.services.ProcessDeployerImpl$Lock.checkFree(ProcessDeployerImpl.java:297)
     at com.bea.bpel.services.ProcessDeployerImpl.startSession(ProcessDeployerImpl.java:78)
     at com.bea.alsb.flow.deployment.DeploymentListener.endChangeNotification(DeploymentListener.java:205)
     at com.bea.wli.config.impl.ResourceListenerNotifier.sendChangeNotificationsInContext(ResourceListenerNotifier.java:423)
     at com.bea.wli.config.impl.ResourceListenerNotifier.sendChangeNotifications(ResourceListenerNotifier.java:338)
     at com.bea.wli.config.impl.ResourceListenerNotifier.sendChangeNotifications(ResourceListenerNotifier.java:321)
     at com.bea.wli.config.impl.ResourceListenerNotifier.beforePrepare(ResourceListenerNotifier.java:99)
     at com.bea.wli.config.transaction.TransactionListenerWrapper.beforePrepare(TransactionListenerWrapper.java:64)
     at com.bea.wli.config.transaction.TransactionManager.notifyBeforePrepare(TransactionManager.java:1094)
     at com.bea.wli.config.transaction.TransactionManager._prepareForCommit(TransactionManager.java:654)
     at com.bea.wli.config.transaction.TransactionManager.prepareForCommit(TransactionManager.java:611)
     at com.bea.wli.config.deployment.server.ServerDeploymentReceiver._prepare(ServerDeploymentReceiver.java:417)
     at com.bea.wli.config.deployment.server.ServerDeploymentReceiver.access$700(ServerDeploymentReceiver.java:70)
     at com.bea.wli.config.deployment.server.ServerDeploymentReceiver$1.run(ServerDeploymentReceiver.java:246)
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
     at com.bea.wli.config.deployment.server.ServerDeploymentReceiver.prepare(ServerDeploymentReceiver.java:254)
     at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:171)
     at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:13)
     at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:47)
     at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
     at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Algo que llamo la atención fue la parte del Stack Trace donde dice: 
com.bea.bpel.deployment.SessionAlreadyActiveException: The BPEL process deployment session is already active.


Solución

Es muy común que un dominio se componga tanto de un Servidor Admin como de Servidores Administrados (managed servers, o mas bien "manejados"). El problema radica en la sincronización de estos manejados con el Servidor Admin:


Por ende, lo que se puede aplicar es llevar una correcta sincronización de los manejados con el Servidor Admin. Para ello seguimos estos pasos:

1) - Una vez se nos presente el problema (esto es, tanto el Servidor Admin como los manejados levantados en estado RUNNING), hay que bajar todos los manejados del ambiente y dejar solo el Servidor Admin levantado. Esto se hace desde la consola de WebLogic (https://localhost:port/console).

2) - Entrar a la consola service bus (https://localhost:port/sbconsole) y borrar todos los recursos que se encuentren deployados en el ambiente. Esto requiere activar una sesión, borrar todos los proyectos y recursos que se encuentren en el dominio, y confirmar los cambios de la sesión con el botón enviar (Submit).

3) - Si la sesión ha podido activarse luego de bajar los manejados y de borrar los recursos, quiere decir que tuvimos éxito. Ahora solo resta volver a subir los manejados y dejar que sincronicen con el Servidor Admin.

Tal vez la solución es un poco burda pero es altamente efectiva. Cualquier otro detalle que surja y que escape de la solución planteada puede tratarse en este tema y debatirlo.

No hay comentarios:

Publicar un comentario