Liferay
cierra la sesión después de 30 minutos de trabajo
Usando OX3.1 o superior no se produce recarga de página (gracias a AJAX),
por eso si el usuario está trabajando 30 minutos en el mismo módulo
Liferay piensa que no ha tocado la aplicación en todo ese tiempo, y
muestra un mensaje de fin de sesión.
Es fácil configurar Liferay para evitar este comportamiento tan
inconveniente.
Primero, pon la caducidad de la sesión a 5 minutos. Edita el archivo
web.xml
(en
webapps/ROOT/WEB-INF para Tomcat):
<session-config>
<session-timeout>5</session-timeout>
</session-config>
Edita (o crea si todavía no existe) el archivo
webapps/ROOT/WEB-INF/classes/portal-ext.properties,
añadiendo las siguientes propiedades:
session.timeout=5
session.timeout.warning=1
session.timeout.auto.extend=true
De esta manera la caducidad de la sesión es de solo 5 minutos, pero es
extendida automáticamente (sin preguntar nada al usuario) mientras que el
navegador tenga el Liferay abierto.
Advertencia: Por causa de un bug de Liferay esta configuración necesita un
Liferay 4.4.1 o superior.
UTF-8
characters are not processed correctly
OpenXava tiene soporte completo para UTF-8 o cualquier otro conjunto de
caracteres que quieras desde la versión 3.1. Coge el valor de la propiedad
Java
file.encoding y la usa como codificación para las
peticiones y respuestas web.
Si tu aplicación OX no muestra o introduce correctamente caracteres UTF-8,
prueba poner
-Djava.encoding=UTF-8 como opción Java al arrancar
tu servidor de aplicaciones.
La
salida de bitácora (log) no se muestra con Liferay 5.1
Simplemente añade un archivo llamado
logging.properties a la
carpeta
properties de tu proyecto. El registro puede estar
vacío.
La causa es que si el Liferay 5.1 no encuentra este archivo lo crea por
ti, y está configurado por defecto para no producir salida en el log.
Degradación
del rendimiento cuando se trabaja mucho tiempo en la misma página con
Liferay
Este no es un problema de OpenXava. Es un problema del JavaScript incluido
en Liferay. Realmente afecta a cualquier aplicación AJAX que cambie el
HTML sin recargar la página durante algún tiempo.
Afortunadamente es fácil de arreglar. Edita el archivo
livequery.js
de la carpeta
webapps/ROOT/html/js/jquery en tu Liferay. Busca
la función
registerPlugin y comenta su contenido. Tal y como
sigue:
registerPlugin: function() {
/* Anulado, porque produce una degracación
* del rendimiento con OpenXava,
* realmente con cualquier aplicación AJAX que use
* una página HTML única
$.each( arguments, function(i,n) {
// Short-circuit if the method doesn't exist
if (!$.fn[n]) return;
// Save a reference to the original method
var old = $.fn[n];
// Create a new method
$.fn[n] = function() {
// Call the original method
var r = old.apply(this, arguments);
// Request a run of the Live Queries
$.livequery.run();
// Return the original methods result
return r;
}
});
*/
},
Si está usando Liferay 5.2.x ya has terminado el trabajo, simplemente
refresca el navegador y todo tiene que funcionar de perlas.
Si está usando Liferay 5.1.x edita el archivo
portal-ext.properties
de la carpeta
webapps/ROOT/WEB-INF/classes en tu Liferay, y
añade la siguiente entrada:
javascript.fast.load=false
Después, reinicia tu Liferay. Ahora todo funcionará rápido todo el tiempo.
Pérdida
de JNDI en Liferay
Con la aplicación funcionando en el portal, si al cambiar el esquema por
código nos ocurre este error:
Caused by: org.hibernate.engine.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/DataSource]
at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:117)
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:115)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56)
... 286 more
Caused by: javax.naming.NameNotFoundException: El nombre java:comp/env/jdbc/DataSource no este asociado a este contexto
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:135)
at com.liferay.portal.security.pacl.jndi.SchemeAwareContextWrapper.lookup(SchemeAwareContextWrapper.java:193)
at javax.naming.InitialContext.lookup(InitialContext.java:396)
at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:114)
Se soluciona añadiendo en el fichero
portal-ext.properties de la
carpeta
webapps/ROOT/WEB-INF/classes
de tu liferay la siguiente línea
:
portal.security.manager.strategy=none
Generar PDF
no funciona
Suele ser porque el bloqueador de ventanas emergentes está activo en tu
navegador. Desactívalo o añade tu URL como excepción. A partir de v5.8 la
generación PDF funciona incluso con el bloqueador de ventanas emergentes
activado.