You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@deltaspike.apache.org by Stephen More <st...@gmail.com> on 2016/02/01 21:32:32 UTC

migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

I have a MyFaces CODI application that utilizes WindowScoped beans. (
Session per tab - so thankful for that. )

I have been able to create url links that navigate to jsf pages using a
servlet. (
http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
)

protected void service(HttpServletRequest request,HttpServletResponse
response) throws ServletException, IOException
{
javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
request, response );
TabInfo tabInfo = context.getApplication().evaluateExpressionGet( context,
"#{tabInfo}", TabInfo.class );
tabInfo.setImportantInfo( ii );

javax.servlet.RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher( "/detail.jsf" );
dispatcher.forward( request, response );
}

Everything has been working flawlessly.

When I try to achieve the exact same feature using DeltaSpike, tabInfo will
come back null.

When I try:
        TabInfo tabInfo = (TabInfo)application.createValueBinding(
"#{tabInfo}" ).getValue( context );
the following will show up in error logs:
       "org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
active contexts for scope type
org.apache.deltaspike.core.api.scope.WindowScoped"


I appreciate any help you can provide.
-Thanks

Re: migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

Posted by Gerhard Petracek <ge...@gmail.com>.
fyi:
i just pushed a preview to [1].
(in some weeks it will be available at [2].)

[1] contains a new version of IdeaImportServlet which shows something
similar.

regards,
gerhard

[1] http://s.apache.org/rd
[2] https://github.com/CDIatWork/IdeaFork

http://www.irian.at

Your JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache
MyFaces, DeltaSpike and OpenWebBeans



2016-02-02 1:56 GMT+01:00 Stephen More <st...@gmail.com>:

> Thanks, I now have a servlet working as expected.
>
> For anyone else here is some psuedo code:
>
> @Inject
> private org.apache.deltaspike.core.spi.scope.window.WindowContext
> windowContext;
>
> protected void service(HttpServletRequest request,HttpServletResponse
> response) throws ServletException, IOException
> {
> windowContext.activateWindow( "abc123" );
> TabInfo tabInfo =
>
> org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
> "tabInfo", false, TabInfo.class );
> tabInfo.setImportantInfo( ii );
>
> javax.servlet.RequestDispatcher dispatcher =
> getServletContext().getRequestDispatcher( "/detail.jsf?dswid=abc123" );
> dispatcher.forward( request, response );
> }
>
>
> -Thanks again
>
>
> On Mon, Feb 1, 2016 at 6:27 PM, Gerhard Petracek <gp...@apache.org>
> wrote:
>
> > hi stephen,
> >
> > in your special case (= an own servlet) you need to restore the window-id
> > on your own -> use the restored value for WindowContext#activateWindow.
> > (how you can restore it depends on the client-window-strategy you are
> > using.
> > with the default-strategy you can use HttpServletRequest#getParameter and
> > "dswid" as parameter-name.)
> >
> > if the window-id doesn't exist already (= first/initial get-request), you
> > can generate and use any random value.
> > (in this case please also have a look at deltaspike.window-id.max_length
> -
> > see JsfBaseConfig)
> >
> > regards,
> > gerhard
> >
> >
> >
> > 2016-02-01 23:49 GMT+01:00 Stephen More <st...@gmail.com>:
> >
> > > I am not able to get this to work - in my servlet I have tried:
> > >
> > > A.
> > > @Inject
> > > private org.apache.deltaspike.core.spi.scope.window.WindowContext
> > > windowContext;
> > >
> > > windowContext.getCurrentWindowId() is null;
> > >
> > >
> > > B.
> > > org.apache.deltaspike.core.api.provider.DependentProvider dp =
> > > org.apache.deltaspike.core.api.provider.BeanProvider.getDependent(
> > > "tabInfo" );
> > > Object obj = dp.get();
> > > log.info( "Object: " + obj );
> > >
> > > org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
> active
> > > contexts for scope type
> org.apache.deltaspike.core.api.scope.WindowScoped
> > >
> > > C.
> > > TabInfo tabInfo =
> > >
> >
> org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
> > > "tabInfo", false, TabInfo.class );
> > > tabInfo.setImportantInfo( ii );
> > >
> > >
> > > org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
> active
> > > contexts for scope type
> org.apache.deltaspike.core.api.scope.WindowScoped
> > >
> > >
> > >
> > > -- I am running this in Tomcat not a full blown J2EE AS - could that be
> > > the issue ?
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > On Mon, Feb 1, 2016 at 4:04 PM, Gerhard Petracek <gpetracek@apache.org
> >
> > > wrote:
> > >
> > >> hi stephen,
> > >>
> > >> codi restores the window-id once it's needed and ds restores it e.g.
> at
> > >> the beginning of a faces-request.
> > >> ->
> > >> inject and use WindowContext (or use
> BeanProvider#getContextualReference
> > >> or even better in this case BeanProvider#getDependent).
> > >> (WindowContext allows you to manage the window-id manually.)
> > >>
> > >> regards,
> > >> gerhard
> > >>
> > >>
> > >>
> > >> 2016-02-01 21:32 GMT+01:00 Stephen More <st...@gmail.com>:
> > >>
> > >>> I have a MyFaces CODI application that utilizes WindowScoped beans. (
> > >>> Session per tab - so thankful for that. )
> > >>>
> > >>> I have been able to create url links that navigate to jsf pages
> using a
> > >>> servlet. (
> > >>>
> > >>>
> >
> http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
> > >>> )
> > >>>
> > >>> protected void service(HttpServletRequest request,HttpServletResponse
> > >>> response) throws ServletException, IOException
> > >>> {
> > >>> javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
> > >>> request, response );
> > >>> TabInfo tabInfo = context.getApplication().evaluateExpressionGet(
> > >>> context,
> > >>> "#{tabInfo}", TabInfo.class );
> > >>> tabInfo.setImportantInfo( ii );
> > >>>
> > >>> javax.servlet.RequestDispatcher dispatcher =
> > >>> getServletContext().getRequestDispatcher( "/detail.jsf" );
> > >>> dispatcher.forward( request, response );
> > >>> }
> > >>>
> > >>> Everything has been working flawlessly.
> > >>>
> > >>> When I try to achieve the exact same feature using DeltaSpike,
> tabInfo
> > >>> will
> > >>> come back null.
> > >>>
> > >>> When I try:
> > >>>         TabInfo tabInfo = (TabInfo)application.createValueBinding(
> > >>> "#{tabInfo}" ).getValue( context );
> > >>> the following will show up in error logs:
> > >>>        "org.jboss.weld.context.ContextNotActiveException:
> WELD-001303:
> > No
> > >>> active contexts for scope type
> > >>> org.apache.deltaspike.core.api.scope.WindowScoped"
> > >>>
> > >>>
> > >>> I appreciate any help you can provide.
> > >>> -Thanks
> > >>>
> > >>
> > >>
> > >
> >
>

Re: migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

Posted by Stephen More <st...@gmail.com>.
Thanks, I now have a servlet working as expected.

For anyone else here is some psuedo code:

@Inject
private org.apache.deltaspike.core.spi.scope.window.WindowContext
windowContext;

protected void service(HttpServletRequest request,HttpServletResponse
response) throws ServletException, IOException
{
windowContext.activateWindow( "abc123" );
TabInfo tabInfo =
org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
"tabInfo", false, TabInfo.class );
tabInfo.setImportantInfo( ii );

javax.servlet.RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher( "/detail.jsf?dswid=abc123" );
dispatcher.forward( request, response );
}


-Thanks again


On Mon, Feb 1, 2016 at 6:27 PM, Gerhard Petracek <gp...@apache.org>
wrote:

> hi stephen,
>
> in your special case (= an own servlet) you need to restore the window-id
> on your own -> use the restored value for WindowContext#activateWindow.
> (how you can restore it depends on the client-window-strategy you are
> using.
> with the default-strategy you can use HttpServletRequest#getParameter and
> "dswid" as parameter-name.)
>
> if the window-id doesn't exist already (= first/initial get-request), you
> can generate and use any random value.
> (in this case please also have a look at deltaspike.window-id.max_length -
> see JsfBaseConfig)
>
> regards,
> gerhard
>
>
>
> 2016-02-01 23:49 GMT+01:00 Stephen More <st...@gmail.com>:
>
> > I am not able to get this to work - in my servlet I have tried:
> >
> > A.
> > @Inject
> > private org.apache.deltaspike.core.spi.scope.window.WindowContext
> > windowContext;
> >
> > windowContext.getCurrentWindowId() is null;
> >
> >
> > B.
> > org.apache.deltaspike.core.api.provider.DependentProvider dp =
> > org.apache.deltaspike.core.api.provider.BeanProvider.getDependent(
> > "tabInfo" );
> > Object obj = dp.get();
> > log.info( "Object: " + obj );
> >
> > org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
> > contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped
> >
> > C.
> > TabInfo tabInfo =
> >
> org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
> > "tabInfo", false, TabInfo.class );
> > tabInfo.setImportantInfo( ii );
> >
> >
> > org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
> > contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped
> >
> >
> >
> > -- I am running this in Tomcat not a full blown J2EE AS - could that be
> > the issue ?
> >
> >
> >
> >
> >
> >
> >
> >
> > On Mon, Feb 1, 2016 at 4:04 PM, Gerhard Petracek <gp...@apache.org>
> > wrote:
> >
> >> hi stephen,
> >>
> >> codi restores the window-id once it's needed and ds restores it e.g. at
> >> the beginning of a faces-request.
> >> ->
> >> inject and use WindowContext (or use BeanProvider#getContextualReference
> >> or even better in this case BeanProvider#getDependent).
> >> (WindowContext allows you to manage the window-id manually.)
> >>
> >> regards,
> >> gerhard
> >>
> >>
> >>
> >> 2016-02-01 21:32 GMT+01:00 Stephen More <st...@gmail.com>:
> >>
> >>> I have a MyFaces CODI application that utilizes WindowScoped beans. (
> >>> Session per tab - so thankful for that. )
> >>>
> >>> I have been able to create url links that navigate to jsf pages using a
> >>> servlet. (
> >>>
> >>>
> http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
> >>> )
> >>>
> >>> protected void service(HttpServletRequest request,HttpServletResponse
> >>> response) throws ServletException, IOException
> >>> {
> >>> javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
> >>> request, response );
> >>> TabInfo tabInfo = context.getApplication().evaluateExpressionGet(
> >>> context,
> >>> "#{tabInfo}", TabInfo.class );
> >>> tabInfo.setImportantInfo( ii );
> >>>
> >>> javax.servlet.RequestDispatcher dispatcher =
> >>> getServletContext().getRequestDispatcher( "/detail.jsf" );
> >>> dispatcher.forward( request, response );
> >>> }
> >>>
> >>> Everything has been working flawlessly.
> >>>
> >>> When I try to achieve the exact same feature using DeltaSpike, tabInfo
> >>> will
> >>> come back null.
> >>>
> >>> When I try:
> >>>         TabInfo tabInfo = (TabInfo)application.createValueBinding(
> >>> "#{tabInfo}" ).getValue( context );
> >>> the following will show up in error logs:
> >>>        "org.jboss.weld.context.ContextNotActiveException: WELD-001303:
> No
> >>> active contexts for scope type
> >>> org.apache.deltaspike.core.api.scope.WindowScoped"
> >>>
> >>>
> >>> I appreciate any help you can provide.
> >>> -Thanks
> >>>
> >>
> >>
> >
>

Re: migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

Posted by Gerhard Petracek <gp...@apache.org>.
hi stephen,

in your special case (= an own servlet) you need to restore the window-id
on your own -> use the restored value for WindowContext#activateWindow.
(how you can restore it depends on the client-window-strategy you are using.
with the default-strategy you can use HttpServletRequest#getParameter and
"dswid" as parameter-name.)

if the window-id doesn't exist already (= first/initial get-request), you
can generate and use any random value.
(in this case please also have a look at deltaspike.window-id.max_length -
see JsfBaseConfig)

regards,
gerhard



2016-02-01 23:49 GMT+01:00 Stephen More <st...@gmail.com>:

> I am not able to get this to work - in my servlet I have tried:
>
> A.
> @Inject
> private org.apache.deltaspike.core.spi.scope.window.WindowContext
> windowContext;
>
> windowContext.getCurrentWindowId() is null;
>
>
> B.
> org.apache.deltaspike.core.api.provider.DependentProvider dp =
> org.apache.deltaspike.core.api.provider.BeanProvider.getDependent(
> "tabInfo" );
> Object obj = dp.get();
> log.info( "Object: " + obj );
>
> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
> contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped
>
> C.
> TabInfo tabInfo =
> org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
> "tabInfo", false, TabInfo.class );
> tabInfo.setImportantInfo( ii );
>
>
> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
> contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped
>
>
>
> -- I am running this in Tomcat not a full blown J2EE AS - could that be
> the issue ?
>
>
>
>
>
>
>
>
> On Mon, Feb 1, 2016 at 4:04 PM, Gerhard Petracek <gp...@apache.org>
> wrote:
>
>> hi stephen,
>>
>> codi restores the window-id once it's needed and ds restores it e.g. at
>> the beginning of a faces-request.
>> ->
>> inject and use WindowContext (or use BeanProvider#getContextualReference
>> or even better in this case BeanProvider#getDependent).
>> (WindowContext allows you to manage the window-id manually.)
>>
>> regards,
>> gerhard
>>
>>
>>
>> 2016-02-01 21:32 GMT+01:00 Stephen More <st...@gmail.com>:
>>
>>> I have a MyFaces CODI application that utilizes WindowScoped beans. (
>>> Session per tab - so thankful for that. )
>>>
>>> I have been able to create url links that navigate to jsf pages using a
>>> servlet. (
>>>
>>> http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
>>> )
>>>
>>> protected void service(HttpServletRequest request,HttpServletResponse
>>> response) throws ServletException, IOException
>>> {
>>> javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
>>> request, response );
>>> TabInfo tabInfo = context.getApplication().evaluateExpressionGet(
>>> context,
>>> "#{tabInfo}", TabInfo.class );
>>> tabInfo.setImportantInfo( ii );
>>>
>>> javax.servlet.RequestDispatcher dispatcher =
>>> getServletContext().getRequestDispatcher( "/detail.jsf" );
>>> dispatcher.forward( request, response );
>>> }
>>>
>>> Everything has been working flawlessly.
>>>
>>> When I try to achieve the exact same feature using DeltaSpike, tabInfo
>>> will
>>> come back null.
>>>
>>> When I try:
>>>         TabInfo tabInfo = (TabInfo)application.createValueBinding(
>>> "#{tabInfo}" ).getValue( context );
>>> the following will show up in error logs:
>>>        "org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
>>> active contexts for scope type
>>> org.apache.deltaspike.core.api.scope.WindowScoped"
>>>
>>>
>>> I appreciate any help you can provide.
>>> -Thanks
>>>
>>
>>
>

Re: migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

Posted by Stephen More <st...@gmail.com>.
I am not able to get this to work - in my servlet I have tried:

A.
@Inject
private org.apache.deltaspike.core.spi.scope.window.WindowContext
windowContext;

windowContext.getCurrentWindowId() is null;


B.
org.apache.deltaspike.core.api.provider.DependentProvider dp =
org.apache.deltaspike.core.api.provider.BeanProvider.getDependent(
"tabInfo" );
Object obj = dp.get();
log.info( "Object: " + obj );

org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

C.
TabInfo tabInfo =
org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(
"tabInfo", false, TabInfo.class );
tabInfo.setImportantInfo( ii );


org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped



-- I am running this in Tomcat not a full blown J2EE AS - could that be the
issue ?








On Mon, Feb 1, 2016 at 4:04 PM, Gerhard Petracek <gp...@apache.org>
wrote:

> hi stephen,
>
> codi restores the window-id once it's needed and ds restores it e.g. at
> the beginning of a faces-request.
> ->
> inject and use WindowContext (or use BeanProvider#getContextualReference
> or even better in this case BeanProvider#getDependent).
> (WindowContext allows you to manage the window-id manually.)
>
> regards,
> gerhard
>
>
>
> 2016-02-01 21:32 GMT+01:00 Stephen More <st...@gmail.com>:
>
>> I have a MyFaces CODI application that utilizes WindowScoped beans. (
>> Session per tab - so thankful for that. )
>>
>> I have been able to create url links that navigate to jsf pages using a
>> servlet. (
>>
>> http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
>> )
>>
>> protected void service(HttpServletRequest request,HttpServletResponse
>> response) throws ServletException, IOException
>> {
>> javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
>> request, response );
>> TabInfo tabInfo = context.getApplication().evaluateExpressionGet( context,
>> "#{tabInfo}", TabInfo.class );
>> tabInfo.setImportantInfo( ii );
>>
>> javax.servlet.RequestDispatcher dispatcher =
>> getServletContext().getRequestDispatcher( "/detail.jsf" );
>> dispatcher.forward( request, response );
>> }
>>
>> Everything has been working flawlessly.
>>
>> When I try to achieve the exact same feature using DeltaSpike, tabInfo
>> will
>> come back null.
>>
>> When I try:
>>         TabInfo tabInfo = (TabInfo)application.createValueBinding(
>> "#{tabInfo}" ).getValue( context );
>> the following will show up in error logs:
>>        "org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
>> active contexts for scope type
>> org.apache.deltaspike.core.api.scope.WindowScoped"
>>
>>
>> I appreciate any help you can provide.
>> -Thanks
>>
>
>

Re: migrate from MyFaces CODI to DeltaSpike == WELD-001303: No active contexts for scope type org.apache.deltaspike.core.api.scope.WindowScoped

Posted by Gerhard Petracek <gp...@apache.org>.
hi stephen,

codi restores the window-id once it's needed and ds restores it e.g. at the
beginning of a faces-request.
->
inject and use WindowContext (or use BeanProvider#getContextualReference or
even better in this case BeanProvider#getDependent).
(WindowContext allows you to manage the window-id manually.)

regards,
gerhard



2016-02-01 21:32 GMT+01:00 Stephen More <st...@gmail.com>:

> I have a MyFaces CODI application that utilizes WindowScoped beans. (
> Session per tab - so thankful for that. )
>
> I have been able to create url links that navigate to jsf pages using a
> servlet. (
>
> http://balusc.omnifaces.org/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter
> )
>
> protected void service(HttpServletRequest request,HttpServletResponse
> response) throws ServletException, IOException
> {
> javax.faces.context.FacesContext context = FacesUtil.getFacesContext(
> request, response );
> TabInfo tabInfo = context.getApplication().evaluateExpressionGet( context,
> "#{tabInfo}", TabInfo.class );
> tabInfo.setImportantInfo( ii );
>
> javax.servlet.RequestDispatcher dispatcher =
> getServletContext().getRequestDispatcher( "/detail.jsf" );
> dispatcher.forward( request, response );
> }
>
> Everything has been working flawlessly.
>
> When I try to achieve the exact same feature using DeltaSpike, tabInfo will
> come back null.
>
> When I try:
>         TabInfo tabInfo = (TabInfo)application.createValueBinding(
> "#{tabInfo}" ).getValue( context );
> the following will show up in error logs:
>        "org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
> active contexts for scope type
> org.apache.deltaspike.core.api.scope.WindowScoped"
>
>
> I appreciate any help you can provide.
> -Thanks
>