Forums

Home » Liferay Portal » Español » 3. Desarrollo

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Sergio Cabrera
Problema con portlet y hook
January 23, 2012 2:29 AM
Answer

Sergio Cabrera

Rank: Junior Member

Posts: 68

Join Date: December 19, 2011

Recent Posts

Hola, tengo un problema con un portlet, a ver si alguien me puede ayudar. En mi jsp tengo este código:

1   
2
3User selUser = themeDisplay.getUser();
4UserExtra 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
Sergio González
RE: Problema con portlet y hook
January 26, 2012 2:39 AM
Answer

Sergio González

LIFERAY STAFF

Rank: Expert

Posts: 274

Join Date: January 7, 2010

Recent Posts

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
Sergio Cabrera
RE: Problema con portlet y hook
January 26, 2012 3:52 AM
Answer

Sergio Cabrera

Rank: Junior Member

Posts: 68

Join Date: December 19, 2011

Recent Posts

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.
Sandy Rodríguez García
RE: Problema con portlet y hook
January 26, 2012 6:49 AM
Answer

Sandy Rodríguez García

Rank: New Member

Posts: 21

Join Date: September 4, 2011

Recent Posts

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

1   
2public boolean isLinkable() {
3    return _LINKABLE;
4}
5   
6private static final boolean _LINKABLE = true;


Como puedo cambiar este valos a travez de un Hook?

Gracias adelantadas.
Sergio Cabrera
RE: Problema con portlet y hook
January 27, 2012 3:02 AM
Answer

Sergio Cabrera

Rank: Junior Member

Posts: 68

Join Date: December 19, 2011

Recent Posts

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.
Juan Fernández
RE: Problema con portlet y hook
January 27, 2012 3:27 AM
Answer

Juan Fernández

LIFERAY STAFF

Rank: Liferay Legend

Posts: 1223

Join Date: October 2, 2008

Recent Posts

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
Juan Fernández
RE: Problema con portlet y hook
January 27, 2012 5:10 AM
Answer

Juan Fernández

LIFERAY STAFF

Rank: Liferay Legend

Posts: 1223

Join Date: October 2, 2008

Recent Posts

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:
 1<portlet>
 2    <portlet-name>11</portlet-name>
 3    <icon>/html/icons/directory.png</icon>
 4    <struts-path>directory</struts-path>
 5    <open-search-class>com.liferay.portlet.directory.util.DirectoryOpenSearchImpl</open-search-class>
 6    <portlet-url-class>com.liferay.portal.struts.StrutsActionPortletURL</portlet-url-class>
 7[i][b]    <asset-renderer-factory>com.myfactory.MyUserAssetRendererFactory</asset-renderer-factory>[/b][/i]
 8    <workflow-handler>com.liferay.portlet.directory.workflow.UserWorkflowHandler</workflow-handler>
 9    <preferences-owned-by-group>true</preferences-owned-by-group>
10    <use-default-template>false</use-default-template>
11    <private-request-attributes>false</private-request-attributes>
12    <private-session-attributes>false</private-session-attributes>
13    <render-weight>50</render-weight>
14    <header-portlet-css>/html/portlet/directory/css/main.css</header-portlet-css>
15    <css-class-wrapper>portlet-directory</css-class-wrapper>
16</portlet>



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

 1package com.liferay.portlet.directory.asset;
 2
 3import com.liferay.portlet.directory.asset.UserAssetRendererFactory;
 4
 5public class MyUserAssetRendererFactory extends UserAssetRendererFactory {
 6
 7    public boolean isLinkable() {
 8        return true;
 9    }
10
11    public boolean isSelectable() {
12        return true;
13    }
14}


4.- Desplegar, reiniciar el servidor y ¡listo! emoticon
Un saludo
Juan Fernández
Sandy Rodríguez García
RE: Problema con portlet y hook
January 27, 2012 9:28 PM
Answer

Sandy Rodríguez García

Rank: New Member

Posts: 21

Join Date: September 4, 2011

Recent Posts

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.
Sandy Rodríguez García
RE: Problema con portlet y hook
February 14, 2012 10:33 AM
Answer

Sandy Rodríguez García

Rank: New Member

Posts: 21

Join Date: September 4, 2011

Recent Posts

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.
Sergio Cabrera
RE: Problema con portlet y hook
February 14, 2012 1:06 PM
Answer

Sergio Cabrera

Rank: Junior Member

Posts: 68

Join Date: December 19, 2011

Recent Posts

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.
Sandy Rodríguez García
RE: Problema con portlet y hook
February 28, 2012 1:17 PM
Answer

Sandy Rodríguez García

Rank: New Member

Posts: 21

Join Date: September 4, 2011

Recent Posts

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.
Attachments: event-organizer-ext-ext-0.0.1-SNAPSHOT.war (19.2k)
Sergio Cabrera
RE: Problema con portlet y hook
March 13, 2012 10:55 AM
Answer

Sergio Cabrera

Rank: Junior Member

Posts: 68

Join Date: December 19, 2011

Recent Posts

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
Manuel de la Peña
RE: Problema con portlet y hook
March 13, 2012 11:09 AM
Answer

Manuel de la Peña

LIFERAY STAFF

Rank: Junior Member

Posts: 40

Join Date: July 6, 2011

Recent Posts

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