`

liferay Ext调用portlet插件服务bug

阅读更多

liferay ext访问portlet底层数据库6.0.6bug官方解决方案

 

Description

The code generated by the service builder was not working. We get a null pointer exception when calling a service method at the generated façade. The generated code contains logical errors:
The MethodKey member variables in the *ServiceClp-classes are implicitly initialized while making use of the ClassLoaderProxy member variable which is initialized by the constructor. The implicit initializations of the MethodKey members are done before the ClassLoaderProxy member is set by the constructor. Unfortunately during the MethodKey member initialization the ClassLoaderProxy member is being accessed which results in the null pointer. See the corresponding template file for a fix (service_clp.ftl).

After this modification the null pointer was gone but replaced by a ClassNotFoundException. The message of the exception said something like "Class $Proxy271 not found". The problem is located in the generated *ServiceUtil-class. The ClassLoaderProxy instance is created with a deprecated constructor which takes the service façade object and the portlet class loader. Internally the constructor took the class name from the service façade object with getClass().getName(). I supposed that this was the reason for the weird class name "$Proxy271" (probably because it is an implementation class name and the class is a proxy generated by Spring-AOP).

However, to fix this I used the non-deprecated constructor (where the class name can be specified) and set the service façade interface class name. I've attached the fixed template file (service_util.ftl).
Though I wasn't sure if this would work - after this modification everything seemed to work fine.

Attachments

  1. service_clp.ftl
    08/Oct/10 8:02 AM
    3 kB
  2. service_util.ftl
    08/Oct/10 8:02 AM
    4 kB

Activity

Puj added a comment - 26/Nov/10 1:58 AM

Hi,

can you please explain how I should use thiese .ftl file to avoid the problem? I get NullPointerException when trying to call a method of my xxxLocalServiceUtil in another plug-in.
Pretty much the same as your issue, except I don't receive Class $Proxy271 not found (yet!).

Thanks for the help!

Frank Hardy added a comment - 26/Nov/10 4:15 AM

Hi Puj,

you have two options for this:

1. If you have the portal sources then copy the attached template files in directory (replacing the old ones ):

<location of the portal source>/portal/portal-impl/src/com/liferay/portal/tools/servicebuilder/dependencies

Then build the portal-impl.jar

2. If you don't have the portal sources locate the portal-impl.jar in your portal installation (what your Liferay-SDK is configured to - see app.server.dir property in your build.properties file). You will find it in the portal web-app in WEB-INF/lib. E.g. for Tomcat-bundle in <tomcat>/webapps/ROOT/WEB-INF/lib. Then unpack the jar to some temp location. Replace the templates which are located in classes/com/liferay/portal/tools/servicebuilder/dependencies. Repack the portal-impl.jar.

Finally replace the portal-impl.jar in the portal web-app WEB-INF/lib directory.

Then it should work (for me it did ).

HTH

Regards,
Frank.

Seshendra Nalla added a comment - 30/Nov/10 10:57 PM

I ran into the exact same situation NPE (which I narrowed it down to the "Implicit MethodKey member initialization in the *serviceclp.java generated by Service Builder) followed by the $Proxy271 not found exception. Modifying the template files (as suggested above) solved the problem.

Regards,
Seshendra

Kristoffer Onias added a comment - 21/Jan/11 4:32 PM - edited

Hi David,
Has your issue been resolved by the files in the attachment? Otherwise, please provide additional information based on the information found in our JIRA reporting wiki (http://www.liferay.com/community/wiki/-/wiki/1071674/JIRA/maximized ) Thanks!

David Wainwright added a comment - 24/Jan/11 12:35 AM

Hallo Kristoffer,
yes, the supplied files fix the issue in the concrete case (the files came from us as an aid to fixing the bug).
Regards,
David

Kristoffer Onias added a comment - 24/Jan/11 10:32 AM

Hello David,
It's good to hear that your issue has been resolved. I will close this ticket as fixed then. Thank you for reporting the issue.

julien added a comment - 08/Feb/11 7:40 AM

I have the same problem, but the fix does not work for me

I'm on LR 6.0.5 GA (rev 60396)

Im using the portal source files, so I replaced the 2 files you provided.
Then I recompiled the portal, I generated my service and deployed it, and then I started the portal, but I still have the same issue :

16:34:14,095 ERROR [jsp:154] java.lang.NullPointerException
at blabla.model.service.LDAPEtudiantLocalServiceClp.<init>(LDAPEtudiantLocalServiceClp.java:398)
at blabla.model.service.LDAPEtudiantLocalServiceUtil.getService(LDAPEtudiantLocalServiceUtil.java:244)
at blabla.model.service.LDAPEtudiantLocalServiceUtil.getLDAPEtudiant(LDAPEtudiantLocalServiceUtil.java:170)

Did I try to fix it in the right way ?

David Wainwright added a comment - 08/Feb/11 7:57 AM

This Issue is not fixed, the files that we supplied fix the *concrete * case. As soon as you regenerate, the problem is back again.

julien added a comment - 08/Feb/11 8:21 AM

What do you mean by *concrete * case ?

julien added a comment - 08/Feb/11 8:31 AM

Nevermind, finally it's working very well
Thx for the fix !

Romano Silva added a comment - 24/Feb/11 6:29 AM

Is this issue related to LPS-14035 ?

julien added a comment - 24/Feb/11 7:16 AM

yes it is

Alessandra Donnini added a comment - 19/Jul/11 1:13 AM

I'm using 6.0.6 and I have the same problem and the fix doesn't work. I substituted the files in portal source, I built portal-impl.jar and I deployed it in ROOT/WEB-INF/lib. What it means as soon as I regenerate the problem is back againg? Regenerate what? The portlet plugin that provides services (using service builder) or the plugin that uses services?

Alex Chew added a comment - 21/Aug/11 8:30 AM

The problem still exists on 6.0.6. After I replaced attached .tpl files I got below errors.

15:16:54,687 ERROR [BasePersistenceImpl:182] Caught unexpected exception java.lang.NullPointerException
com.liferay.portal.kernel.exception.SystemException: java.lang.NullPointerException
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.processException(BasePersistenceImpl.java:189)
at com.etravel.hotel.service.persistence.HotelPersistenceImpl.findAll(HotelPersistenceImpl.java:449)
at com.etravel.hotel.service.persistence.HotelPersistenceImpl.findAll(HotelPersistenceImpl.java:385)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at com.liferay.portal.dao.shard.ShardAdvice.invokePersistence(ShardAdvice.java:205)
at sun.reflect.GeneratedMethodAccessor296.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy357.findAll(Unknown Source)
at com.etravel.hotel.service.base.HotelLocalServiceBaseImpl.getHotels(HotelLocalServiceBaseImpl.java:212)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at com.liferay.portal.dao.jdbc.aop.DynamicDataSourceTransactionInterceptor.invoke(DynamicDataSourceTransactionInterceptor.java:44)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy355.getHotels(Unknown Source)
at com.etravel.hotel.service.impl.HotelServiceImpl.getMyHotels(HotelServiceImpl.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at com.liferay.portal.dao.jdbc.aop.DynamicDataSourceTransactionInterceptor.invoke(DynamicDataSourceTransactionInterceptor.java:44)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:58)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy356.getMyHotels(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.liferay.portal.kernel.util.MethodHandler.invoke(MethodHandler.java:81)
at com.liferay.portal.kernel.util.ClassLoaderProxy.invoke(ClassLoaderProxy.java:67)
at com.etravel.hotel.service.HotelServiceClp.getMyHotels(HotelServiceClp.java:40)
at com.etravel.hotel.service.HotelServiceUtil.getMyHotels(HotelServiceUtil.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.liferay.portal.action.JSONServiceAction.getJSON(JSONServiceAction.java:120)
at com.liferay.portal.struts.JSONAction.execute(JSONAction.java:49)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:152)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:508)
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:485)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:261)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.themepreview.ThemePreviewFilter.processFilter(ThemePreviewFilter.java:88)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:126)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:182)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.sso.ntlm.NtlmPostFilter.processFilter(NtlmPostFilter.java:81)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:179)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:239)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:196)
at com.liferay.portal.servlet.filters.threadlocal.ThreadLocalFilter.processFilter(ThreadLocalFilter.java:35)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.nextTimestamp(RegionFactoryCacheProviderBridge.java:93)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:650)
at org.hibernate.impl.SessionFactoryImpl.openSession(SessionFactoryImpl.java:659)
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:318)
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:256)
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:60)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:698)
at com.liferay.portal.dao.orm.hibernate.SessionFactoryImpl.openSession(SessionFactoryImpl.java:59)
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.openSession(BasePersistenceImpl.java:177)
at com.etravel.hotel.service.persistence.HotelPersistenceImpl.findAll(HotelPersistenceImpl.java:433)
... 152 more

Cid Miranda added a comment - 27/Sep/11 5:28 PM

After attach .tpl files run service builder again.

Owen James added a comment - 24/Nov/11 7:40 AM

Hello,

I'm using LR 6.0.6 CE.

I'm encountering into the issue described by David.

Context : I have two portlets. One creating services and another consuming them.
Error : Exactly what you describe in your post.

Well, I’ve apply the solution by packaging the portal-impl.jar with the new versions of service_util.ftl and service_clp.ftl. I’ve now access to the share services in the second portlet. However, a new issue has come. Anytime I want to save an entity in the first portlet (an operation that worked before), I got an NoSuchMethodException. But, the method exist, and with the right signature. Here is an excerpt of the log exception :

java.lang.NoSuchMethodException: com.alti.cnp.service.SinistreLocalServiceUtil.updateSinistre(com.alti.cnp.model.Sinistre)
at java.lang.Class.getMethod(Class.java:1605)
at com.liferay.portal.kernel.util.MethodCache._get(MethodCache.java:107)

Any help would be greatly appreciate.

Thanks

Ken Barron added a comment - 24/Nov/11 12:31 PM

Your NoSuchMethodException should disappear if you make sure that your service builder jar file is either:
1. under your lib/ext directory (talking Tomcat here - anyway your appserver shared lib directory), AND removed from your WEB-INF/lib directory of your service builder webapp.
OR 2. under the WEB-INF/lib directory of all of your web apps (including the portlet web app)
I haven't tried the second method but the first one definitely worked for me. Got this info from another Liferay forum or blog post but I can't remember where to give you the link.

分享到:
评论

相关推荐

    Liferay跨页面Portlet之间的调用与数据传递.docx

    在Liferay中,跨页面Portlet之间的调用与数据传递是一项关键任务,因为这涉及到不同Portlet间的协作和信息共享。Liferay提供了多种通信机制,包括PortletSession、Public Render Parameters以及Portlet事件,但这些...

    liferay扩展环境 liferay ext

    Liferay Ext允许开发者在不修改核心代码的情况下对Liferay进行高级定制,这包括添加新的portlet、服务、主题以及系统级别的配置。 描述中提到的链接指向了一篇博客文章,虽然内容未提供,但通常这类资源会包含有关...

    Liferay-Portlet-SDK5.2.3.rar_liferay_liferay sdk_portlet

    - **类库**:SDK提供了所有必要的jar文件,包括Liferay Portal服务API、Portlet API和JSP标签库等,这些都是开发portlet所必需的依赖。 - **示例代码**:SDK通常包含一些示例portlet项目,帮助开发者快速理解如何...

    liferay portlet 开发实例

    在IT领域,特别是企业级应用开发中,Liferay作为一个强大的企业门户平台,提供了丰富的功能和服务,其中Liferay Portlet的开发是构建定制化企业应用的关键技术之一。本文将基于提供的文件信息,深入解析Liferay ...

    ext liferay开发

    - **ext-service/src**:提供可被其他插件调用的服务接口。 - **ext-web/docroot**:包含Web应用的配置文件和JSP页面。 - **其他目录**:如ext-util-bridges、ext-util-java、ext-util-taglib,主要用于高级应用...

    Liferay5.2.3 样例Portlet

    Liferay5.2.3的样例,通过war.bat打包后发布到相应的liferay环境即可。 另外,需要配置context,tomcat中的代码如下: &lt;/Context&gt;

    liferay portlet例子

    liferay portlet例子 liferay portlet例子

    用struts1.X实现liferay portlet插件(HelloWorld)

    在"用struts1.X实现liferay portlet插件(HelloWorld)"的项目中,我们将探讨如何将Struts1与Liferay的portlet机制相结合,构建一个简单的portlet插件。以下是一些主要的知识点: 1. **Struts1基础知识**:Struts1的...

    Liferay portlet 工程示例代码

    Portlet是Liferay Portal中的核心组件,类似于Web应用的迷你窗口,可以嵌入到门户页面上展示内容和服务。Portlets可以是动态的,比如显示实时数据,也可以是静态的,如导航菜单或登录表单。它们通过portlet API与...

    CAS, Liferay和Alfresco portlet三者的整合

    Liferay的特点在于其强大的portlet容器,portlet是一种可重用的Web组件,可以集成到门户页面中,为用户提供定制化的功能。 Alfresco则是一个强大的企业内容管理系统(Enterprise Content Management, ECM),它涵盖...

    liferay门户调用webservice依赖jar包

    7. **开发工具集成**:对于Java开发,IDE如Eclipse或IntelliJ IDEA通常有插件支持Liferay的开发,包括自动导入所需的客户端库和生成服务代理代码。 8. **日志和调试**:在调用Web服务过程中,日志记录和调试是必不...

    liferay_portlet对象详解

    【Liferay Portlet 对象详解】 在 Liferay 平台中,Portlet 是核心组件,它负责呈现内容和提供互动功能。Portlet 技术的理解和应用是开发 Liferay 应用程序的关键。本文将深入解析 Portlet 的关键概念,包括 ...

    liferay-portlet-development

    Liferay Plugins SDK提供了创建portlet和其他Liferay插件所需的工具和模板。安装并配置SDK后,即可开始创建自定义portlet。 ### 六、开发工具 为了提高开发效率,建议安装以下工具: - Eclipse IDE:主流的Java...

    liferay-spring-portlet

    【标题】"liferay-spring-portlet"是一个基于Spring框架构建的portlet应用,适用于Liferay门户平台。这个项目展示了如何将Spring与Liferay Portal结合,创建一个可直接部署到Liferay中的WAR包。作者提到他们已经花费...

    liferay portlet开发

    本指南将重点介绍使用Liferay Plugin SDK进行Portlet插件开发的方法。 #### 三、创建Portlet插件工程 ##### 1. 前置准备 - **安装Liferay Eclipse 插件**:首先需要安装Liferay的Eclipse插件或直接使用Liferay...

    liferay一个简单的portlet

    - **RESTful服务**:创建Portlet API,以JSON或其他格式暴露数据,供其他应用或Portlets调用。 总之,理解并掌握Liferay Portlet的开发是构建强大门户系统的关键。通过实践和不断探索,开发者可以充分利用Liferay...

    Liferay Soy Portlet可视化数据

    1. 使用Liferay Plugin SDK或者Gradle插件创建一个新的Liferay Portlet项目。 2. 在项目的src/main/resources目录下添加Soy模板文件,例如`templates/monthlyTrading.soy`,在这里定义UI布局和数据绑定。 3. 在Soy...

    Liferay_Control-Panel_Portlet DTD-5.2_MVC-Portlet

    此外,开发者还可以利用Liferay的服务层和服务API来进一步扩展portlet的功能,例如访问数据库、调用其他portlet服务等。 总的来说,"Liferay Control-Panel Portlet DTD-5.2_MVC-Portlet"这个主题涵盖了Liferay的...

    liferay-spring-mvc-portlet:Liferay Spring MVC portlet 的项目模板

    Liferay Spring Portlet MVC 使用 Maven 的 Liferay Spring Portlet MVC 项目模板。 Liferay EE 6.2.10.11 (GA1, SP710) Java 1.7 小门户 2.0 弹簧框架 4.1.5 基于注解的控制器配置 用法 $ git clone ...

    liferay ,ext基本配置方法.txt

    ### Liferay EXT 基本配置方法 #### 一、EXT 模式配置步骤 **第一步:源码压缩包解压** 1. **解压指定目录:** 首先,将下载到的 Liferay 源码压缩包解压到指定的目录下。 - 这一步主要是为了准备环境,确保...

Global site tag (gtag.js) - Google Analytics