Entrades amb etiqueta custom .

Modificar el tiempo de sesión de Liferay

Data de publicació 29/04/16 09:30

La duración de la sesión de Liferay por defecto es de 30 minutos. Hoy os mostraremos como modificar este valor.

Podemos encontrar este valor dentro del portal.properties de Liferay.

  • portal.properties (Liferay src): /portal/portal-impl/classes
  • portal.properties (Server): /webapps/ROOT/WEB-INF/lib/portal-impl.jar
    #
    # Specify the number of minutes before a session expires. This value is
    # always overridden by the value set in web.xml.
    #
    session.timeout=30

 

Al estar como propiedad de portal podemos sobrescribirla des del portal-ext.properties o el portal-setup-wizard.properties

  • portal-ext.properties: /webapps/ROOT/WEB-INF/classes/
  • portal-setup-wizard.properties: /liferay-portal-x.x-xx-xxx/
    session.timeout=240

 

Tal y como indican en el propio portal.properties, este cambio no es suficiente, ya que prevalece el valor que se encuentra en el archivo web.xml

  • web.xml (Liferay src): /portal-web/docroot/WEB-INF/
  • web.xml (Server): /webapps/ROOT/WEB-INF/
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

 

La forma recomendada de modificar este tipo de propiedades es mediante un Ext Plugin.

Al crear un nuevo Ext Plugin, se nos generarán diversos directorios y archivos. El que queremos modificar nosotros ya se encuentra en (/docroot/WEB-INF/ext-web/docroot/WEB-INF/web.xml ). Solamente es necesario editarlo y añadir únicamente el tag que queremos modificar. No es necesario como en otros casos poner todo el contenido, ya se encargará de hacer el merge con el archivo original.

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <session-config></session-config>
</web-app>

En nuestro caso eliminamos el tag <session-timeout> para que tome como válido el valor que pongamos en el portal-ext.properties, siendo más sencillo controlar dicho valor.

Una vez aplicado el EXT podremos observar que el archivo web.xml de nuestro servidor que antes contenía <session-timeot> dentro de <session-config>, ahora ya no tiene esa propiedad. Desde este momento ya podremos modificar el tiempo de sesión desde las propiedades del portal.

Recordad que para aplicar un EXT es necesario reiniciar después de hacer el deploy, y si ya existía un EXT anterior, según la situación, puede ser necesario limpiar Liferay antes de aplicar de nuevo un Ext Plugin (más información aquí).

Un saludo.

Indexación customizada

Data de publicació 01/03/16 11:35

Buenas,

Hoy nos centraremos en explicar como indexar contenido propio creando una clase Indexer custom.

 

1. Crear la clase CustomIndexer.java que extiende a BaseIndexer

Crearemos una nueva clase java que extenderá a la clase de Liferay com.liferay.portal.kernel.search.BaseIndexer.

package com.sonicon.index.util;

import java.util.Locale;
import javax.portlet.PortletURL;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.Summary;

public class CustomIndexer extends BaseIndexer{

}

 

2. Implementar los métodos necesarios

Es necesario implementar los siguientes métodos para el nuevo indexer. Puedes ver ejemplos en los indexer propios de Liferay como AssetCategoryIndexer, BlogsIndexer, JournalArticleIndexer, etc. (ejemplo: JournalArticleIndexer)

public static final String[] CLASS_NAMES = { Custom.class.getName() };
public static final String PORTLET_ID = "custom-portlet";

@Override
public String[] getClassNames() {
	return CLASS_NAMES;
}

@Override
public String getPortletId() {
	return PORTLET_ID;
}

@Override
protected void doDelete(Object obj) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected Document doGetDocument(Object obj) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected Summary doGetSummary(Document document, Locale locale, String snippet, 
		PortletURL portletURL) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected void doReindex(Object obj) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected void doReindex(String[] ids) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected void doReindex(String className, long classPK) throws Exception {
	// TODO Auto-generated method stub
}

@Override
protected String getPortletId(SearchContext searchContext) {
	// TODO Auto-generated method stub
}

 

3. Registrar el nuevo indexer

Añadir dentro del liferay-portlet.xml el siguiente elemento. Normalmente se sitúa después del elemento <icon></icon>, mirar el DTD para más información:

<liferay-portlet-app>
  <portlet>
    <portlet-name>custom</portlet-name>
    <icon>/icon.png</icon>
    <indexer-class>com.sonicon.index.util.CustomIndexer</indexer-class>
    ...
  </portlet>
  ...
</liferay-portlet-app>

Nota: el indexer se registra al deployar el portlet.

 

4. Comprobando el registro del indexer

Podemos printar el listado de indexers registrados con el siguiente código.

import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.search.Indexer;
import java.util.List;

List indexers = IndexerRegistryUtil.getIndexers();

for (Indexer indexer : indexers) {
  String[] classnames = indexer.getClassNames();
  String portletId = indexer.getPortletId();

  for (String classname : classnames) {
    System.out.println("PortletId ["+portletId+"] - classname: "+classname);
  }
}

Nota: se puede cargar en modo script desde el Control Panel > Server Administration > Script > Groovy y ver el resultado en el catalina.out.

 

5. Utilizando el indexer

Para añadir un documento al indexer se realiza con el siguiente código. Lo más habitual es ejecutarlo al realizar un add o update del objeto desde su LocalServiceImpl.

Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(Custom.class);
indexer.reindex(custom_obj);

 

Del mismo modo, también se debería eliminar el documento del indexer al realizar un delete del objeto.

Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(Custom.class);
indexer.delete(custom_obj);

 

6. Comprobando el contenido del indexer

Para ver que documentos contiene un indexer podemos utilizar un código de este estilo:

SearchContext searchContext = new SearchContext();
Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(Custom.class);
Hits hits = indexer.search(searchContext);
List docs = hits.toList();
int i = 1;
for (Document doc : docs) {
  System.out.println("Documento ["+i+"]: "+doc.getField(Field.TITLE).getValue());
  i++;
}

Nota: también existe un programa que te permite analizar los documentos indexados por Lucene (Luke).

 

Espero que este post os resulte útil. Un saludo.

Bloggers recents Bloggers recents

Oscar Rodríguez
Apunts: 9
Estrelles: 2
Data: 28/09/16
David Berruezo
Apunts: 14
Estrelles: 1
Data: 22/07/16
Javi Martín
Apunts: 2
Estrelles: 1
Data: 20/05/16
Javier Torres
Apunts: 5
Estrelles: 3
Data: 11/04/16
Sergi Mingueza
Apunts: 4
Estrelles: 1
Data: 19/10/15
Matilde Gallardo
Apunts: 1
Estrelles: 0
Data: 26/02/15
Adrià Vilà
Apunts: 4
Estrelles: 4
Data: 31/08/14
Elena Ruiz
Apunts: 1
Estrelles: 2
Data: 13/03/14