voyent
Messages posted by: akearns  XML
Profile for akearns -> Messages posted by akearns [10]
Author Message

This is in a panelPopup that is included using:

<ui:include src="#{menuAction.dialogInclude}"/>

The included dialog does not use a default CSS however the main page does:

<ice:outputStyle href="./xmlhttp/css/xp/xp.css"/>
<link href="css/screen.css" rel="stylesheet" type="text/css" />

In the popup calendar I do not get dark-grey weekends.

I'll specify the same style to see if that fixes it.
I am using the icefaces component selectInputDate, it seems to always pop vertically down. In my case it pops off the screen and becomes unusable. I am using a selectOneMenu component on the same row it
correctly pops up. How can I make the calendar popup do the same thing?

[code]

<ice:panelGrid columns="3">
<ice:outputText value="#{messages['deviceTemperature.startDate']}"/>
<ice:selectInputDate id="startDate" partialSubmit="true" valueChangeListener="#{deviceTemperature.valueChanged}"
value="#{deviceTemperature.startDate}"
renderAsPopup="true">
<f:convertDateTime pattern="MM/dd/yyyy" timeZone="#{deviceTemperature.startTimeZone}"/>
</ice:selectInputDate>
</ice:panelGrid>

[/code]

This is with 1.7.2.SP1

I would like to simulate the the user checking a checkbox if he changed another control in the same row or form.

I tried using the component showcase to determine what changes needed to be made.

In component showcase in the "Extended Components" Selection example
I tried to simply check the "New User" checkbox if the user changed their
car, drink or language.

I thought I could add: newUser=true

Code:
     public void effectChangeListener(ValueChangeEvent event){
         valueChangeEffect.setFired(false);
     	newUser = true;
     }
 


to the methods that handled the valueChangedListener the effectChangeListener in BaseBean.java

I moved the boolean newUser to the BaseBean for testing, I realize it does
not belong there.

This does not work, shouldn't it?
I took an existing application that uses AJAX push and updated my icefaces jars to user 1.7.1, previously I used 1.7.0 jars.

On deployment to jboss-4.2.3.GA I get the exception:
com.icesoft.net.messaging.MessageServiceException:
javax.naming.NameNotFoundException:
icefacesContextEventTopic not bound

What steps are needed to go from 1.7.0 to 1.7.1?
Another post referenced creating the topics:
http://www.icefaces.org/JForum/posts/list/9140.page

Full Exception follows:

Code:
 
 17:19:08,171 INFO  [JMSAdapter] Server Info: JBossWeb/2.0.1.GA
 17:19:08,171 INFO  [JMSAdapter] Messaging Properties: jboss_ha.properties, jboss.properties
 17:19:08,218 INFO  [JMSAdapter] Trying JMS Environment:
         java.naming.provider.url = localhost:1100
         java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
         java.naming.factory.url.pkgs = org.jboss.naming:org.jnp.interfaces
 
 17:19:14,359 ERROR [JMSAdapter] Failed JMS Environment: Could not obtain connection to any of these urls: localhost:1100 and discovery failed with error: javax.
 naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
 17:19:14,359 INFO  [JMSAdapter] Trying JMS Environment:
         java.naming.provider.url = localhost:1099
         java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
         java.naming.factory.url.pkgs = org.jboss.naming:org.jnp.interfaces
 
 17:19:14,421 WARN  [MainServlet] Did not start Ajax Push JMS services:
 com.icesoft.net.messaging.MessageServiceException: javax.naming.NameNotFoundException: icefacesContextEventTopic not bound
         at com.icesoft.net.messaging.jms.JMSAdapter.subscribe(JMSAdapter.java:378)
         at com.icesoft.net.messaging.MessageServiceClient.subscribe(MessageServiceClient.java:791)
         at com.icesoft.net.messaging.MessageServiceClient.subscribe(MessageServiceClient.java:759)
         at com.icesoft.faces.webapp.http.servlet.MainServlet.setUpMessageServiceClient(MainServlet.java:121)
         at com.icesoft.faces.webapp.http.servlet.MainServlet.init(MainServlet.java:66)
         at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
 
 



It does not look like this got fixed for 1.7.0; can someone verify this?

My code:

Code:
 
 <ice:selectOneMenu value="title" partialSubmit="true"
         converter="#{newcategoriestimezonebean.converter}">
     <s:selectItems value="#{newcategoriestimezonebean.categories}" />
 </ice:selectOneMenu>
 
 


When the form is submitted the value and converter are called.


I created my own cache, I am not using jboss_cache or other existing cache libraries.

I am not using seam-managed persistence.

The container is jboss 4.2.2

The profiling output I sent shows that this call heirarchy is taking most of the CPU:

87.0% - 135 s - 13 inv. edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run

86.9% - 135 s - 12 inv. com.icesoft.faces.async.render.RunnableRender.run

86.9% - 135 s - 12 inv. com.icesoft.faces.webapp.xmlhttp.PersistentFacesState.executeAndRender

86.7% - 135 s - 12 inv. com.icesoft.faces.webapp.xmlhttp.PersistentFacesState.render

This CPU snapshot was taken over 5 minutes with 7 devices being polled.

No, I have not implemented checking the previous datatable cell's value against the new to determine if I should call renderRequest. This would improve performance provided that nothing that the user is viewing has changed. I will still need to show the user that a poll has occurred, not sure how to do this without pushing data from the server.

>>If I have understood this correctly, each client is polling your >>application-scoped cache. Why not just push it out if it has changed or >>at regular intervals (rather than each client polling, have the server >>just push the info).
This is what I am doing by using the delayed renderer.

>>Is ServiceBean part of the same application?
The serviceBean is package as a sar within my overall ear file. This is all one application.

>>Do you add your view only if the item is in detail in the list or do you >>require any master information as well (in your treemodel?).
The list contains enough information for the table levels, access to the cache and a reference back to the treemodel.

>>If you only care about the details (what the EntityManager currently >>has), then I wonder if it's possibly to only register the view for the >>entity currently managed?
When the view is updated for one client it needs to be updated for all; polling is consolidated.
The application is a typical Element Management System. The main classes viewed by the user are:

Accounts
Folders
Devices

These classes are viewed by the logged in user as a tree. An account is authorized to view a specific folder and its children. When the user logs into their account the resultant tree starts at their folder. Nodes within the tree are not fetched until they are needed; on tree node expansion the children are fetched from the database

The database is accessed via hibernate. We use a postgreSQL database.

The polling of the devices is asynchronous to the rest of the application. I have a service it implements ServiceMBean which is told which devices to poll. Periodic continous polling is the responsibility of this service. When a poll is completed on a device a JMS message is sent. I only poll a device once per interval, it is independent of who many users are viewing it.

The client has an application scoped cache which holds the polled data. When the web is updated I can see my cache queried once for each client and each item in the tree. This is what I believe I need to optimize.


In testing I have 5 devices and 10 folder about 15 rows in the table. I have about 20 columns of information, only cells for the devices contain data. I usually have 3 clients looking at the data.

Right now I am polling the devices every minute and I attempt to push the data out every minute.

A client views the information they have permission to view. It depends on who they login as.


The initial design of my table is from a quickstart by Philip Breau.
My session data is orginized in a Tree but when rendered it is flattened into a datatable to visually represent a treeTable.

My renderable represents one pollable device the class TreeTableUserObject. This class extends from IceUserObject.
My datatable displays a collection of TreeTableUserObject ie. as returned by treeTable.linearList

Code:
   ice:dataTable value="#{treeTable.linearList}"
       var="row" cellpadding="0"
       styleClass="treeTable"  rowClasses="even,odd" columnWidths="40%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%"
 


TreeTableUserObject extends IceUserObject and implements Renderable
When any client is viewing that device the object is created and added to the renderManager
It is not added to the datatable until the user expands a treeNode.

Code:
 renderManager.getDelayRenderer(proId.getRenderRequestKey()).add(this);
 


proId.getRenderRequestKey return a constants string followed by the primary id of the table for that device. for example "proId.1001"

Only visible devices have JMS messages generated for them.

So yes, I have a renderGroup for each polling device. As additional clients view the same device the same renderGroup is used.

If my visible devices are polled every minute then I've used a delay of 5 seconds. The delay is setup just before I call requestRender.

Code:
     if (isBroadcastRequestNeeded()) {
         log.info(func + "requestRender " + guid.getRenderRequestKey());
         renderManager.getDelayRenderer(guid.getRenderRequestKey()).setDelay(RENDER_DELAY);
         renderManager.getDelayRenderer(guid.getRenderRequestKey()).requestRender();
     } else {
         log.info("requestRender skipping it " + guid.getRenderRequestKey());
     }
 


isBroadcaseRequestNeeded simply compares the current date to the the date the last request was made
I am trying to display polled data in a datatable where each row is a polled device. When a poll is completed on a device the server pushes it to the client. My problem is the performance I am seeing and the amount of CPU the server is using to update the dom for each client.

Is seems my pushed data causes the datatable to update its entire model. Is there a way to limit the scope of the update (what is written to dom) to just a table cell or better just a row within the table?

Right now I am limiting when an update takes place using the delayed render manager. This helped, but will not solve the problem. As additional clients login the update will continue to use more and more of the CPU;
ie. I need to limit what is updated to what has changed. Is there any way to do this?

Can I use ICEfaces 1.5 with Seam 1.0.1 GA and JBoss 4.0.5 GA?
And if I can, do I follow the same steps as in the Booking example here?

I used the Booking example to alter my seam application. I used the seam jars included with example, but now I see differences (bugs) with my application that did not exist with Seam 1.0.1 and/or the ICEfaces jars. To eliminate one set of changes I would like to go back to Seam 1.0.1.

Thanks.
 
Profile for akearns -> Messages posted by akearns [10]
Go to:   
Powered by JForum 2.1.7ice © JForum Team