Foros de discusión

RE: Problema con portlet y hook

thumbnail
Sergio Cabrera, modificado hace 12 años.

Problema con portlet y hook

Junior Member Mensajes: 68 Fecha de incorporación: 19/12/11 Mensajes recientes
Hola, tengo un problema con un portlet, a ver si alguien me puede ayudar. En mi jsp tengo este código:

	

User selUser = themeDisplay.getUser();
UserExtra userExtra = UserExtraLocalServiceUtil.getUserExtra(selUser.getUserId());



donde UserExtra está en el service.xml de un hook. Para que esto me funcionara, que funciona, metí la librería del hook en /lib/ext del Tomcat.

Mi problema es que si vuelvo a desplegar el hook en caliente me da un NullPointerException en la línea donde se declara userExtra. Si paro el Tomcat y lo vuelvo a arrancar funciona sin problemas con las modificaciones que haya hecho en el último despliegue. ¿Alguna idea?

Muchas gracias
thumbnail
Sergio González, modificado hace 12 años.

RE: Problema con portlet y hook

Expert Mensajes: 301 Fecha de incorporación: 7/01/10 Mensajes recientes
Hola Sergio,

No sé exactamente como has implementado tu hook, pero para sobreescribir servicios no es necesario copiar la librería en el tomcat (simplemente con desplegar el hook debería de ser suficiente). Puedes echar un vistazo a la wiki de los hooks para ver si estás haciendo todo bien...

Saludos
thumbnail
Sergio Cabrera, modificado hace 12 años.

RE: Problema con portlet y hook

Junior Member Mensajes: 68 Fecha de incorporación: 19/12/11 Mensajes recientes
Gracias por la respuesta.

Creo que he liado un poco el tema porque realmente este servicio no lo tengo declarado en el service.xml, sino que he implementado la clase impl y he hecho que extienda a UserLocalServiceWrapper. Luego en liferay-hook he puesto que ésta sea la clase que implementa el servicio de User. He tenido que poner el jar en el /lib/ext porque desde el portlet no me reconocía la clase del servicio (he visto varias entradas hablando de poder referenciar así servicios desde plugins externos). No sé si es un fallo de concepto.
thumbnail
Sandy Rodríguez García, modificado hace 12 años.

RE: Problema con portlet y hook

New Member Mensajes: 21 Fecha de incorporación: 4/09/11 Mensajes recientes
Hola Sergio!!

Necesito ayuda,
Necesito relacionar usuarios a los eventos agregados en el Calendar Portlet, para esto es necesario primeramente mostrar la Entidad User en el menú de selección del panel Related Asset de la página Agregar Evento del Calendar Portlet, para esto es necesario poner en true _LINKABLE = true que por defecto está en false

	
public boolean isLinkable() {
	return _LINKABLE;
}
	
private static final boolean _LINKABLE = true;


Como puedo cambiar este valos a travez de un Hook?

Gracias adelantadas.
thumbnail
Sergio Cabrera, modificado hace 12 años.

RE: Problema con portlet y hook

Junior Member Mensajes: 68 Fecha de incorporación: 19/12/11 Mensajes recientes
Uf Sandy, no sé si voy a poder ayudarte. Tengo experiencia en desarrollos pero en Liferay la verdad es que bastante poca. Por lo que he visto hasta ahora, con los hooks puedes extender varias cosas, pero no todas.

Yo miraría primero si lo que necesitas cambiar está en alguna propiedad del portal.properties. Esto sería fácil, lo podrías cambiar o en el hook (aunque no todas las propiedades se pueden cambiar en el hook) o directamente en el portal-ext.properties.

Luego si lo que quieres cambiar está en un servicio sí lo puedes extender con un hook, pero por los datos que me das no tengo muy claro qué es lo que necesitas. Si lo que necesitas extender está en una acción entonces o tienes que usar el ext o tener la versión 6.1 de Liferay. Te recomiendo el libro Liferay in Action, está todo bastante bien explicado y a mí me ha servido de mucho.

Como ya te he dicho soy bastante nuevo en esto, así que si he dicho alguna barbaridad espero que alguno de los masters me corrija.
thumbnail
Juan Fernández, modificado hace 12 años.

RE: Problema con portlet y hook

Liferay Legend Mensajes: 1261 Fecha de incorporación: 2/10/08 Mensajes recientes
Hola Sandy y Sergio:
hacer esto no es tan fácil como parece. Estoy haciendo unas pruebas para ver la manera más limpia de implementar esto y en cuanto lo tenga os dejo escritos los pasos. Igual escribo también una entrada de blog y una sección en la guía de desarrollo, porque no hay nada documentado.
Un saludo,
Juan Fernández
thumbnail
Juan Fernández, modificado hace 12 años.

RE: Problema con portlet y hook

Liferay Legend Mensajes: 1261 Fecha de incorporación: 2/10/08 Mensajes recientes
Pasos para extender o modificar un AssetRendererFactory

1.- Crear un plugin ext (en el Liferay IDE: File - new - Liferay Portlet - ext)
2.- en docroot/web-inf/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml añadir el portlet que queremos extender/modificar y darle el valor deseado.
En este caso cambio el portlet User y le pongo el valor
<asset-renderer-factory>com.myfactory.MyUserAssetRendererFactory</asset-renderer-factory>

Código del portlet:
[indent]
<portlet>
	<portlet-name>11</portlet-name>
	<icon>/html/icons/directory.png</icon>
	<struts-path>directory</struts-path>
	<open-search-class>com.liferay.portlet.directory.util.DirectoryOpenSearchImpl</open-search-class>
	<portlet-url-class>com.liferay.portal.struts.StrutsActionPortletURL</portlet-url-class>
[i][b]	<asset-renderer-factory>com.myfactory.MyUserAssetRendererFactory</asset-renderer-factory>[/b][/i]
	<workflow-handler>com.liferay.portlet.directory.workflow.UserWorkflowHandler</workflow-handler>
	<preferences-owned-by-group>true</preferences-owned-by-group>
	<use-default-template>false</use-default-template>
	<private-request-attributes>false</private-request-attributes>
	<private-session-attributes>false</private-session-attributes>
	<render-weight>50</render-weight>
	<header-portlet-css>/html/portlet/directory/css/main.css</header-portlet-css>
	<css-class-wrapper>portlet-directory</css-class-wrapper>
</portlet>

[/indent]

3.- Luego creamos la clase y extendemos la original con los métodos que necesitemos

package com.liferay.portlet.directory.asset;

import com.liferay.portlet.directory.asset.UserAssetRendererFactory;

public class MyUserAssetRendererFactory extends UserAssetRendererFactory {

	public boolean isLinkable() {
		return true;
	}

	public boolean isSelectable() {
		return true;
	}
}


4.- Desplegar, reiniciar el servidor y ¡listo! emoticon
Un saludo
Juan Fernández
thumbnail
Sandy Rodríguez García, modificado hace 12 años.

RE: Problema con portlet y hook

New Member Mensajes: 21 Fecha de incorporación: 4/09/11 Mensajes recientes
Hola Juan!!!

Nuevamente un montón de gracias, no se que fuera de nuestro aprendizaje en Liferay sin la existencia de personas como usted dispuestas a ayudar y brindar sus conocimientos.

Juan en cuanto a los de los hilos, no se preocupes, no lo hare mas de esa manera.

Un Montón de gracias Juan!!

Gracias a ti también Sergio por tu intención de ayudar, ahora ya ambos sabemos algo nuevo gracias a Juan.
thumbnail
Sandy Rodríguez García, modificado hace 12 años.

RE: Problema con portlet y hook

New Member Mensajes: 21 Fecha de incorporación: 4/09/11 Mensajes recientes
Hola Juan!

Otra vez vuelvo en busca de su ayuda, he intentado en varias maneras solucionar mi nuevo problema pero ya casi me he dado por vencido y he tenido que acudir a su ayuda nuevamente, el problema es el siguiente:

Todo me funciono correctamente con el plugin ext con sus indicaciones anteriores, lo cree, implemente y desplegué en el portal, todo funciono perfecto pero el problema surge cuando decidí crearlo nuevamente con un nombre diferente, entonces a la hora de desplegar este nuevo plugin ext, el tomcat me arroja este error:

Feb 14, 2012 5:46:50 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/event-organizer-ext] appears to have started a thread named [Timeout guard] but has failed to stop it. This is very likely to create a memory leak.

Luego se queda colgado en la línea:

17:46:50,959 INFO [PluginPackageUtil:1099] Reading plugin package for event-organizer-ext

He desinstalado el Bundle de Liferay, he limpiado la base de datos, he creado nuevamente el servidor pero nada.

Por favor, ayúdeme en esto.

Saludos,
Sandy.
thumbnail
Sergio Cabrera, modificado hace 12 años.

RE: Problema con portlet y hook

Junior Member Mensajes: 68 Fecha de incorporación: 19/12/11 Mensajes recientes
Hola, Sandy. No sé si tu problema tiene algo que ver con esto, pero que yo sepa los ext no se pueden redesplegar. Tienes que eliminarlo por completo. En este enlace viene cómo hacerlo:

http://www.liferay.com/es/community/wiki/-/wiki/Main/Ext+Plugin#section-Ext+Plugin-Ext+Plugin+can%27t+be+undeployed

Si el nuevo los has desplegado sobre un Liferay limpio ya me descuadra un poco más. Lo de los cambios de nombre es un poco peligroso, porque como no se haga bien la refactorización puedes tener por ahí ficheros de configuración con el nombre antiguo.
thumbnail
Sandy Rodríguez García, modificado hace 12 años.

RE: Problema con portlet y hook

New Member Mensajes: 21 Fecha de incorporación: 4/09/11 Mensajes recientes
Hola Sergio,

Gracias por tu respuesta pero he hecho lo que me comentaste sobre eliminarlo por completo como viene en el link pero sigue el mismo problema.
Aquí te dejo el .war de mi Plugin EXT, por favor despliégalo y dime si puedes ver que es lo que esta sucediendo.

Gracias.

Saludos,
Sandy.
thumbnail
Sergio Cabrera, modificado hace 12 años.

RE: Problema con portlet y hook

Junior Member Mensajes: 68 Fecha de incorporación: 19/12/11 Mensajes recientes
Lo siento, Sandy. Como ya te comenté soy bastante nuevo en esto de Liferay y me temo que no tengo ni idea de a qué se puede deber. ¿Has mirado en los foros?

http://www.liferay.com/es/community/forums/-/message_boards/message/5849340
thumbnail
Manuel de la Peña, modificado hace 12 años.

RE: Problema con portlet y hook

Junior Member Mensajes: 62 Fecha de incorporación: 6/07/11 Mensajes recientes
Hola buenas tardes.

El repliegue de un plugin EXT es una tarea bastante delicada ya que, dependiendo de la funcionalidad propia del plugin, podrá afectar al código, a la base de datos, o incluso al sistema de archivos.

Para anular el despliegue de un plugin EXT normal (que añada funcionalidad sobreescribiendo clases), debes hacer lo siguiente:

1) Parar el servidor de aplicaciones.
2) Anular el despliegue correspondiente al fichero del plugin EXT. Para ello:
2.1) Eliminar del directorio WEB-INF/lib del portal todos los ficheros JAR que contengan en su nombre el de tu EXT.
2.2) Eliminar del directorio WEB-INF del portal el fichero XML que contenga en su nombre el de tu EXT.
2.3) Eliminar del directorio lib/ext del Servidor de aplicaciones todos los ficheros JAR que contengan en su nombre el de tu EXT
3) Iniciar el servidor de aplicaciones.

Estos pasos en principio debería anular el despliegue.

Un saludo, Manuel