[JBoss Seam] - Debug.seam page, the Business process context and data bindi
by harpritt
Hi
The following class aims starts a conversation that goes on to start a business process,
Im trying to bind the crId String to the Business process that is created on SubmitTicket().... to test that this is happening i am using the debug.seam page while on a page within the business process.
in the Debug.seam page.....Ive noticed that the Business Process Context is empty no reference to the String nor the business process.. is this correct?
Many thanks
Extra information.... the reason im bind the crID to the BP is so that i can use it later to load the related changeRequest oject from hibernate using the @Create annotation......
|
| @Stateful
| @Name("createChangeRequest")
| public class CreateChangeRequestAction implements CreateChangeRequest {
|
| //@In(required = false)
| //@Out(scope = BUSINESS_PROCESS, required = false)
| //ChangeRequest changerequest;
|
|
| @In(required = false)
| @Out(scope = BUSINESS_PROCESS, required = false)
| String crId;
|
| @In(required = false)
| GsmsMetaData gsmsMetaData;
|
| @In(required = false)
| NewGSMSData newGsmsData;
|
| @In(required = false)
| RequestState requestState;
|
| @In(required = false)
| RequestReference requestReference;
|
| @In
| Login login;
|
|
| @Begin
| public String newTicket() {
| if (changerequest.getCrAction().equals("EDIT")) {
| return "editdoc";
| }
| if (changerequest.getCrAction().equals("NEW")) {
| return "newdoc";
| }
| if (changerequest.getCrAction().equals("MOVE")) {
| return "movedoc";
| }
| if (changerequest.getCrAction().equals("DELETE")) {
| return "deletedoc";
| }
| if (changerequest.getCrAction().equals("OTHER")) {
| return "other";
| }
| //throw exception
| return "home";
| }
|
| @End
| @CreateProcess(definition = "changerequestprocess")
| public String submitTicket() {
|
|
| changerequest.setCrEditor(login.getUser().getUsername());
|
| getChangeRequestDAO().saveCr(changerequest);
|
| crId = "Dude";
| return "home";
|
| }
|
|
|
|
| @Remove
| @Destroy
| public void destroy() {
| }
|
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064757#4064757
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4064757
18Â years, 12Â months
[JBoss Seam] - Recommended way of using Select boxes - The Seam Way
by smithbstl
I am attempting to load a SelectOneMenu with a list of entities. I then want to use the selection in a query to get another entity. Seems like a simple use case so far.
Should I be using the entity from SelectOneMany or just its id field to filter the query?
I am getting a bunch of weird TransientObjectExceptions when my page loads/reloads.
Here is an example of what I am doing
I have a SelectOneMenu with a list of LandmarkType entities (filled from entity-query "allLandmarkTypes") that have a one to many relationship with Landmark entity. I wish to fill a list of Landmarks based on my LandmarkType selection
<h:outputLabel id="landmarkType_label" for="landmarkType_id"
| value="#{messages['AddressLookup.landmarkType']}"/>
| <a4j:region selfRendered="true">
| <h:selectOneMenu id="landmarkType_id"
| value="#{landmarkType}">
| <s:selectItems label="#{landType.landmarkTypeDescription}"
| value="#{allLandmarkTypes.resultList}"
| noSelectionLabel="(None)" var="landType"/>
| <s:convertEntity/>
| <a4j:support event="onchange"
| actionListener="#{addressLocator.fillLandmarkList}"
| ajaxSingle="true" reRender="landmark_input"/>
| </h:selectOneMenu>
| </a4j:region>
| <h:outputLabel id="landmark_label" for="landmark_id"
| value="#{messages['AddressLookup.landmark']}"/>
| <h:selectOneMenu id="landmark_input" value="#{landmark}">
| <s:selectItems label="#{land.landmarkName}"
| value="#{landmarkList}"
| noSelectionLabel="(None)" var="land"/>
| <s:convertEntity/>
| </h:selectOneMenu>
| @Stateful
| @Name("addressLocator")
| public class AddressLocatorAction implements AddressLocator {
|
| @In(required=false)
| private LandmarkType landmarkType;
|
| @Out(required=false)
| List<Landmark> landmarkList;
|
| @Factory("landmarkList")
| public void fillLandmarkList() {
|
| landmarkList = entityManager.createQuery("SELECT l from Landmark l WHERE l.landmarkType = :landmarkType" +
| " OR :landmarkType IS NULL ORDER BY l.landmarkName").setParameter("landmarkType",landmarkType).getResultList();
|
| }
| ....
|
So my question is, should I be dealing with the LandmarkType entity directly or should I just use its Id to filter the Landmark List. I am concerned about the state of the LandmarkType entity. What is the recommended way of dealing with this seemingly simple use case?
When I load the page I get the following error.
SEVERE: Error Rendering View[/addresslookup.xhtml]
| javax.ejb.EJBTransactionRolledbackException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.stlouiscity.csb.ejb.model.LandmarkType
| at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87)
| at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130)
| at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:83)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
| at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.stateful.StatefulContainer.localInvoke(StatefulContainer.java:204)
| at org.jboss.ejb3.stateful.StatefulLocalProxy.invoke(StatefulLocalProxy.java:100)
| at $Proxy174.fillLandmarkList(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:585)
| at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
| at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
| at org.jboss.seam.intercept.ClientSideInterceptor$1.proceed(ClientSideInterceptor.java:72)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:57)
| at org.jboss.seam.interceptors.RemoveInterceptor.aroundInvoke(RemoveInterceptor.java:40)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
| at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103)
| at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:50)
| at org.javassist.tmp.java.lang.Object_$$_javassist_91.fillLandmarkList(Object_$$_javassist_91.java)
| 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:585)
| at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
| at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:124)
| at org.jboss.seam.Component.callComponentMethod(Component.java:1904)
| at org.jboss.seam.Component.getInstanceFromFactory(Component.java:1766)
| at org.jboss.seam.Component.getInstance(Component.java:1703)
| at org.jboss.seam.Component.getInstance(Component.java:1680)
| at org.jboss.seam.Component.getInstance(Component.java:1674)
| at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:57)
| at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
| at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
| at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
| at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
| at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
| at javax.faces.component.UISelectItems.getValue(UISelectItems.java:130)
| at org.jboss.seam.ui.UISelectItems.getValue(UISelectItems.java:170)
| at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:323)
| at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:675)
| at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:793)
| at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
| at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:833)
| at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
| at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
| at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
| at org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:282)
| at org.ajax4jsf.framework.renderer.RendererBase.renderChildren(RendererBase.java:262)
| at org.richfaces.renderkit.TabRendererBase.encodeChildren(TabRendererBase.java:113)
| at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
| at org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:282)
| at org.ajax4jsf.framework.renderer.RendererBase.renderChildren(RendererBase.java:262)
| at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:272)
| at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:267)
| at org.ajax4jsf.framework.renderer.RendererBase.encodeChildren(RendererBase.java:121)
| at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
| at org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:282)
| at org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:159)
| at org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:97)
| at org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:150)
| at org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:97)
| at org.ajax4jsf.framework.renderer.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:150)
| at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:125)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:549)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot$4.invokeRoot(AjaxViewRoot.java:380)
| at org.ajax4jsf.framework.ajax.JsfOneOneInvoker.invokeOnRegionOrRoot(JsfOneOneInvoker.java:53)
| at org.ajax4jsf.framework.ajax.AjaxContext.invokeOnRegionOrRoot(AjaxContext.java:191)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:397)
| at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
| at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:571)
| at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
| at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)
| at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
| at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
| at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:70)
| at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:64)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:56)
| at org.jboss.seam.web.ExceptionF
| 2007-07-16 16:36:44,743 ERROR [STDERR] ilter.doFilter(ExceptionFilter.java:60)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:56)
| at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:81)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:56)
| at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:47)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:56)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
| at org.jboss.seam.web.AbstractAjax4jsfFilter.doFilter(AbstractAjax4jsfFilter.java:35)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:56)
| at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:127)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| 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:230)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
| at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Thread.java:595)
| Caused by: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.stlouiscity.csb.ejb.model.LandmarkType
| at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:626)
| at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73)
| at com.stlouiscity.csb.ejb.action.AddressLocatorAction.fillLandmarkList(AddressLocatorAction.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:585)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
| at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
| at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:37)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:57)
| at org.jboss.seam.interceptors.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:47)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
| at org.jboss.seam.interceptors.ManagedEntityIdentityInterceptor.aroundInvoke(ManagedEntityIdentityInterceptor.java:37)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
| at org.jboss.seam.interceptors.BusinessProcessInterceptor.aroundInvoke(BusinessProcessInterceptor.java:50)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
| at org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27)
| at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
| at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103)
| at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:53)
| 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:585)
| at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
| at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
| ... 121 more
| Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.stlouiscity.csb.ejb.model.LandmarkType
| at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
| at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
| at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
| at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
| at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
| at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
| at org.hibernate.loader.Loader.doQuery(Loader.java:673)
| at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
| at org.hibernate.loader.Loader.doList(Loader.java:2220)
| at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
| at org.hibernate.loader.Loader.list(Loader.java:2099)
| at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
| at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
| at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
| at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
| at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
| at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64)
| ... 154 more
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064755#4064755
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4064755
18Â years, 12Â months
[EJB 3.0] - Problem with Threads and Transactional context
by zerok
Hi guys!
I've done the same post on Seam's, because I thought that would be a good place to put the question together with others posts with similar problem. As it is indeed an EJB3 related problem, I make the same post here too. So please don't be mad with me because this problem is taking away my sleep and may cost my job.
Here is the post:
---------------------
I'm using threads inside a stateless bean and I cannot persist anything without having that annoying message that states I can only use transaction manager inside a transactional context.
I've tried to make a busy-wait on my stateless bean so I can assure my bean will be alive until the very moment my thread needs the entityManager but when the execution reaches the entityManeger.merge( object ) an exception is risen.
The story:
I have a jboss-4.0.5.GA with an upgrade on my original Javassist. Now I have javassist-3.4 due to issues with threads.
My application needs to perform a fork in execution flow split in three parts. Both of them are created as threads and are observed in normal-fashion-way observer pattern, where the Stateless Bean is the observer.
I have a hunch that my bean life-cycle ends before my first thread finishes, so the entityManager looses it transactional context.
Can anybody point a blueprint for creating a structure to support such a business demand?
Here some parts of my code so you can place yourself. This code comes with only one thread. The original one has three, all like this one.
@TransactionManagement(TransactionManagementType.CONTAINER)
public @Stateless(name = "TempoRealRN") class TempoRealRNBean extends IntegratorCommonBehavior implements TempoRealRN, Observer {
@EJB(beanName = "GenericoDAO")
GenericoDAO genericoDAO;
@PersistenceContext private EntityManager entityManager;
private static final Log log = LogFactory.getLog(TempoRealRNBean.class);
...
public void processar(CommonController controladorComum) throws IntegratorException {
super.setEntityManager(this.entityManager);
tCorFrente = new ThreadCorFrente(controladorComum, this, log, dto, nomeThreadFrente, grupoFrente);
tCorFrente.addObserver(this);
tCorFrente.start();
}// ends of: public void processar(...) ....
/*
* receives notification from thread state change and executes the proper action to acomplish bussiness rule goals.
*
*/
public void update(Object o) {
//perform some state tests
//then try to persist.
//at this point an exception is risen
this.entityManager.merge( object );
}//ends public void update(Object o)
}//ends class
The exception risen is:
--------------------------
17:01:47,480 ERROR [STDERR] Caused by: javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction
17:01:47,480 ERROR [STDERR] at org.jboss.ejb3.entity.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory.java:150)
17:01:47,480 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:180)
17:01:47,480 ERROR [STDERR] at wm.integrator.negocio.temporeal.impl.TempoRealRNBean.persistirFrente(TempoRealRNBean.java:485)
It would be great if some good soul could enlight me regarding on how to use the proper pattern for observing threads and how I can make this persistence work.
Thank you all just for being patient enough to read this extensive post.
I apologize myself for any English grammar misuse or misspell as English is not my 1st language. I'm from Brazil.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064753#4064753
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4064753
18Â years, 12Â months