Did you see the latest e-mail/comment on the thread with the subject
line: "Re: [Trinidad] java.lang.IllegalStateException: Factory already
available for this class loader"? Sounds plausible that the lack of
synchronization is causing this problem. You can either wait to hear
from the Trinidad guys/and hopefully get a patch/fix or try patching the
Trinidad code yourself and rebuilding. Let me know me know what you
think. By the way it seems a little strange the portal is sending two
(simulanteous) requests. Yes portlet 2.0 can have a 2 request render
(one to get the headers) and one to get the body -- so maybe its that.
But you are using portlet 1.0 (bridge)/portlet 1.0 container. I wonder
if uPortal has a bug where the portal itself knows about portlet 2.0
but isn't smart enough to detect the container is 1.0 so sends the
double render request (one to get the headers and the other to get the
body) as they only differ from a request perspective by a flag in the
request? Anyway if this is the problem and you were running in a
portlet 2.0 container you could check for this flag in a subclass of the
GenericFacesPortlet and when set to Header merely return without
delegating to the bridge. But since you are running in a 1.0 container
I have no clue.
-Mike-
On 8/30/2010 8:39 AM, Yves Deschamps wrote:
It means "Factory already available for this class loader"
Thanks...
Scott O'Bryan a écrit :
Yay.. Exception translation at work. Yves, can you tell us what that
message states in English? Sorry, half the characters didn't come
through.
Sent from my iPhone
On Aug 30, 2010, at 6:50 AM, Yves Deschamps
<yves.descha...@univ-lille1.fr> wrote:
Hi Michael,
I just come back from holidays.
I try my app with this environment:
trinidad 1.2.15-SNAPSHOT (30/08/2010)
portlet-bridge 1.0.0 (distribution)
myfaces 1.2.9 (distribution)
portlet-api-1.0
pluto... 1.1.7
uPortal-3.2.1
The result is :
Caused by: java.lang.IllegalStateException: Factory d�j�
disponible pour ce chargeur de classe.
at
org.apache.myfaces.trinidad.context.RequestContextFactory.setFactory(RequestContextFactory.java:54)
at
org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.init(GlobalConfiguratorImpl.java:391)
at
org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.beginRequest(GlobalConfiguratorImpl.java:211)
at
org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.getExternalContext(GlobalConfiguratorImpl.java:334)
at
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl$CacheRenderKit.<init>(FacesContextFactoryImpl.java:86)
at
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:64)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.getFacesContext(BridgeImpl.java:943)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:513)
And when the portlet is refreshed, all is ok !
I see this recent message in the list: "[Trinidad]
java.lang.IllegalStateException: Factory already available for this
class loader", I think that the portal make a double request to the
portlet ?
May be can you test my app in your environment with this zip file :
https://bigfile.univ-lille1.fr/get?k=QxI6pCDOMWM12k0bTdJ
Thank you in advance.
Michael Freedman a �crit :
This feels more environmental than anything else. Is this still
just the situation when accessing from an iPhone "user-agent"? The
regular user-agent still works fine? Can you send me a complete
description of your environment? I.e. Specific Trinidad version,
Faces make (Mojarra or Myfaces?) and version, appserver version
which includes portlet container make (pluto ???) and version?
What has me stumped here is that the line you indicate is throwing
the null pointer exception:
switch ((Bridge.PortletPhase)
mPortletRequest.getAttribute(Bridge.PORTLET_LIFECYCLE_PHASE))
The instance is constructed with the requestObject which is passed
by the bridge's externalContext which gets it in its constructor --
so unless a release() occurred I don't see how its null. Likewise
the bridge's doFacesRender (further down the stack) has already set
the request attribute we are looking for here -- which means it
should be around unless a spurious release occurred. We have
encountered problems releasing attributes in some servers which the
portal server/container is treating specially because of their
prefix like javax.* -- but I haven't seen any issues in
setting/retrieving. So first thing we need to do is figure out
what is causing the NPE. Is the request in fact null here? Or the
attribute not there? (My bet is on the later). And if the later,
why it isn't there as its clearly been set. Are you able to do some
debugging to answer some of these questions? If not let me know as
i can build you one-of bridge jars that will write extra info to
the logs to get us the info -- it will just take a much longer time
as we get each new piece of information we will have to dig
deeper/send a new jar (and I only work Tues-Thurs).
Another idea is to try a different environment. Maybe try running
this is in the Tomcat/Pluto environment and see if the behavior is
the same or not. That will at least rule out the app server (and
portlet container -- though if I recall its Pluto anyway).
FYI ... The bridge does work with Trinidad as its used heavily here
at Oracle and I also do random testing on my own .... however
everyone's situation is different so it likely not bug free ...
just want you to know you aren't the first.
-Mike-
On 7/12/2010 1:51 AM, Yves Deschamps wrote:
Thank you Michael,
I change little things and now, i have this NPE:
Caused by: java.lang.NullPointerException
at
org.apache.myfaces.portlet.faces.util.map.PortletRequestHeaders.initHeaderMap(PortletRequestHeaders.java:109)
at
org.apache.myfaces.portlet.faces.util.map.PortletRequestHeaders.getHeader(PortletRequestHeaders.java:48)
at
org.apache.myfaces.portlet.faces.util.map.PortletRequestHeaderMap.getAttribute(PortletRequestHeaderMap.java:38)
at
org.apache.myfaces.portlet.faces.util.map.PortletRequestHeaderMap.getAttribute(PortletRequestHeaderMap.java:26)
at
org.apache.myfaces.portlet.faces.util.map.PortletAbstractMap.get(PortletAbstractMap.java:88)
at
org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit.isAjaxRequest(CoreRenderKit.java:148)
at
org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit.isPartialRequest(CoreRenderKit.java:163)
at
org.apache.myfaces.trinidadinternal.config.xmlHttp.XmlHttpConfigurator.getExternalContext(XmlHttpConfigurator.java:61)
at
org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.getExternalContext(GlobalConfiguratorImpl.java:353)
at
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl$CacheRenderKit.<init>(FacesContextFactoryImpl.java:86)
at
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:64)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.getFacesContext(BridgeImpl.java:943)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:513)
So:
1) the portletBridge needs a FacesContext from trinidad...
2) trinidad needs an element from external context:
static public boolean isAjaxRequest(ExternalContext ec)
{
return
"true".equals(ec.getRequestHeaderMap().get(_PPR_REQUEST_HEADER));
}
3) the portletBridge fails to return this boolean:
// can't assume portlet container overrides these headers to
reflect portlet constraints -- so do so
ensurePortletAcceptHeader();
ensurePortletAcceptLanguage();
switch ((Bridge.PortletPhase)
mPortletRequest.getAttribute(Bridge.PORTLET_LIFECYCLE_PHASE))
-----------------------
May be, have I missed something in config files ?
I think there is something wrong between "trinidad" and
"portletBridge"...
Michael Freedman a �crit :
Looks like its failing in this line in Trinidad:
org.apache.myfaces.trinidadinternal.renderkit.RenderKitDecorator.getRenderKit(RenderKitDecorator.java:119)
ConcurrentMap<String, Object> appMap =
RequestContext.getCurrentInstance().getApplicationScopedConcurrentMap();
Which means, I assume, that RequestContext.getCurrentInstance()
is returning null. I don't have any idea why this might happen
in a portlet/iPhone environment but maybe you can psuh on the
Trinidad folks to help or maybe this gives you an idea on
where/how to investigate.
-Mike-
On 7/7/2010 12:34 AM, Yves Deschamps wrote:
Thank you Michael,
May be it is a track...
My portlet is written in JSF 1.2 with Trinidad.
When I am in "Default" User Agent, no problem.
When I am in "iPhone" User Agent, the portlet don't start fine.
I see tht in logs :
org.jasig.portal.channels.portlet.PortletDispatchException:
Exception executing portlet RenderRequest: [channelPublishId=84,
channelSubscribeId=n381, portletApplicationId=/esup-news-mobile,
portletName=EsupNewsMobilePortlet, user=admin]
at
org.jasig.portal.channels.portlet.SpringPortletChannelImpl.render(SpringPortletChannelImpl.java:380)
at
org.jasig.portal.channels.portlet.CSpringPortletAdaptor.renderCharacters(CSpringPortletAdaptor.java:217)
at
org.jasig.portal.ChannelRenderer$Worker.execute(ChannelRenderer.java:631)
at
org.jasig.portal.utils.threading.BaseTask.run(BaseTask.java:41)
at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
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:307)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.orm.jpa.JpaInterceptor.invoke(JpaInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at org.jasig.portal.$Proxy106.run(Unknown Source)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by:
org.jasig.portal.channels.portlet.PortletDispatchException: The
portlet window
'PortletWindowImpl[portletWindowId=118.n381,contextPath=/esup-news-mobile,portletName=EsupNewsMobilePortlet,windowState=maximized,portletMode=view,expirationCache=<null>,requestParameters={},delegationParent=<null>]'
threw an exception while executing render.
at
org.jasig.portal.portlet.rendering.PortletRendererImpl.doRender(PortletRendererImpl.java:236)
at
org.jasig.portal.channels.portlet.SpringPortletChannelImpl.render(SpringPortletChannelImpl.java:376)
... 19 more
Caused by: javax.portlet.PortletException: doBridgeDispatch
failed: error from Bridge in executing the request
at
javax.portlet.faces.GenericFacesPortlet.doBridgeDispatch(GenericFacesPortlet.java:509)
at
javax.portlet.faces.GenericFacesPortlet.doRenderDispatchInternal(GenericFacesPortlet.java:461)
at
javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:231)
at
javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:247)
at
javax.portlet.faces.GenericFacesPortlet.doDispatch(GenericFacesPortlet.java:202)
at javax.portlet.GenericPortlet.render(GenericPortlet.java:175)
at
org.apache.pluto.core.PortletServlet.dispatch(PortletServlet.java:208)
at
org.apache.pluto.core.PortletServlet.doGet(PortletServlet.java:139)
Caused by: javax.portlet.faces.BridgeException:
java.lang.NullPointerException
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRender(BridgeImpl.java:643)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:545)
at
javax.portlet.faces.GenericFacesPortlet.doBridgeDispatch(GenericFacesPortlet.java:506)
... 38 more
Caused by: java.lang.NullPointerException
at
org.apache.myfaces.trinidadinternal.renderkit.RenderKitDecorator.getRenderKit(RenderKitDecorator.java:119)
at
org.apache.myfaces.trinidadinternal.renderkit.RenderKitDecorator.getResponseStateManager(RenderKitDecorator.java:70)
at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.getResponseStateManager(RendererUtils.java:1184)
at
org.apache.myfaces.lifecycle.DefaultRestoreViewSupport.isPostback(DefaultRestoreViewSupport.java:141)
at
org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:80)
at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRender(BridgeImpl.java:636)
... 40 more
Michael Freedman a �crit :
Hum... This is what I see for line 428
(BridgeImpl.doFacesRequest(BridgeImpl.java:428):
if (request.getPortletSession().getAttribute(key) == null)
As the request object has already been dereferenced before this
line, the only way, that I can see, that this can throw a
NullPointerException is if getPortletSession is returning null
-- however by (Portlet) spec this isn't expected as this call
should automatically create a session if one doesn't exist. And
given that you seem to be running on a version of Pluto (which
in other environments behaves correctly) its a mystery. Sounds
like this one will take a little debugging. Can you either
grab the sources for the version of pluto (and the bridge) and
debug into this and send more information? Or can you package
up the entire environment (portal/appserver, etc) as a zip and
send it to me? If you do this later I need to know the
specific version of pluto being used so I can pull/debug with
the appropriate sources.
-Mike-
On 7/6/2010 5:39 AM, Yves Deschamps wrote:
Hi all,
I have this exception when the portlet start...
An idea ?
GRAVE: "Servlet.service()" pour la servlet esup-news-mobile a
lanc� une exception
java.lang.NullPointerException
at
org.apache.myfaces.portlet.faces.bridge.BridgeImpl.doFacesRequest(BridgeImpl.java:428)
at
javax.portlet.faces.GenericFacesPortlet.doBridgeDispatch(GenericFacesPortlet.java:506)
at
javax.portlet.faces.GenericFacesPortlet.doRenderDispatchInternal(GenericFacesPortlet.java:461)
at
javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:231)
at
javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:247)
at
javax.portlet.faces.GenericFacesPortlet.doDispatch(GenericFacesPortlet.java:202)
at javax.portlet.GenericPortlet.render(GenericPortlet.java:175)
at
org.apache.pluto.core.PortletServlet.dispatch(PortletServlet.java:208)
at
org.apache.pluto.core.PortletServlet.doGet(PortletServlet.java:139)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at
org.apache.pluto.core.DefaultPortletInvokerService.invoke(DefaultPortletInvokerService.java:167)
at
org.apache.pluto.core.DefaultPortletInvokerService.render(DefaultPortletInvokerService.java:101)
at
org.apache.pluto.core.PortletContainerImpl.doRender(PortletContainerImpl.java:172)
at
org.jasig.portal.portlet.rendering.PortletRendererImpl.doRender(PortletRendererImpl.java:232)
at
org.jasig.portal.channels.portlet.SpringPortletChannelImpl.render(SpringPortletChannelImpl.java:376)
at
org.jasig.portal.channels.portlet.CSpringPortletAdaptor.renderCharacters(CSpringPortletAdaptor.java:217)
at
org.jasig.portal.ChannelRenderer$Worker.execute(ChannelRenderer.java:631)
at
org.jasig.portal.utils.threading.BaseTask.run(BaseTask.java:41)
at sun.reflect.GeneratedMethodAccessor171.invoke(Unknown
Source)
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:307)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.orm.jpa.JpaInterceptor.invoke(JpaInterceptor.java:96)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at org.jasig.portal.$Proxy106.run(Unknown Source)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
--
Yves Deschamps
CRI P�le Web, Environnement Num�rique de Travail
B�timent M4
Tel : 03 20 43 41 89
Fax : 03 20 43 66 25