I've a component with session scope, i.e.:
@Scope(ScopeType.SESSION)
| @Name("myComponent")
| public class MyComponent {
| ...
| }
|
An this other component, with a remote method and a dependency to the above component:
@Name("someAction")
| public class MyAction {
|
|
| @WebRemote
| public void doSomethingWithMyComponent() {
| ...
| myComponent.doSomething();
| ..
| }
|
| @In(required = false)
| MyComponent myComponent;
|
| ...
| }
|
|
The above is used as follows (remember I'm developing a portlet):
1. At some point in the application flow, "myComponent" is instantiated (and put
in session context).
2. Some page does an ajax request to MyAction.doSomethingWithMyComponent() through seam
remoting.
3. well.... doesn't matter.
The fail comes at step 2, there a NPE is thrown, and the cause is myComponent is not
injected! Well, really it is injected, but there happens to be no "myComponent"
in session scope, so the component created in step 1 is not the one injected (I get a null
due to @In(required = false)).
I've found that web remote seam components are invoked through the same url used for
static resources (in JSR-168 perspective), which is correct, because neither a render url
nor an action url would work alright since the portlet response (ajax requests's xml
response) would be composed with other portlets' markup.
(now I think, the encodeUrl method shouldn't be used to build the ajax request url?)
The problem, I think, is that resource URLs are outside the portlet context, therefore the
Portlet Session context is not available. Instead, what we've got is the HttpSession.
The component named "myComponent" can not be found in the HttpSession.
As JSR-168 states (PLT.15.4), the Portlet Session stores attributes in the HttpSession,
but prefixed, that's why seam can't find it.
are there any plans to provide better support for remoting in a portal?
There seems to be two possibilities:
1. Wait for jboss portal ajax requests support, and integrate seam with it. See
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=90035&am...
2. Manage to recover the components when stored in prefixed HttpSession attributes.
(through PortletSessionUtil). In this case, something should tell seam that the component
was stored in X Portlet Session.
Thank you.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3971299#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...