Se requiere homologar WAS 9 como servidor de aplicaciones compatible con Thuban. Es necesario también documentar el proceso de instalación y despliegue de Thuban sobre WAS. Las tareas se realizaran sobre WAS Liberty Profile que es gratuito para desarrollo.
Se dejan links e indicaciones de utilidad para encarar la tarea
Link de utilidad:
https://openliberty.io/start/#runtime_releases {: data-inline-card='' }
https://www.ibm.com/support/pages/16002-websphere-application-server-liberty-16002 {: data-inline-card='' }
https://www.ibm.com/mysupport/s/question/0D50z000062kmxFCAQ/where-can-i-download-websphere-application-server-v9?language=en_US{: data-inline-card='' }
https://www.ibm.com/support/pages/node/6250961#asset/WAS_traditional_for_Developers {: data-inline-card='' }
Se deben ubicar las equivalencias.
Se requiere quitar de admin, clase documentales, campos, la opción de fecha(texto).
Se requiere incorporar a la configuración de condiciones de checklist la posibilidad de contar con la lista de valores predefinidos para los campos configurados para multivaluados. En cualquiera de los casos se debe permitir seleccionar 1 valor del listado como así también poder ingresar uno nuevo.
En las versiones viejas de producto (6.X) el orden por defecto era por INDEX_ITEM_NAME y en las versiones más nuevas (7.X) fue modificado a INDEX_ITEM_ID. Se propone generar configuraciones default y de usuario que permitan seleccionar para la búsqueda cuál es criterio por defecto para el ordenamiento de los resultados. Opciones disponibles: INDEX_ITEM_NAME, INDEX_ITEM_ID
En monitores, se requiere permitir al usuario definir en los tableros, el orden de los monitores
Se requiere la posibilidad de que el usuario decida el orden de los monitores.
Se requiere actualizar la librería de Log4J utilizada por Thuban a las últimas versiones disponibles de la familia 2.X que no se encuentren afectadas por las vulnerabilidades de seguridad detectadas a la finales de 2021.
Se requiere incorporar la posibilidad de configurar listas de sábana blanca y negra para la utilización del segundo factor de autenticación, a modo de poder solicitar el segundo factor sólo cuándo la persona no se encuentra dentro de lista de sábana blanca o bien sí dentro de la lista de sábana negra.
Se requiere que dichas listas permitan configurar no solo ips fijas sino también redes enteras, por ejemplo con notación de subnet: 10.0.0.0/23
En la edición de documentos, el visor html5 tiene opciones que no se ven, por que los colores de las letras son muy similares a los del fondo.
Hay que resaltar el texto o cambiar el color de fondo.
intento logearme varias veces con un usuario incorrecto, y la pantalla solo me dice “usuario o contraseña incorrectos“.
Al usuario le serviría la información “su usuario fue bloqueado“ para no seguir probando.
Se requiere un boton Cerrar para volver a la pantalla de login
Se requiere construir el método o función que nos devuelva al IP del usuario logueado en thuban para las listas sabanas.
Con el browser Firefox trae 127.0.0.1 y con Chrome 0.0.0.0.0.1
Descripción breve:
La configuración en el campo DECIMAL en “Clases documentales”, no es respetada a la hora de cargar un valor.
Si se configura con el “.” Como separador decimal” y la “,” como separador de 1000, esto no tiene efecto a la hora de llevarlo a la práctica.
Pasos a seguir:
1-Ingresamos a Thuban, “Admin” y seleccionamos “Clases documentales”.
2- Elegimos una Clase (ej: “6cero4”) y creamos un campo “Decimal” (ej: “DECIMAL1”)
3-En este, nos posicionamos en la casilla de “Formato” y configuramos para que este sea 10 enteros y 2 decimales, marcamos el check de separador de 1000 y guardamos los cambios.
4- Nos dirigimos a Crear un documento de la clase que fue configurada, le cargamos el dato decimal (ej 1450.50) y pasamos a otro campo para seguir llenando para poder crearla.
Resultado esperado:
El dato decimal queda con el formato que se ingresó 1450.50
Resultado obtenido:
El formato cambia instantáneamente a 145.050,00 (lo que hace que el valor se haya incrementado y no respetando el formato pre-cargado en la configuración de la clase)
Descripción breve:
La carga de una cantidad superior a 10 dígitos en un campo decimal, es aceptada por Thuban a pesar de tener la restricción de máximo 10, no así, nos deja crear dicho documento con este valor.
Pero al estar cargándolo, no nos detiene para evitar el error.
Pasos a seguir:
1-Con una clase documental que cuente con un campo decimal, en este se le configura como longitud máxima 10.
2- Vamos a crear un documento en esta clase, llenaremos los campos necesarios y por ultimo, en el campo decimal empezamos una carga con un valor superior a 10 dígitos.
Resultado esperado:
No nos deja pasar de la carga de 10 dígitos.
Resultado obtenido:
Nos deja cargar mas de 10 y no se nos detiene para evitar el aviso de que no se puede.
Si existe una clase documental que tiene dos campos con los mismos alias, no se puede ejecutar la bandeja de WF.
Por ejemplo, campo:
T_DIR_PISO AS "Piso" ,
T_SERVICIO_DIR_PISO AS "Piso"
Los dos campos tenían label piso, y la query explotaba con:
ORA-00918: column ambiguously ...
Si el alias/label de un campo tiene más de 30 caracteres y la base es Oracle, la query de la bandeja de WF explota con:
ORA-00972: identifier is too long
podemos cambiar la query en
ThubanBPMServiceImpl
retrieveThubanWorkflowTrayDocumentsPagging
para cortarla a 30 caracteres, así:
sqlQuery \+= " , " \+ field.getDbColumn\(\) \+ " AS \\"" \+ StringUtils.left\(field.getPrompt\(\).replaceAll\("
:", ""\).replaceAll\("
?", ""\).replaceAll\("
=", ""\),30\) \+ "\\"";
habría que ver que pasa cuando queremos ordenar por este campo.
Si una serie de documentos fueron creados con multi indexado, y se modifica la imagen asociada al Doc Padre por otra con una extensión distinta; los documentos hijos se rompen.
La descripción del historial esta en español, debería estar en inglés
La carátula se genera en castellano en la versión en inglés.
En chrome en el diálogo de mail, no se puede editar el cuerpo del mail, en firefox esto no ocurre.
En búsqueda el diálogo me deja editar.
Cruce los diálogos, el de edición lo puse en búsqueda y me dejo editar. El de búsqueda que me dejaba editar, en la pantalla de edición no me permite.
En chrome en la pantalla de admin - usuario en un campo se setea el usuario logueado.
documentos>prescan>bandejas
hacer doble click en un documento
pestaña observaciones
esta para completar el campo asunto y descripción se ve que hay otro campo pero esta cortado según la wiki de thuban es el campo historia.
Pantalla notebook resolución 1366\*768
El job DocumentDepurationJob nativo de Thuban, en la versión de desarrollo no funciona, arrojando de forma continua un error de creación del objeto Access.Rights con session scope.
Para reproducir el error se debe configurar un trabajo de dicho Job con una query de documento a eliminar y ejecutarlo.
IMPORTANTE: Ocurre solo cuándo se va a eliminar un documento cuya imagen no se encuentra en el FileSystem. Si el archivo existe no ocurre.
El error que arroja es el siguiente:
14 Mar 2022 18:31:25,468 | \[scheduler\_Worker-1\] INFO | JOB.DocumentDepurationArg\(176\) | - ------------ START ------------
14 Mar 2022 18:31:25,469 | \[scheduler\_Worker-1\] INFO | JOB.DocumentDepurationArg\(179\) | - ------------- ACQUIRING SEMAPHORE s1 -------------
14 Mar 2022 18:31:25,476 | \[scheduler\_Worker-1\] INFO | JOB.DocumentDepurationArg\(183\) | - ------------- ACQUIRED SEMAPHORE s1 -------------
14 Mar 2022 18:31:25,476 | \[scheduler\_Worker-1\] INFO | JOB.DocumentDepurationArg\(51\) | - Document Depuration Job Started.
14 Mar 2022 18:31:25,880 | \[scheduler\_Worker-1\] ERROR | JOB.DocumentDepurationArg\(165\) | - No se pudo eliminar el documento cuyo id es 2020111800038229
com.latintech.doc.core.exception.UnexpectedErrorException: Server's unexpected error. The reason is: org.springframework.beans.factory.BeanCreationException . Message: Error creating bean with name 'scopedTarget.accessRights': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
at com.latintech.thuban.services.ThubanDocumentServiceImpl.deletDocumetExceptPermission\(ThubanDocumentServiceImpl.java:1355\)
at com.latintech.thuban.services.ThubanDocumentServiceImpl.deletDocumetExceptPermission\(ThubanDocumentServiceImpl.java:1315\)
at sun.reflect.NativeMethodAccessorImpl.invoke0\(Native Method\)
at sun.reflect.NativeMethodAccessorImpl.invoke\(NativeMethodAccessorImpl.java:62\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection\(AopUtils.java:319\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint\(ReflectiveMethodInvocation.java:183\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:150\)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed\(MethodInvocationProceedingJoinPoint.java:80\)
at com.vivatia.thuban.profiling.ThubanServiceProfiler.doCalculate\(ThubanServiceProfiler.java:14\)
at sun.reflect.GeneratedMethodAccessor55.invoke\(Unknown Source\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs\(AbstractAspectJAdvice.java:621\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod\(AbstractAspectJAdvice.java:610\)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke\(AspectJAroundAdvice.java:65\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke\(TransactionInterceptor.java:110\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke\(ExposeInvocationInterceptor.java:90\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke\(JdkDynamicAopProxy.java:202\)
at com.sun.proxy.$Proxy22.deletDocumetExceptPermission\(Unknown Source\)
at com.latintech.thuban.scheduler.job.DocumentDepurationJob.doExecute\(DocumentDepurationJob.java:159\)
at com.latintech.thuban.scheduler.job.ThubanJob.execute\(ThubanJob.java:186\)
at org.quartz.core.JobRunShell.run\(JobRunShell.java:202\)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run\(SimpleThreadPool.java:534\)
Caused by:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.accessRights': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean\(AbstractBeanFactory.java:342\)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean\(AbstractBeanFactory.java:193\)
at org.springframework.aop.target.SimpleBeanTargetSource.getTarget\(SimpleBeanTargetSource.java:33\)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget\(Cglib2AopProxy.java:654\)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept\(Cglib2AopProxy.java:605\)
at com.latintech.thuban.entity.ThubanAccessRights$$EnhancerByCGLIB$$8827991e.keySet\(<generated>\)
at com.latintech.thuban.services.ThubanSecurityServiceImpl.getAccessRights\(ThubanSecurityServiceImpl.java:102\)
at com.latintech.thuban.services.ThubanSecurityServiceImpl.hasAccess\(ThubanSecurityServiceImpl.java:31\)
at sun.reflect.NativeMethodAccessorImpl.invoke0\(Native Method\)
at sun.reflect.NativeMethodAccessorImpl.invoke\(NativeMethodAccessorImpl.java:62\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection\(AopUtils.java:319\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint\(ReflectiveMethodInvocation.java:183\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:150\)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed\(MethodInvocationProceedingJoinPoint.java:80\)
at com.vivatia.thuban.profiling.ThubanServiceProfiler.doCalculate\(ThubanServiceProfiler.java:14\)
at sun.reflect.GeneratedMethodAccessor55.invoke\(Unknown Source\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs\(AbstractAspectJAdvice.java:621\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod\(AbstractAspectJAdvice.java:610\)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke\(AspectJAroundAdvice.java:65\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke\(TransactionInterceptor.java:110\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke\(ExposeInvocationInterceptor.java:90\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke\(JdkDynamicAopProxy.java:202\)
at com.sun.proxy.$Proxy13.hasAccess\(Unknown Source\)
at com.latintech.thuban.services.ThubanResourceServiceImpl.deleteResource\(ThubanResourceServiceImpl.java:634\)
at sun.reflect.NativeMethodAccessorImpl.invoke0\(Native Method\)
at sun.reflect.NativeMethodAccessorImpl.invoke\(NativeMethodAccessorImpl.java:62\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection\(AopUtils.java:319\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint\(ReflectiveMethodInvocation.java:183\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:150\)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed\(MethodInvocationProceedingJoinPoint.java:80\)
at com.vivatia.thuban.profiling.ThubanServiceProfiler.doCalculate\(ThubanServiceProfiler.java:14\)
at sun.reflect.GeneratedMethodAccessor55.invoke\(Unknown Source\)
at sun.reflect.DelegatingMethodAccessorImpl.invoke\(DelegatingMethodAccessorImpl.java:43\)
at java.lang.reflect.Method.invoke\(Method.java:498\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs\(AbstractAspectJAdvice.java:621\)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod\(AbstractAspectJAdvice.java:610\)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke\(AspectJAroundAdvice.java:65\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke\(TransactionInterceptor.java:110\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke\(ExposeInvocationInterceptor.java:90\)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed\(ReflectiveMethodInvocation.java:172\)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke\(JdkDynamicAopProxy.java:202\)
at com.sun.proxy.$Proxy14.deleteResource\(Unknown Source\)
at com.latintech.thuban.services.ThubanDocumentServiceImpl.deletDocumetExceptPermission\(ThubanDocumentServiceImpl.java:1334\)
... 27 more
Caused by:
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes\(RequestContextHolder.java:131\)
at org.springframework.web.context.request.SessionScope.get\(SessionScope.java:90\)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean\(AbstractBeanFactory.java:328\)
... 80 more
No se pueden cargar imagenes en la plantilla de envios de mail.
Aparece un diálogo con varias opciones, pero ninguna lleva a cargar la imagen.
Se detecta que las llamadas a los http-service sin estar autenticados no están funcionando, no se redirige al login para autenticarse y por ende no se pueden obtener tokens de usuario.
1- Se configura la pestaña exportar a cd/dvd de clases doc.
2- En el directorio se pone una ruta inexistente.
El sistema valida que la carpeta no existe y pregunta si desea crearla.
Se comprueba que se creo una nueva carpeta.
3- Se guarda la configuración.
4- ‘Accidentalmente’ se borra la carpeta donde se exportarían las imágenes ( puede pasar).
5- Desde la pantalla de búsqueda se procede a la exportación, resulta ok. “sus documentos fueron exportados exitosamente“ pero la carpeta no existe, y los documentos no se donde se exportaron.
Se requiere una validación de que la carpeta exista al momento de exportar.
Desde búsqueda utilizo la exportacion a cd/dvd.
Selecciono todos los campos la importación sucede correctamente
Vuelvo a entrar a esa clase documental y están todas las imagenes pero sin los datos
Pantalla admin: workflow.
Sobre un workflow ya creado, entro a las opciones avanzadas de bandejas.
En la pestaña asignar vistas lleno los datos.
(acá debería poner el botón + pero no lo hago)
Pongo guardar.
Aparece un cartel que dice que los datos se guardaron.
Vuelvo a entrar a la ventana y los datos no se guardaron.
Se espera que si falta un paso en el proceso el sistema lo comunique y que halla una validación que los datos fueron efectivamente guardados antes de mostrar el mensaje “los datos fueron guardados“
Realizando unas pruebas en 7x en la base de Oracle encontre un bug en la clase doc de prueba en un campo decimal.