[JBoss Seam] - Re: How to correctly start pageflows
by Delphi's Ghost
The fact that there needs to be two separate ways of defining the start page, and are both mutually exclusive is a bit of a pain. It forces you to choose a method that you will be using to start pageflows (either in the link, or in the @begin annotation) unless you want to start maintaining two separate versions of the pageflow, one with start-state and the other with start-page.
Personally, I never use @Begin annotations, I always start conversations in pages.xml (mostly based on Pete Muirs comments from a year ago). Which is odd because it seems like 99% of Seam users go for the @Begin annotation. I find using pages.xml for conversation management lets you create more RESTful style URLs, and lets you decouple your app a bit more. I also never use things like <s:link action="WidgetBean.editWidget(v_widget)"/> on the basis that it also clutters up the url.
If you need to call methods to edit the widget, there's no way to create a URL the user can enter to edit or view the widget, except maybe writing a wrapper page that they can enter the URL for, which calls editWidget and redirects, but then, how do they get the URL since it never appears to them in the address bar for them to copy/bookmark.
Also, you don't have to use the datamodel and data model selection business since you grab the id once for the URL, and don't need it again letting you introduce a little more statelessness into the app.
I've been meaning to ask for a while why everyone was using @Begin annotations in case there's some mystical magical reason that I wasn't aware of. I know it's nice calling bean methods and passing objects around instead of string IDs, but it just feels wrong to me.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4077435#4077435
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4077435
18Â years, 8Â months
[JBoss Seam] - Using ManagedJbpmContext in TreeNode impls of rich:tree
by fzaker
In my seam application, I have a rich:tree and some TreeNode implementations:
jsf code:
| <rich:tree id="allTasksTree" switchType="ajax" style="width:300px"
| value="#{tasksRootNode}" var="item" nodeFace="#{item.class.name}">
| <rich:treeNode type="org.jbpm.graph.def.ProcessDefinition">
| <h:outputText value="#{item.name}" />
| </rich:treeNode>
| <rich:treeNode type="org.jbpm.taskmgmt.def.Task">
| <h:outputText value="#{item.name}" />
| </rich:treeNode>
| <rich:treeNode type="org.jbpm.taskmgmt.exe.TaskInstance">
| <h:outputText value="#{item.toString}" />
| </rich:treeNode>
| </rich:tree>
|
TasksRootNode:
| @Stateful
| @Name("tasksRootNode")
| public class TasksRootNode implements TreeNode {
| private void InitProcessNodesMap() {
| GraphSession graphSession = ManagedJbpmContext.instance().getGraphSession();
| ...
| }
|
| ...
| }
|
TaskNode:
| @Stateful
| public class TaskNode implements TreeNode {
| ...
| private void InitTaskInstanceNodesMap() {
| GraphSession graphSession = ManagedJbpmContext.instance().getGraphSession();
| ...
| }
|
| ...
| }
|
The call to ManagedJbpmContext in RootTasksNode class is run perfectly with no problem.
But execution of TaskNode.InitTaskInstanceNodesMap raises the following (Adding @Transactional or @Interceptors(...) to TaskNode did not help).
Any idea? I doubt if having TreeNode implementations as SFSB is a good solution. Any idea?
| Hibernate: select processdef0_.ID_ as ID1_14_, processdef0_.NAME_ as NAME2_14_, processdef0_.VERSION_ as VERSION3_14_, processdef0_.ISTERMINATIONIMPLICIT_ as ISTERMIN4_14_, processdef0_.STARTSTATE_ as STARTSTATE5_14_ from JBPM_PROCESSDEFINITION processdef0_ order by processdef0_.NAME_, processdef0_.VERSION_ desc
| 08:07:53,515 ERROR [ExceptionFilter] uncaught exception
| javax.servlet.ServletException: JbpmContext may only be used inside a transaction
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
| at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
| at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
| at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
| at java.lang.Thread.run(Thread.java:595)
| 08:07:53,515 ERROR [ExceptionFilter] exception root cause
| java.lang.IllegalStateException: JbpmContext may only be used inside a transaction
| at org.jboss.seam.core.ManagedJbpmContext.getJbpmContext(ManagedJbpmContext.java:75)
| 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:20)
| at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
| at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
| at org.jboss.seam.Component.unwrap(Component.java:1860)
| at org.jboss.seam.Component.getInstance(Component.java:1657)
| at org.jboss.seam.Component.getInstance(Component.java:1622)
| at org.jboss.seam.Component.getInstance(Component.java:1599)
| at org.jboss.seam.Component.getInstance(Component.java:1594)
| at org.jboss.seam.core.ManagedJbpmContext.instance(ManagedJbpmContext.java:117)
| at org.darkoob.dtm.task.treeNodes.TaskNode.InitTaskInstanceNodesMap(TaskNode.java:71)
| at org.darkoob.dtm.task.treeNodes.TaskNode.getChildren(TaskNode.java:88)
| at org.richfaces.component.TreeDataModel.walk(TreeDataModel.java:79)
| at org.richfaces.component.TreeDataModel.walkModel(TreeDataModel.java:217)
| at org.richfaces.component.CacheableTreeDataModel.walkModel(CacheableTreeDataModel.java:92)
| at org.richfaces.component.UITree.walkModel(UITree.java:299)
| at org.richfaces.component.state.TreeState.visitNodes(TreeState.java:286)
| at org.richfaces.component.state.TreeState.expandNode(TreeState.java:367)
| at org.richfaces.component.state.events.ExpandNodeCommandEvent.execute(ExpandNodeCommandEvent.java:47)
| at org.richfaces.component.state.events.TreeStateCommandEvent.processListener(TreeStateCommandEvent.java:61)
| at org.richfaces.component.UITree.broadcast(UITree.java:449)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)
| at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
| at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
| at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
| at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
| at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
| at java.lang.Thread.run(Thread.java:595)
| 08:07:53,546 ERROR [DebugPageHandler] redirecting to debug page
| java.lang.IllegalStateException: JbpmContext may only be used inside a transaction
| at org.jboss.seam.core.ManagedJbpmContext.getJbpmContext(ManagedJbpmContext.java:75)
| 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:20)
| at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:123)
| at org.jboss.seam.Component.callComponentMethod(Component.java:1834)
| at org.jboss.seam.Component.unwrap(Component.java:1860)
| at org.jboss.seam.Component.getInstance(Component.java:1657)
| at org.jboss.seam.Component.getInstance(Component.java:1622)
| at org.jboss.seam.Component.getInstance(Component.java:1599)
| at org.jboss.seam.Component.getInstance(Component.java:1594)
| at org.jboss.seam.core.ManagedJbpmContext.instance(ManagedJbpmContext.java:117)
| at org.darkoob.dtm.task.treeNodes.TaskNode.InitTaskInstanceNodesMap(TaskNode.java:71)
| at org.darkoob.dtm.task.treeNodes.TaskNode.getChildren(TaskNode.java:88)
| at org.richfaces.component.TreeDataModel.walk(TreeDataModel.java:79)
| at org.richfaces.component.TreeDataModel.walkModel(TreeDataModel.java:217)
| at org.richfaces.component.CacheableTreeDataModel.walkModel(CacheableTreeDataModel.java:92)
| at org.richfaces.component.UITree.walkModel(UITree.java:299)
| at org.richfaces.component.state.TreeState.visitNodes(TreeState.java:286)
| at org.richfaces.component.state.TreeState.expandNode(TreeState.java:367)
| at org.richfaces.component.state.events.ExpandNodeCommandEvent.execute(ExpandNodeCommandEvent.java:47)
| at org.richfaces.component.state.events.TreeStateCommandEvent.processListener(TreeStateCommandEvent.java:61)
| at org.richfaces.component.UITree.broadcast(UITree.java:449)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)
| at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)
| at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
| at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
| at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79)
| at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
| at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
| at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
| at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
| at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
| at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
| at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
| at java.lang.Thread.run(Thread.java:595)
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4077433#4077433
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4077433
18Â years, 8Â months
[JBossCache] - Re: JBossCache 2.0 with JBoss AS 4.2.1 problems
by mohali
Now I am using local-eviction-cacheloader-service.xml from etc/META-INF but getting the same error.
<?xml version="1.0" encoding="UTF-8"?>
|
| <!-- ===================================================================== -->
| <!-- -->
| <!-- Sample TreeCache Service Configuration -->
| <!-- -->
| <!-- ===================================================================== -->
|
| <server>
|
| <!-- ==================================================================== -->
| <!-- Defines TreeCache configuration -->
| <!-- ==================================================================== -->
|
| <mbean code="org.jboss.cache.jmx.CacheJmxWrapper"
| name="jboss.cache:service=TestTreeCache">
|
| <depends>jboss:service=Naming</depends>
| <depends>jboss:service=TransactionManager</depends>
|
| <!--
| Configure the TransactionManager
| -->
| <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.GenericTransactionManagerLookup
| </attribute>
|
|
| <!--
| Node locking level : SERIALIZABLE
| REPEATABLE_READ (default)
| READ_COMMITTED
| READ_UNCOMMITTED
| NONE
| -->
| <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
|
| <!--
| Valid modes are LOCAL
| REPL_ASYNC
| REPL_SYNC
| -->
| <attribute name="CacheMode">LOCAL</attribute>
|
| <!-- Name of cluster. Needs to be the same for all clusters, in order
| to find each other
| -->
| <attribute name="ClusterName">JBossCache-Cluster</attribute>
|
| <!-- JGroups protocol stack properties NOT NEEDED since CacheMode is LOCAL -->
|
| <!--
| The max amount of time (in milliseconds) we wait until the
| state (ie. the contents of the cache) are retrieved from
| existing members in a clustered environment
| -->
| <attribute name="StateRetrievalTimeout">20000</attribute>
|
| <!--
| Number of milliseconds to wait until all responses for a
| synchronous call have been received.
| -->
| <attribute name="SyncReplTimeout">20000</attribute>
|
| <!-- Max number of milliseconds to wait for a lock acquisition -->
| <attribute name="LockAcquisitionTimeout">15000</attribute>
|
|
| <!-- Specific eviction policy configurations. This is LRU -->
| <attribute name="EvictionPolicyConfig">
| <config>
| <attribute name="wakeUpIntervalSeconds">5</attribute>
| <!-- Name of the DEFAULT eviction policy class. -->
| <attribute name="policyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
|
| <!-- Cache wide default -->
| <region name="/_default_">
| <attribute name="maxNodes">5000</attribute>
| <attribute name="timeToLiveSeconds">1000</attribute>
| </region>
| <region name="/org/jboss/data">
| <attribute name="maxNodes">5000</attribute>
| <attribute name="timeToLiveSeconds">1000</attribute>
| </region>
| <region name="/org/jboss/test/data">
| <attribute name="maxNodes">5</attribute>
| <attribute name="timeToLiveSeconds">4</attribute>
| </region>
| <region name="/test">
| <attribute name="maxNodes">10000</attribute>
| <attribute name="timeToLiveSeconds">4</attribute>
| </region>
| <region name="/maxAgeTest">
| <attribute name="maxNodes">10000</attribute>
| <attribute name="timeToLiveSeconds">8</attribute>
| <attribute name="maxAgeSeconds">10</attribute>
| </region>
| </config>
| </attribute>
|
| <!-- New 1.3.x cache loader config block -->
| <attribute name="CacheLoaderConfig">
| <config>
| <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
| <passivation>false</passivation>
| <preload>/</preload>
| <shared>false</shared>
|
| <!-- we can now have multiple cache loaders, which get chained -->
| <cacheloader>
| <class>org.jboss.cache.loader.FileCacheLoader</class>
| <!-- same as the old CacheLoaderConfig attribute -->
| <properties>
| location=/tmp/JBossCacheFileCacheLoader
| </properties>
| <!-- whether the cache loader writes are asynchronous -->
| <async>false</async>
| <!-- only one cache loader in the chain may set fetchPersistentState to true.
| An exception is thrown if more than one cache loader sets this to true. -->
| <fetchPersistentState>true</fetchPersistentState>
| <!-- determines whether this cache loader ignores writes - defaults to false. -->
| <ignoreModifications>false</ignoreModifications>
| </cacheloader>
|
| </config>
| </attribute>
| </mbean>
|
|
| </server>
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4077422#4077422
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4077422
18Â years, 8Â months