As for the portlet, in order to have a portlet share in the portal's JTA transaction, you can add the following to your jboss-portlet.xml:
<portlet-app> <portlet> <portlet-name>YourPortlet</portlet-name> <transaction> <trans-attribute>Required</trans-attribute> </transaction> </portlet> </portlet-app>
Depending on your usage scenario, there are a lot of ways to create hibernate sessions from a servlet. For example, Spring utilizes a servlet filter to bind a Hibernate Session to the thread servicing your request. Though, I'm not sure this is what you want/need to do.
I'd be interested to know more about the kind of code you're trying to use in the AJAX servlet and the errors you're seeing.
thanks for the help but i already included this code in the jboss-portlet.xml.
There is no problem with "classic" http requests, hibernate sessions are created on requests to a jsf bean method issued from a h!commandButton for example.
But the portal'jta transaction is not created when ajax requests are issued from richfaces components like a4j:commandButton.
The missing hibernate session is the one used by portal's UserModul to access portal tables such as jbp_user for example.
I don't think i can, or i have to create this session, it should be created by the interceptors i think.
Maybe i should have a look to this configuration
Understood. The "classic" http requests you're referring to would be PortletRequests, no? The difference being that your PortletRequests are routed through the PortletContainer's command stack where your ajax requests are handled by the servlet engine, so it would make sense that the servlet doesn't have access to the portal JTA transaction.
Sounds exactly like: http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4138238#4138238
Thanks for your help, this is exactly what i was looking for : a way to access the portal identity hibernate session.
But actually it partially solves my problem ...
Calling methods on UserModule inside ajaxRequest is now ok.
BUT, as JBossPortal hibernate configuration defines lazy loaded objetcs and properties, i have lazyInitialization issues now.
I have setup Spring to create a new transaction on each request to my managed bean.
It solved the main problem but i now have these lazyInitialization issues.
Maybe beacause objects are create in one hibernate session, and the lazy loading takes place in another one.
So the best solution would be to have the session created before spring,
but i don't know where in the portal configuration is specified the transaction management....
The problem is that "classic" http requests go through a PortalServlet, then through TransactionInterceptor where is created the hibernate session/transaction.
Ajax request don't go the same way, these requests are directly redirected to the JSF FacesServlet.
So no TransactionInterception is involved and no hibernate session created ...