bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Utilizzare jar "core" di Liferay da portlet Hot Deployed

Liferay viene rilasciato con una serie di jar che potenzialmente si potrebbero voler utilizzare anche su portlet sviluppate secondo il modello "Hot Deploy".

Un esempio di questa necessità potrebbe essere, ad esempio, l'esigenza di inserire un nuovo utente sul portale direttamente dal nostro portlet, giusto per trovare un caso d'uso "facile".

Per farlo, dovremmo utilizzare le api applicative che sono esposte nel file portal-impl.jar del portale.

Peccato che questo jar sia disponibile solamente all'interno della directory

<TOMCAT_ROOT>/webapps/ROOT/WEB-INF/lib

E che per usarlo dovremmo replicarlo all'interno della nostra portlet (orrore!:)).

Oltre a questo piccolo side effect, questa soluzione non è nemmeno possibile, perche' lo stesso jar, nel nostro caso portal-impl.jar, non può essere presente sia nel nostro war che nel path sopra indicato.

Quindi?:)

Possiamo sfruttare una caratteristica offerta da Liferay e potremmo aggiungere alla nostra WEB-INF il file liferay-plugin-package.properties.

In questo file, potremmo specificare quali jar, tra quelli presenti all'interno della dir della main webapp (la ROOT), vogliamo aggiungere al classpath del nostro portlet!

Per farlo useremo la chiave portal-dependency-jars, come in questo esempio:


name=TestPortlet
module-group-id=liferay
module-incremental-version=1
tags=sample
short-description=Dimostrazione di come includere jar
change-log=
page-url=http://blog.d-vel.com
author=D'vel Snc
licenses=LGPL

portal-dependency-jars=\
    commons-beanutils.jar,\
    commons-collections.jar,\
    commons-digester.jar,\
    commons-fileupload.jar,\
    commons-lang.jar,\
    commons-validator.jar,\
    oro.jar,\
    portal-impl.jar

speed-filters-enabled=false

Ora il nostro portlet potrà aggiungere utenti sul portale sfruttando la api nativa offerta dal portal-impl.jar senza dare grattacapi a chi poi dovrà gestire il sistema e senza replicare codice inutilmente!

Precedente
Commenti
Aggiungi Commento
enrico sanna
ciao ,
ho provato a includere il portal-impl.jar secondo le indicazioni del post.

quanto faccio hotdeploy della portlet vengono generate delle eccezzioni che impediscono la registrazione del componente:


Copying 23 files to /usr/testtomport/liferay-portal-6.0.5/tomcat-6.0.26/webapps/HookAreasUserPortlet-portlet
Copying 1 file to /usr/testtomport/liferay-portal-6.0.5/tomcat-6.0.26/webapps/HookAreasUserPortlet-portlet
Deleting directory /usr/testtomport/liferay-portal-6.0.5/tomcat-6.0.26/temp/20110708133508767
Jul 8, 2011 1:35:18 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/HookAreasUserPortlet-portlet]
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassCastException: org.apache.log4j.ConsoleAppender cannot be cast to org.apache.log4j.Appender
at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:238)
at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171)
at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184)
at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502)
at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:471)
at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:921)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696)
at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:821)
at com.liferay.util.log4j.Log4JUtil.configureLog4J(Log4JUtil.java:48)
at com.liferay.portal.deploy.hot.HookHotDeployListener.initLogger(HookHotDeployListener.java:1105)
at com.liferay.portal.deploy.hot.HookHotDeployListener.doInvokeDeploy(HookHotDeployListener.java:401)
at com.liferay.portal.deploy.hot.HookHotDeployListener.invokeDeploy(HookHotDeployListener.java:218)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil._doFireDeployEvent(HotDeployUtil.java:109)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil._fireDeployEvent(HotDeployUtil.java:182)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil.java:38)
at com.liferay.portal.kernel.servlet.PortletContextListener.doPortalInit(PortletContextListener.java:99)
at com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:42)
at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:52)
at com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:50)
at com.liferay.portal.kernel.servlet.PortletContextListener.contextInitialized(PortletContextListener.java:55)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1244)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1342)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:662)
log4j:ERROR Could not parse url [jar:file:/usr/testtomport/liferay-portal-6.0.5/tomcat-6.0.26/webapps/HookAreasUserPortlet-portlet/WEB-INF/lib/portal-impl.jar!/META-INF/portal-log4j.xml].
Inviato il 09/07/15 14.03.
Jader Jed Francia
Ciao!
Premetto che l'articolo sopra è per LR5.1; ora stà per uscire la 6.1 e questa funzionalità non è più possibile utilizzarla. Noto infatti che tu stai usando la 6.0.5, quindi già questo articolo per te non va bene! emoticon
Se provi, infatti, ad aggiungere come dipendenza portal-impl.jar al tuo portlet attraverso la Liferay IDE, questa ti risponde -appunto- che non è più possibile farlo.
Detto questo, il problema non dovresti nemmeno portelo: nella 6.0, infatti, hai accesso nativamente ai servizi contenuti nelle classi core di portale.
Tradotto: prova a cancellare dal tuo liferay-plugin-package.properties il portal-impl.jar e prova ad usare i servizi. Dovrebbe funzionarti tutto senza problemi!

Fammi sapere se si risolve o hai bisogno di qualche altra dritta! emoticon

Ciao, J.
Inviato il 09/07/15 14.03 in risposta a enrico sanna.