Following on from my previous SVG Based BPEL Graphical Monitoring
example I
have extended the sample Visual Web Pack project to include simple BPEL
2.0 Usage Statistics. This addition provides the Business User with an
additional level of information covering overall usage and Minimum,
Maximum and Average processing time. Therefore in addition to providing
Specific
Instance Monitoring using the dynamically generated SVG we can now view
the BAM Style processing statistics for each deployed BPEL Process and
similar for each activity within a selected BPEL Process. These are
presented both in a tabular and graphical format (SVG) for the selected
BPEL Process.
Related Articles
Resources
The currently release of the project (at the time of writing the blog entry) works with the default Java DB Persistence / Monitoring database, although I will extend and update the underly project in the future, but can easily be changed. The reason for the restriction is because of the nature of the SQL that is executed to retrieve the Statistical information. JavaDB / Derby has a specific function format to allow Data Arithmetic and this is what has been used to calculate the Minimum, Maximum and Average times. If the user decided to use another database then the SQL syntax will need to be changed. I fully intend to add the functionality that will allow any of the supported Persistence / Monitoring Databases to be used auto-magically.
The image below displays the result of the Statistics query, although I only have a single BPEL Process deployed, and it can be seen that it simply displays the number of executions and then the Maximum, Minimum and Processing times (in Seconds). Selecting the appropriate Graph Icon will generate the Bar Chart (although again I will extend this) to the right of the table. Once a BPEL Instance Statistic row has been selected the breakdown of its activities can be seen. Again this table will show Count, Maximum, Minimum and Average processing time (in Seconds) and selecting the Graph icon for a particular row will generate and display an SVG Bar Graph. Thus given these statistics we can easily identify which which Process Instances are taking a long time to process and within each of the Instance which Activities are taking a long time.

To add the Statistics functionality to the existing Graphical BPEL Monitor I needed to add a number od additional database queries and I will briefly describe these and how they will need to be changed to allow access to other databases. In addition to these changes you will notice that I have modified the Look and Feel of the page to provide a Tabbed Layout allowing the you to choose to either monitor the processes or statistics.
To provide the Statistical information we will need to create four additional database queries. Two of these will be against the MONITORBPELINSTANCE table and two against the MONITORBPELACTIVITY table.
Instance Statistics Table
The instance statistics table is create by dragging a new copy of the the MONITORBPELINSTANCE table onto a new Table object. The SQL associated with the RowSet was then modified to the following and the the Table modified to match that displayed above.
The chart button can then be added and modified as follows:
Instance Statistics Graph
The statistics graph requires a subtly different SQL, below, because we need to restrict based on the Instance Id and is executed directly from generateInstanceGraphSVG() method.
Activity Statistics Table
The Activity Statistics table can be created by dragging a new copy of the MONITORBPELACTIVITY database table onto a Visual Web Pack Table component. The associated SQL query should be modified as follows :
The chart button can then be added and modified as follows:
Activity Statistics Graph
The statistics graph requires a subtly different SQL, below, because we need to restrict based on the Instance Id and is executed directly from generateActivityGraphSVG() method.
Because we do not want the data to be cached thus causing the SVG images to become stale and not refresh correct I need to modify the Header section of the Page and add a number <META> tags to force the browsers to work as I wished. These can be added using the Meta tag in the Advanced section of the Palette.

Related Articles
- Generating SVG From BPEL 2 Files
- BPEL 2 SVG Update
- BPEL 2 SVG Documentation
- Simple Web Based BPEL 2 SVG Monitor Implementation
Resources
- BPEL2SVGMonitorWebApplication.war - GROK Link
- BPEL2SVGMonitorWebApplication Project
- BPEL2SVGJavaLibrary
- SVGLibrary
Processing Statistics
The currently release of the project (at the time of writing the blog entry) works with the default Java DB Persistence / Monitoring database, although I will extend and update the underly project in the future, but can easily be changed. The reason for the restriction is because of the nature of the SQL that is executed to retrieve the Statistical information. JavaDB / Derby has a specific function format to allow Data Arithmetic and this is what has been used to calculate the Minimum, Maximum and Average times. If the user decided to use another database then the SQL syntax will need to be changed. I fully intend to add the functionality that will allow any of the supported Persistence / Monitoring Databases to be used auto-magically.
The image below displays the result of the Statistics query, although I only have a single BPEL Process deployed, and it can be seen that it simply displays the number of executions and then the Maximum, Minimum and Processing times (in Seconds). Selecting the appropriate Graph Icon will generate the Bar Chart (although again I will extend this) to the right of the table. Once a BPEL Instance Statistic row has been selected the breakdown of its activities can be seen. Again this table will show Count, Maximum, Minimum and Average processing time (in Seconds) and selecting the Graph icon for a particular row will generate and display an SVG Bar Graph. Thus given these statistics we can easily identify which which Process Instances are taking a long time to process and within each of the Instance which Activities are taking a long time.

To add the Statistics functionality to the existing Graphical BPEL Monitor I needed to add a number od additional database queries and I will briefly describe these and how they will need to be changed to allow access to other databases. In addition to these changes you will notice that I have modified the Look and Feel of the page to provide a Tabbed Layout allowing the you to choose to either monitor the processes or statistics.
New Database Queries
To provide the Statistical information we will need to create four additional database queries. Two of these will be against the MONITORBPELINSTANCE table and two against the MONITORBPELACTIVITY table.
| The RowSets associated with
these queries can be quickly created by dragging the database tables
onto the canvas, making sure not to drop them on the TabSet, and within
the displayed dialog selecting the create new RowSet in the SessionBean
and naminging them appropriately. |
Instance Statistics Table
The instance statistics table is create by dragging a new copy of the the MONITORBPELINSTANCE table onto a new Table object. The SQL associated with the RowSet was then modified to the following and the the Table modified to match that displayed above.
| SELECT MONITORBPELINSTANCE.BPELID,
COUNT(MONITORBPELINSTANCE.BPELID) AS INSTANCECOUNT, MAX({fn
TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELINSTANCE.STARTTIME,MONITORBPELINSTANCE.ENDTIME)})
AS MAXPROCESSINGTIME, MIN({fn
TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELINSTANCE.STARTTIME,MONITORBPELINSTANCE.ENDTIME)})
AS MINPROCESSINGTIME, AVG({fn
TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELINSTANCE.STARTTIME,MONITORBPELINSTANCE.ENDTIME)})
AS AVGPROCESSINGTIME FROM MONITORBPELINSTANCE WHERE STATUS='COMPLETED'
GROUP BY MONITORBPELINSTANCE.BPELID |
The chart button can then be added and modified as follows:
| public
String instanceChartBtn_action() { String bpelId = (String) getValue("#{currentRow.value['MONITORBPELINSTANCE.BPELID']}"); System.out.println("*** APH-I2 : BPEL Id " + bpelId); getSessionBean1().setBpelId(bpelId); String bpelFilename = getBPELName() + ".bpel"; getSessionBean1().setBpelFilename(bpelFilename); try { getSessionBean1().getActivityStatisticsRowSet().setString(1, getSessionBean1().getBpelId()); generateInstanceGraphSVG(); activityStatisticsDataProvider.refresh(); } catch (SQLException ex) { Logger.getLogger(BPELMonitorPage.class.getName()).log(Level.SEVERE, null, ex); } return null; } protected void generateInstanceGraphSVG() { GraphElement graphElement = null; GraphElement graphElements[] = new GraphElement[0]; List<GraphElement> graphElementList = new ArrayList<GraphElement>(); int value = 0; try { getSessionBean1().getInstanceByIdStatisticsRowSet().setString(1, getSessionBean1().getBpelId()); getSessionBean1().getInstanceByIdStatisticsRowSet().execute(); if (getSessionBean1().getInstanceByIdStatisticsRowSet().first()) { do { graphElement = new GraphElement(); value = getSessionBean1().getInstanceByIdStatisticsRowSet().getInt(1); System.out.println("*** APH-I2 : Value " + value); graphElement.setValue((double) value); graphElementList.add(graphElement); } while (getSessionBean1().getInstanceByIdStatisticsRowSet().next()); graphElements = graphElementList.toArray(graphElements); String svgStr = getSessionBean1().generateGraphSVG(getSessionBean1().BAR_CHART, graphElements); svgFactory.storeSVG(getSessionBean1().getInstanceGraphSVGFile(), svgStr); } } catch (SQLException ex) { Logger.getLogger(BPELMonitorPage.class.getName()).log(Level.SEVERE, null, ex); } } |
Instance Statistics Graph
The statistics graph requires a subtly different SQL, below, because we need to restrict based on the Instance Id and is executed directly from generateInstanceGraphSVG() method.
| SELECT
{fn
TIMESTAMPDIFF(SQL_TSI_SECOND,USR2.MONITORBPELINSTANCE.STARTTIME,USR2.MONITORBPELINSTANCE.ENDTIME)}
AS PROCESSINGTIME FROM USR2.MONITORBPELINSTANCE WHERE
USR2.MONITORBPELINSTANCE.BPELID = ? |
Activity Statistics Table
The Activity Statistics table can be created by dragging a new copy of the MONITORBPELACTIVITY database table onto a Visual Web Pack Table component. The associated SQL query should be modified as follows :
| SELECT ALL MONITORBPELACTIVITY.ACTIVITYXPATH, COUNT(MONITORBPELACTIVITY.ACTIVITYXPATH) AS ACTIVITYCOUNT, MAX({fn TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELACTIVITY.STARTTIME, MONITORBPELACTIVITY.ENDTIME)}) AS MAXPROCESSINGTIME, MIN({fn TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELACTIVITY.STARTTIME, MONITORBPELACTIVITY.ENDTIME)}) AS MINPROCESSINGTIME, AVG({fn TIMESTAMPDIFF(SQL_TSI_SECOND,MONITORBPELACTIVITY.STARTTIME, MONITORBPELACTIVITY.ENDTIME)}) AS AVGPROCESSINGTIME FROM MONITORBPELACTIVITY, MONITORBPELINSTANCE WHERE MONITORBPELACTIVITY.STATUS='COMPLETED' AND MONITORBPELACTIVITY.INSTANCEID = MONITORBPELINSTANCE.INSTANCEID AND MONITORBPELINSTANCE.BPELID = ? GROUP BY ACTIVITYXPATH |
The chart button can then be added and modified as follows:
| public
String activityChartBtn_action() { String activityXPath = (String) getValue("#{currentRow.value['MONITORBPELACTIVITY.ACTIVITYXPATH']}"); System.out.println("*** APH-I2 : Activity XPath " + activityXPath); getSessionBean1().setActivityXPath(activityXPath); generateActivityGraphSVG(); return null; } protected void generateActivityGraphSVG() { GraphElement graphElement = null; GraphElement graphElements[] = new GraphElement[0]; List<GraphElement> graphElementList = new ArrayList<GraphElement>(); int value = 0; try { getSessionBean1().getActivityByXPathStatisticsRowSet().setString(1, getSessionBean1().getBpelId()); getSessionBean1().getActivityByXPathStatisticsRowSet().setString(2, getSessionBean1().getActivityXPath()); getSessionBean1().getActivityByXPathStatisticsRowSet().execute(); if (getSessionBean1().getActivityByXPathStatisticsRowSet().first()) { do { graphElement = new GraphElement(); value = getSessionBean1().getActivityByXPathStatisticsRowSet().getInt(1); System.out.println("*** APH-I2 : Value " + value); graphElement.setValue((double) value); graphElementList.add(graphElement); } while (getSessionBean1().getActivityByXPathStatisticsRowSet().next()); graphElements = graphElementList.toArray(graphElements); String svgStr = getSessionBean1().generateGraphSVG(getSessionBean1().BAR_CHART, graphElements); svgFactory.storeSVG(getSessionBean1().getActivityGraphSVGFile(), svgStr); } } catch (SQLException ex) { Logger.getLogger(BPELMonitorPage.class.getName()).log(Level.SEVERE, null, ex); } } |
Activity Statistics Graph
The statistics graph requires a subtly different SQL, below, because we need to restrict based on the Instance Id and is executed directly from generateActivityGraphSVG() method.
| SELECT {fn
TIMESTAMPDIFF(SQL_TSI_SECOND,USR2.MONITORBPELACTIVITY.STARTTIME,
USR2.MONITORBPELACTIVITY.ENDTIME)} AS PROCESSINGTIME FROM
USR2.MONITORBPELACTIVITY, MONITORBPELINSTANCE WHERE
MONITORBPELACTIVITY.STATUS='COMPLETED' AND
MONITORBPELACTIVITY.INSTANCEID = MONITORBPELINSTANCE.INSTANCEID AND
MONITORBPELINSTANCE.BPELID = ? AND
USR2.MONITORBPELACTIVITY.ACTIVITYXPATH = ? |
Page Header Changes
Because we do not want the data to be cached thus causing the SVG images to become stale and not refresh correct I need to modify the Header section of the Page and add a number <META> tags to force the browsers to work as I wished. These can be added using the Meta tag in the Advanced section of the Palette.
| <webuijsf:head
id="head1"> <webuijsf:link id="link1" url="/resources/stylesheet.css"/> <webuijsf:meta content="0" httpEquiv="expires" id="expiresMeta"/> <webuijsf:meta content="no-cache" httpEquiv="cache-control" id="cacheControlMeta"/> <webuijsf:meta content="no-cache" httpEquiv="pragma" id="nocacheMeta"/> <webuijsf:meta content="#{SessionBean1.refreshPeriod}" httpEquiv="refresh" id="refreshMeta"/> </webuijsf:head> |
Processing Monitoring









This is pretty cool, however whenever i try to view a bpel process that contains a call to an EJB webservice, it returns ERROR http status 500. Any ideas?
[Fatal Error] :287:6: The processing instruction target matching "[xX][mM][lL]" is not allowed.
The log message is null.
org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getActivityName(SessionBean1.java:551)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:591)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:603)
at com.sun.aph.bpel2svg.monitor.BPELMonitorPage.generateSVG(BPELMonitorPage.java:381)
at com.sun.aph.bpel2svg.monitor.BPELMonitorPage.showSVGBtn_action(BPELMonitorPage.java:232)
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:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:160)
at com.sun.webui.jsf.component.TableRowGroupBase.broadcast(TableRowGroupBase.java:1402)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
java.lang.NullPointerException
javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:160)
at com.sun.webui.jsf.component.TableRowGroupBase.broadcast(TableRowGroupBase.java:1402)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:399)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:592)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:603)
at com.sun.aph.bpel2svg.monitor.BPELMonitorPage.generateSVG(BPELMonitorPage.java:381)
at com.sun.aph.bpel2svg.monitor.BPELMonitorPage.showSVGBtn_action(BPELMonitorPage.java:232)
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:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
... 43 more
WebModule[/BPEL2SVGMonitorWebApplication]#{BPELMonitorPage.showSVGBtn_action}: java.lang.NullPointerException
javax.faces.FacesException: #{BPELMonitorPage.showSVGBtn_action}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:160)
at com.sun.webui.jsf.component.TableRowGroupBase.broadcast(TableRowGroupBase.java:1402)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.U
Posted by Dan on December 11, 2008 at 06:01 AM GMT #
I will take a look
Posted by 63.250.183.170 on December 12, 2008 at 12:21 AM GMT #
Hi,
It looks pretty cool here, but for some reason I can't seem to get the browser to render it correctly - either on linux or on mac (using firefox or ie6). On process monitor tab I'm getting the bpel instance table correctly. The bpel activity is chopped - it shows the number of activities correctly, but the activities themselves are hidden. The nice SVG is not shown at all. Sometimes the navigation stops working, and then clicking the next page does not really advance pages, moving to the statistics tab fails, etc. I'm running that on glassfish v2.
Any idea?
Posted by zohar on December 15, 2008 at 02:39 PM GMT #
If you want to use IE you will need to install the Adobe SVGViewer http://www.adobe.com/support/downloads/product.jsp?product=46&platform=Windows this is because native IE does not support SVG. Also which version of firefox are you using I have noticed with FF3 that the pages do not display correctly but oddly enough they do in FF2. This appears to due to some incompatibility between Visual Web Pack and FF3.
Posted by 192.18.37.252 on December 15, 2008 at 07:50 PM GMT #
I tried to deploy BPEL2SVGMonitorWebApplication.war into my Glassfish V2 server. But, while deploying I am getting a SQLException saying that table MONITORBPELINSTANCE does not exist.
I don't have this table in my bpelDB... do I have to run any DB scripts?
I also don't have following tables, MONITORBPELACTIVITY and SERVICEUNIT
Kindly help.
Posted by Petro on March 01, 2009 at 06:29 AM GMT #
Got it resolved, had to enable monitoring also. Thanks.
Posted by Petro on March 01, 2009 at 06:47 PM GMT #
Hi,
the http://blogs.sun.com/toxophily/resource/svg-generator/BPEL2SVGJavaLibrary.zip link shows me only the 404.
Posted by Johannes Holzer on July 09, 2009 at 07:41 AM GMT #
I've added the missing file
Posted by Andrew Hopkinson on July 14, 2009 at 01:03 PM GMT #
I've also hit the same error as in the first comment:
[#|2009-07-16T09:37:52.984+0100|SEVERE|sun-appserver2.1|com.sun.aph.bpel2svg.monitor.SessionBean1|_ThreadID=31;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=f35e4d3b-4440-4dc2-adf1-fdd97f1c8204;|The log message is null.
org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getActivityName(SessionBean1.java:551)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:591)
at com.sun.aph.bpel2svg.monitor.SessionBean1.getProcessedActivities(SessionBean1.java:603)
Did you get anywhere finding a solution for this?
Posted by Yaytay on July 16, 2009 at 08:44 AM GMT #
I can't repro this at the moment but it could be a GlassFish / Visual Web Pack issue. I will build a VirtualBox image and give it another go. At least that way it will not be affected by what is currently installed on my machine. Their will be an update to this functionality in the near future when I finish the code but I will present that in a new blog entry
Posted by Andrew on July 22, 2009 at 12:29 PM GMT #
I have still not managed to repro this (using GlassFish ESB 2.1) so I have rebuilt the war and uploaded it along with a new zip of the project.
Posted by Andrew on August 05, 2009 at 10:25 AM GMT #
I have done some rationalisation to the BPEL Monitor and the updated version can be found in my blog entry http://blogs.sun.com/toxophily/entry/open_esb_tip_ajax_based
Posted by Andrew on October 07, 2009 at 12:06 PM GMT #