• Unsupported major.minor version 51.0 en workflow

  • OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
Forum rules: Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
 #16944  by kaumichan
 
Hola, soy nueva en esto de openKM, estoy trabajando en un workflow, al inicializar mi workflow me aparece el sigueinte error : Error de comunicación con el servidor [callbackRunProcessDefinition]

verificando en el log me aparece el siguiente error

Code: Select all
 012-06-20 16:41:30,950 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/OpenKM]] Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void com.openkm.frontend.client.service.OKMWorkflowService.runProcessDefinition(java.lang.String,double,java.util.List) throws com.openkm.frontend.client.OKMException' threw an unexpected exception: java.lang.UnsupportedClassVersionError: com/CaptureUserID/action/CaptureUser : Unsupported major.minor version 51.0
	at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:378)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:581)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.UnsupportedClassVersionError: com/CaptureUserID/action/CaptureUser : Unsupported major.minor version 51.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
	at org.jbpm.instantiation.ProcessClassLoader.findClass(ProcessClassLoader.java:111)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at org.jbpm.instantiation.Delegation.instantiate(Delegation.java:140)
	at org.jbpm.instantiation.Delegation.getInstance(Delegation.java:125)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
	at org.jbpm.instantiation.Delegation_$$_javassist_6.getInstance(Delegation_$$_javassist_6.java)
	at org.jbpm.graph.def.Action.execute(Action.java:121)
	at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:259)
	at org.jbpm.graph.def.GraphElement.executeActions(GraphElement.java:215)
	at org.jbpm.graph.def.GraphElement.fireAndPropagateEvent(GraphElement.java:185)
	at org.jbpm.graph.def.GraphElement.fireEvent(GraphElement.java:169)
	at sun.reflect.GeneratedMethodAccessor385.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:173)
	at org.jbpm.graph.def.Node_$$_javassist_100.fireEvent(Node_$$_javassist_100.java)
	at org.jbpm.graph.exe.Token.signal(Token.java:189)
	at org.jbpm.graph.exe.Token.signal(Token.java:140)
	at com.openkm.module.direct.DirectWorkflowModule.runProcessDefinition(DirectWorkflowModule.java:326)
	at com.openkm.api.OKMWorkflow.runProcessDefinition(OKMWorkflow.java:110)
	at com.openkm.frontend.server.OKMWorkflowServlet.runProcessDefinition(OKMWorkflowServlet.java:100)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
	... 24 more
he verificado la documentación, foros etc y encuentro que es un problema con las versiones del JRE, pero tanto el servidor como mi eclipse tienen la versión 1.6, entonces no se que estoy haciendo mal. les adjunto el codigo de mi workflow

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="SolicitudPermisos">
<start-state name="Inicio">
		<transition to="DecisionJefe" name="trDecisionJefe"></transition>
		<event type="before-signal">
			<action name="Capturar Usuario " class="com.CaptureUserID.action.CaptureUser">
				<userID></userID>
			</action>
		</event>
  </start-state>
  <task-node name="DecisionJefe">
    <task name="TomarDecision">
      <assignment actor-id="adrianap"></assignment>
			<controller></controller>
    </task>
    <transition to="EvaluarSolicitud" name="trEvaluarSolicitud"></transition>
  </task-node>
  <decision name="EvaluarSolicitud" expression="#{(decision=='rechazar') ? 'Rechazado':'Aprobado'}">
    <transition to="DecisionPMO" name="Aprobado"></transition>
    <transition to="Fin Rechazado" name="Rechazado"></transition>
  </decision>

	<task-node name="DecisionPMO">
		<task name="TomarDecisionPMO">
			<assignment actor-id="pmowf"></assignment>
		</task>
		<transition to="EvaluarSolicitudPMO" name="trEvaluarSolicitudPMO"></transition>
	</task-node>

	<decision name="EvaluarSolicitudPMO"  expression="#{(decisionPmo=='rechazar') ?'trPMORechazado':'trPMOAprobado'}">
		<transition to="Fin Rechazado" name="trPMORechazado"></transition>
		<transition to="Fin Aprobado" name="trPMOAprobado"></transition>
	</decision>
  <end-state name="Fin Aprobado"></end-state>

	<end-state name="Fin Rechazado"></end-state>

</process-definition>
y el código de mi handler
Code: Select all
package com.CaptureUserID.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class CaptureUser implements ActionHandler {
private static final long serialVersionUID = 1L;
	
	String userID;
	
	public void execute(ExecutionContext context) throws Exception {
		context.getContextInstance().setVariable("userID", context.getJbpmContext().getActorId());
	}

}

Espero puedan ayudarme. Saludos y gracias
 #16960  by kaumichan
 
Hola, he revisado en distintos foros y no he podido solucionar el error, entonces decidí capturar el usuario inicial utilizando un swinlane, cuando reviso en open km desde el administrador la instancia ejecutada del proceso, en la tarea Enviar solicitud le aparece asociado el id de usuario que inicializo el workflow, pero no he podido hacer que luego le sea asignada una tarea distinta a este usuario. la tarea en concreto es notificación rechazo y estoy asignando el usuario igual que ne la tarea inicial.
Code: Select all
<task-node name="Notificacion Rechazo">
		<task name="AcaptarNotificacionRechazo" swimlane="initiator"></task>
pero cuando verifico la instancia del proceso en esta tarea no hay ningún usuario asignado, espero puedan darme una guía sobre que estoy haciendo mal, adjunto le codigo completo del proceso
Code: Select all
 <?xml version="1.0" encoding="UTF-8"?>
<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="SolicitudPermisos">
  <start-state name="Inicio">
		<transition to="DecisionJefe" name="trDecisionJefe"></transition>
		<task  name="Enviar solicitud " swimlane="initiator" ></task>
  </start-state>
  
  <task-node name="DecisionJefe">
    <task name="TomarDecision">
      <assignment actor-id="adrianap"></assignment>			
    </task>
    <transition to="EvaluarSolicitud" name="trEvaluarSolicitud"></transition>
  </task-node>
  
  <decision name="EvaluarSolicitud" expression="#{(decision=='0') ? 'Rechazado':'Aprobado'}">
    <transition to="DecisionPMO" name="Aprobado"></transition>
    <transition to="Notificacion Rechazo" name="Rechazado"></transition>
  </decision>
  
	<task-node name="DecisionPMO">
		<task name="TomarDecisionPMO">
			<assignment actor-id="pmowf"></assignment>
		</task>
		<transition to="EvaluarSolicitudPMO" name="trEvaluarSolicitudPMO"></transition>
	</task-node>

	<decision name="EvaluarSolicitudPMO"  expression="#{(decisionPmo=='0') ?'trPMORechazado':'trPMOAprobado'}">
		<transition to="Notificacion Rechazo" name="trPMORechazado"></transition>
		<transition to="Notificacion Aprobacion" name="trPMOAprobado"></transition>
	</decision>
  
	<task-node name="Notificacion Rechazo">
		<task name="AcaptarNotificacionRechazo" swimlane="initiator"></task>
		<transition to="Decision Funcionario" name="trDecisionFuncionario"></transition>
		
		 <controller>
            <variable access="read" name="start date"></variable>
            <variable access="read" name="duration"></variable>
            <variable access="read,write" name="info"></variable>
         </controller>
	
	</task-node>

	<task-node name="Notificacion Aprobacion">
		<task name="AceptarNotificacionAprobacion">
			<assignment expression=""></assignment>
		</task>
		<transition to="Fin Aprobado" name="trFinAprobado"></transition>
	</task-node>

	<decision name="Decision Funcionario" expression="#{(decisionfuncionario=='1') ? 'toDecisionJefe':'trFinRechazado'}">
		<transition to="Fin Rechazado" name="trFinRechazado"></transition>
		<transition to="DecisionJefe" name="trDecisionJefe"></transition>
	</decision>
  <end-state name="Fin Aprobado"></end-state>

	<end-state name="Fin Rechazado"></end-state>
	
	<assignment actor-id="initiator"></assignment>


</process-definition>

Saludos y gracias
 #17016  by jllort
 
Tienes que crear un swimlane que se llame initiator ( es especial ) y por defecto al arrancar el workflow aqui se pone el usuario que lo ha arrancado. Lo tienes que poner en el start node y en la tarea que quieres que ejecute el mismo usuario que ha arrancado el workflow
 #17166  by kaumichan
 
Gracias por tu respuesta, de casualidad tienes algún ejemplo de como definir ese swimlan, yo lo estoy definiendo de esta manera
Code: Select all
<start-state name="Inicio">
      <transition to="DecisionJefe" name="trDecisionJefe"></transition>          
      <task  name="Enviar solicitud " swimlane="initiator" ></task>
</start-state>
y estoy llamandolo en la tarea que le corresponde de la misma forma
 #17237  by jllort
 
Esto tiene que ir así:
Code: Select all
<start-state name="start-state1">
	<task swimlane="initiator"></task>
	<transition to="decision1"></transition>
</start-state>

<task-node name="user">
	<task name="user" swimlane="initiator"></task>
	<transition to="reviser" name="review"></transition>
</task-node>

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.