Performance of JSF and HashMap
Using Java profiler I've noticed that with large number of components on the page time of HashMap.put calls plays significant role.
Is there a way to control initial capacity of hash maps in Sun RI?
Does Sun RI tries to set initial capacity and load factor in the code?
Per Java 5 API docs:
An instance of HashMap has two parameters that affect its performance: initial capacity and load factor. The capacity is the number of buckets in the hash table, and the initial capacity is simply the capacity at the time the hash table is created. The load factor is a measure of how full the hash table is allowed to get before its capacity is automatically increased. When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the capacity is roughly doubled by calling the rehash method.
It would be nice if JSF RI could guess more appropriate capacity and load factor to minimize performance impact on extensive HashMap.put() calls.
Thanks
This is an example of what I was talking about in the other thread. I was saying that if you use an unusual page as the basis for your performance tests, you will end up optimizing for the extreme case at the expense of the normal case. If changes are made in this area care must be taken not to cater to the extreme at the expense of the usual.
If the implementation starts with a higher capacity in the map initially, that means more memory is being used. If the capacity is optimized for pages with large numbers of components, the memory is wasted.
Similar Messages
-
I have seen some websites discussing about the performance of ArrayLists, LinkedLists, and Hashmaps:
http://forum.java.sun.com/thread.jspa?threadID=442985
http://java.sun.com/developer/JDCTechTips/2002/tt0910.html
http://www.javaspecialists.co.za/archive/Issue111.html
http://joust.kano.net/weblog/archives/000066.html
If I understand it right an ArrayList in general is faster for accessing a particular element in the collection and I can't find some pro's of using a LinkedList.
My question is: If I only use a large collection with more than 1 million elements for iterating from begin to end (i.e. for loop), is it faster to use a linked list or a custom linked list instead of an arraylist (or hashmap)? Since you can iterate "directly" through a (custom) linked list, which is not possible with a arraylist?
Edited by: 9squared on Nov 23, 2007 1:48 PMThanks for the help, I wrote some code and tested it
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;
public class TestTemp {
public static void main(String[] args) {
List<Node> a = new ArrayList<Node>();
Node b = new Node("a");
String[] c = new String[10000000];
Node temp = b;
for (int i = 0; i < 10000000; i++)
a.add(new Node("a"));
temp.next = new Node("b");
temp = temp.next;
c[i] = "c";
long tstart;
tstart = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++)
c[i] = "cc";
if (i%200000 == 0)
System.out.println("Array " + i + ": " + (System.currentTimeMillis()-tstart));
tstart = System.currentTimeMillis();
temp = b;
for (int i = 0; i < 10000000; i++)
temp.next.text = "bb";
temp = temp.next;
if (i%200000 == 0)
System.out.println("LinkedList " + i + ": " + (System.currentTimeMillis()-tstart));
tstart = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++)
a.get(i).text = "aa";
if (i%200000 == 0)
System.out.println("ArrayList " + i + ": " + (System.currentTimeMillis()-tstart));
public class Node {
public String text;
public Node next;
public Node(String text)
this.text = text;
}Here are some results in milliseconds, and indeed just iterating doesn't take very long
Elements Linked Arraylist Array
200000 0 0 1
400000 5 13 5
600000 9 22 9
800000 14 32 12
1000000 20 42 16
1200000 25 52 19
1400000 31 63 23
1600000 37 72 26
1800000 42 82 30
2000000 47 92 33
2200000 51 101 37
2400000 56 112 40
2600000 60 123 44
2800000 65 134 47
3000000 69 143 51
3200000 73 152 55
3400000 78 162 59
3600000 84 175 63
3800000 103 185 67
4000000 108 195 70
4200000 113 207 74
4400000 117 216 78
4600000 122 225 81
4800000 127 237 85
5000000 131 247 88
5200000 136 256 92
5400000 142 266 97
5600000 147 275 101
5800000 153 286 107
6000000 159 298 113
6200000 162 307 117
6400000 167 317 121
6600000 171 326 125
6800000 175 335 128
7000000 180 346 132
7200000 184 358 136
7400000 188 368 139
7600000 193 377 143
7800000 197 388 147
8000000 201 397 150
8200000 207 410 154
8400000 212 423 157
8600000 217 432 162
8800000 222 442 167
9000000 227 452 171
9200000 231 462 175
9400000 236 473 178
9600000 242 483 182
9800000 249 495 185
10000000 257 505 189 -
I would like to perform validation that seems to be a little involved with JSF and I was curious as to the best practice. I need to perform validation on a summary screen where the user can highlight a row and click an Edit button that takes them to another screen. However, I need to query the database when they click edit to check to see if the item they selected is able to be edited (these rules are part of our business logic). What is the best way to perform database-side validation using JSF? If I query the DB in the action event of the command button, how can I then inform the JSP if the item fails validation and then display a message from messages. properties? Keep in mind that an item can fail validation for a number of reasons, so the message could be different each time the validation is performed.
You have two choices:
a) Don't let the user edit the line, by don't allowing the he to have an action on that row.
b) If you have a global command, then perform the validation on the action method.
In the a) case, you only have to put some flags to tell the page to not put the command on the row. This flags came with the query or whatsoever that you like more.
In the b) case you can perform the validation by calling the business logic, and in case of failiure, you can add a message to the FacesMessage tellong the user the reason of not allowing he to edit.
Example (on the bean):
FacesContext.getCurrentInstance().addMessage(componentId,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
errorMessage,
errorMessage));
The componentId can be null or of not, the id of a component on the page. -
Performance with MySQL and Database connectivity toolbox
Hi!
I'm having quite some problems with the performance of MySQL and Database connectivity toolbox. However, I'm very happy with the ease of using database connectivity toolbox. The background is:
I have 61 variables (ints and floats) which I would like to save in the MySQL-database. This is no problem, however, the loop time increases from 8ms to 50ms when using the database. I have concluded that it has to do with the DB Tools Insert Data.vi and I think that I have some kind of performance issue with this VI. The CPU never reach more the 15% of its maximum performance. I use a default setup and connect through ODBC.
My questions are:
1. I would like to save 61 variables each 8-10ms, is this impossible using this solution?
2. Is there any way of increasing the performance of the DB Tools Insert Data.vi or use any other VI?
3. Is there any way of adjusting the MySQL setup to achieve better performance?
Thank you very much for your time.
Regards,
MattiasFirst of all, thank you very much for your time. All of you have been really good support to me.
>> Is your database on a different computer? Does your loop execute 61 times?
Database is on the same computer as the MySQL server.
The loop saves 61 values at once to the database, in one SQL-statement.
I have now added the front panel and block diagram for my test-VI. I have implemented the queue system and separate loops for producer and consumer. However, since the queue is building up faster then the consumer loop consumes values, the queue is building up quite fast and the disc starts working.
The test database table that I add data to is created by a simple:
create table test(aa int, bb char(15));
...I'm sure that this can be improved in some way.
I always open and close the connection to the database "outside the loop". However, it still takes some 40-50 ms to save the data to the database table - so, unfortunatly no progress to far. I currently just want to save the data.
Any more advise will be gratefully accepted.
Regards,
Mattias
Message Edited by mattias@hv on 10-23-2007 07:50 AM
Attachments:
front panel 2.JPG 101 KB
block diagram.JPG 135 KB -
Building a Simple JSF and Web Services App in JDeveloper 10.1.3 Preview
Hi
I was trying out this example of JSF and webservices at:
http://www.oracle.com/technology/products/jdev/101/howtos/jsfws/index.html
Has anyone tried it before? I'm getting the following error:
calling http://216.200.21.157:9090/soap
WARNING: Unable to connect to URL: http://216.200.21.157:9090/soap due to java.security.PrivilegedActionException: oracle.j2ee.ws.saaj.ContentTypeException: Not a valid SOAP Content-Type: text/html
java.rmi.RemoteException: ; nested exception is:
HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: oracle.j2ee.ws.saaj.ContentTypeException: Not a valid SOAP Content-Type: text/html
at com.minc.ws.stockquery.proxy.runtime.NetXmethodsServicesStockquoteStockQuoteBinding_Stub.getQuote(NetXmethodsServicesStockquoteStockQuoteBinding_Stub.java:96)
at com.minc.ws.stockquery.proxy.NetXmethodsServicesStockquoteStockQuotePortClient.getQuote(NetXmethodsServicesStockquoteStockQuotePortClient.java:40)
at com.minc.ws.stockquery.proxy.NetXmethodsServicesStockquoteStockQuotePortClient.main(NetXmethodsServicesStockquoteStockQuotePortClient.java:29)
Caused by: HTTP transport error: javax.xml.soap.SOAPException: java.security.PrivilegedActionException: oracle.j2ee.ws.saaj.ContentTypeException: Not a valid SOAP Content-Type: text/html
at oracle.j2ee.ws.client.http.HttpClientTransport.invokeImpl(HttpClientTransport.java:142)
at oracle.j2ee.ws.client.http.HttpClientTransport.invoke(HttpClientTransport.java:118)
at oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java:175)
at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:112)
at com.minc.ws.stockquery.proxy.runtime.NetXmethodsServicesStockquoteStockQuoteBinding_Stub.getQuote(NetXmethodsServicesStockquoteStockQuoteBinding_Stub.java:79)
... 2 more
Any ideas?
Thanks
AlexI'm not using 10.1.3 preview. I was using 10.1.3.1 production. I just copied the title of the tutorial as my subject. sorry for the confusion!! :)
I used the HTTP analyzer and this is what I got in the header:
<HTML><HEAD><TITLE>TCP Packet Monitor Error</TITLE></HEAD><BODY>JDeveloper TCP Packet Monitor encountered an error retrieving<P><pre>POST http://216.200.21.157:9090/soap HTTP/1.1
Host: 216.200.21.157:9090
Proxy-Connection: Keep-Alive
Connection: TE
TE: trailers, deflate, gzip, compress
User-Agent: Oracle HTTPClient Version 10h
SOAPAction: "urn:xmethods-delayed-quotes#getQuote"
Accept-Encoding: gzip, x-gzip, compress, x-compress
Content-type: text/xml; charset=UTF-8
Content-length: 680
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="urn:xmethods-delayed-quotes"><env:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" env:mustUnderstand="1"/></env:Header><env:Body><ns0:getQuote env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><symbol xsi:type="xsd:string">orcl</symbol></ns0:getQuote></env:Body></env:Envelope></pre><P>The error was :<P><pre>IOException retrieving the response: java.net.ConnectException: Connection refused: connect</pre><P></HTML>
It looks like I'm getting connection refused error... Hmmm.. wonder why?
I'll download 10.1.3.2 and see if that helps..
Thanks for looking into this!
Alex -
Hi,
I have a user in our Hong Kong office that is unable to open a distribution group she has added to her Groups. She gets the error message "Cannot perform this action, and the cause is unknown. Contact your support team to investigate."
I can add the group and expand it, so can some of her colleague, and some cannot. Her colleagues who can have the same client and global policy settings as she does.
I read in a similar thread that this could be resolved by confirming the server times on Lync, AD (domain controller checked and Exchange but they were all correct and in sync.
The global policy is set to 250 max contacts - but does a DL count as 1 contact, or does it count all the people within the DG? I am getting HK to confirm she does not have too many contacts but I dont think this is the issue.
Anyone else come across this issue?
PhilYou can run the command Test-CsGroupExpansion to test the ability of a user to employ group expansion.
For the usage of the command, you can check
http://technet.microsoft.com/en-us/library/gg399009.aspx
Lisa Zheng
TechNet Community Support -
How to perform insert, update and delete in a table component
hi all,
i am using a table component in my page. I want to retreive data from multiple tables as well as perform insertion, updation and deletion operation.The changes should be affected in the corresponding tables. can anyone provide a solution for my problem.
Thanks in advance
regards,
prasantThere is a great tutorial for insert, update and delete records in a table.
http://developers.sun.com/prodtech/javatools/jscreator/learning/tutorials/2/inserts_updates_deletes.html
Hope it helps.
Thanks,
Moumita -
Does anyone know how well the Intel Iris Pro installed on new 15" MacBook Pros performs using Photoshop and Lightroom? I have seen some differing opinions out there, and I would rather not shell out the extra cash for the Nvidia if I don't have to. I mostly do photo editing for business and personal use. I have not used the 3D function in Photoshop, but I would like to know that I could.
You could download a trial and see how well it works before committing to a subscription. You get 30 days to decide.
Photo editor | Download free Adobe Photoshop CC trial
Photo editor app | Download free Adobe Photoshop Lightroom 5 trial
Gene -
Jax-ws 2.1 - problems returning hashtable and hashmap
Hi,
We're developing a set of applications that communicate via web services.
The company decided that to do this we should use jax-ws 2.1.
Everything is going ok, its really easy to use, except for a web method that returns a java.util.Hashtable.
In the endpoint there's no problem, it compiles and deploys to a tomcat 5.5 without a problem.
The client can access the wsdl via url, download it and create the necessary files (we use netbeans 5.5 for this).
We can invoke the method getConfig without a problem, but the object returned only has the java.lang.Object 's methods, not the java.util.Hastable 's .
Endpoint:
package xxx.cdc_pm_i;
import java.util.Hashtable;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.*;
@WebService()
public class cdc_pm_i{
@WebMethod
public Hashtable getConfig() {
Hashtable<String,String> config = new Hashtable<String,String>();
config.put("1","1");
config.put("2","2");
return config;
Client:
try { // Call Web Service Operation
xxx.CdcPmIService service = new xxx.cdc_pm_i.CdcPmIService();
xxx.cdc_pm_i.CdcPmI port = service.getCdcPmIPort();
// TODO process result here
xxx.cdc_pm_i.Hashtable result = port.getConfig();
} catch (Exception ex) {
ex.printStackTrace();
I'm fairly unexperienced in Web Services and i have no idea why this works for any kind of return object (as long as its serializable) and has this problem with hashtables and hashmaps.
Any idea on how to solve this?
Thanks in advance,
RuiDidn't find the solution for this, but any object that contains an Object in its methods / attributes had the same problems, so i just built my own table that only supports Strings and the problem was solved.
If anyone knows why i had this problem and wants to share a solution, please do so. -
Performed an Archive and Install and now my Admin password doesn't work
I talked to CS this afternoon per an issue with iTunes and was instructed to perform an Archive and Install.
I just got done running both discs and the computer seems ready to go. When I click on my user name (I'm the admin) my password no longer works. We have two other users on the computer (neither have been set up with a password to access the accounts) but now the computer is asking for one.
I'm typing my password correctly.
Does the computer reset to a generic password?
Any help would be appreciated!!
Thank you!Hi Kathleen,
Does the computer reset to a generic password?
No, it most likely means that there was a disk problem, you can generally prevent... well, let me give you my whole spiel since we're here...
Could be many things, we should start with this...
"Try Disk Utility
1. Insert the Mac OS X Install disc that came with your computer, then restart the computer while holding the C key.
2. When your computer finishes starting up from the disc, choose Disk Utility from the Installer menu. (In Mac OS X 10.4 or later, you must select your language first.)
Important: Do not click Continue in the first screen of the Installer. If you do, you must restart from the disc again to access Disk Utility.
3. Click the First Aid tab.
4. Click the disclosure triangle to the left of the hard drive icon to display the names of your hard disk volumes and partitions.
5. Select your Mac OS X volume.
6. Click Repair. Disk Utility checks and repairs the disk."
http://docs.info.apple.com/article.html?artnum=106214
Then Safe Boot from the HD, (holding Shift key down at bootup), run Disk Utility in Applications>Utilities, then highlight your drive, click on Repair Permissions, reboot when it finishes.
The usual reason why updates fail or mess things up, or things don't load/run, is if Permissions are not fixed before & after every update, with a reboot... you may get a partial update when the installer finds it doesn't have Permissions to change one obscure little part of the OS, leaving you with a mix of OS versions.
Some people get away without Repairing Permissions for years, some for only days.
If Permissions are wrong before applying an update, you could get mixed OS versions, if Directory is the slightest messed up, who knows!
If many Permission are repaired, or any Directory errors are found, you may need to re-apply some the latest/biggest updates again, or even do an A&I if you have enough free disk space.
At this point it's not unlikely to undo the PW problem, but will prevent fiture problems.
If it still doesn't work, go back to Step 2 above & lok for Change Password in the Menu bar.
We have more if that still doesn't do it. -
hi all.
i'm developing an application using jsf and tiles.
i've some problem in the general layout page.
how can I refer to images and files,if I don't know where the page will be used?
with struts i've used <html:rewrite page=" ... " /> but it doesn't work with jsf.
I only use the TilesServlet.
any suggestion?
i've also try to define the url like "/css/mycss.css" but in local dosn't work.
thank a lot for any reply!hi all.
i'm developing an application using jsf and tiles.
i've some problem in the general layout page.
how can I refer to images and files,if I don't know where the page will be used?
with struts i've used <html:rewrite page=" ... " /> but it doesn't work with jsf.
I only use the TilesServlet.
any suggestion?
i've also try to define the url like "/css/mycss.css" but in local dosn't work.
thank a lot for any reply! -
Greetings:
Please either confirm and/or correct following proposed solution for Myfaces tiles.
Issue: isert a tile definition and attribute in a pure jsf page.
First passed solution: A hybrid of Jsp programming and Jsf. I was able to create a tile page layout in pure jsf except in the portal columns i used old fashion jsp programming to insert a list of portletDefinitions which is extracted from jsf ValueBinding of its managed beans.
The problem with the above approach is that it works well only with html portlet fragments. When a portlet fragment has some jsf elements, the page rendering has conflict of simultaneous rendering between jsf and jsp. The portlet fragments are rendered in a woring place.
Proposed solution: use <h:dataTable ...> to render the portletList and extract the item portletDefinition as following:
<h:dataTable var="portlet"
value="#{portalTabbedBean.selectedPane.serviceListL}" >
<f:verbatim>
<h:outputText
value="<tiles:insert name=#{portlet.portletDefinition} flush='false' /> " />
</f:verbatim>
</h:dataTable>
Note on the name of tiles:insert element, which i just extracted the definition as a jsp variable to make it work in the first hybrid solution:
<tiles:insert name="<%=portletDefinition%>" flush="false" />
Thanks
BaTien
DBGROUPSI reply this myself. Jsf and Jsp programming either via Jstl or while loop do not go together under current version.
I solve the problem by using Jsp programming and insert the portlet tile fragment directly rather than though a portlet template with different tile content attribute. The portlet tile is created as <h:panelGrid ...> and observe the set rules to make Jsf and jsp working together. Hopefully Jsf and Jsp will be able to work together nicely in their next specifications. -
Can any body give some info on integration of JSF to existing struts application
I describe the main differences between JSF and Struts in this sample Chapter from my JSF book:
http://www.oreilly.com/catalog/jsvrfaces/chapter/ch01.pdf
Hope that helps. -
Using JSF and JavaMail to send Automated Email
Hi All,
Can any one please suggest I can use JSF and JavaMail to send automated email messages i.e after a person has successfully completed a form , a message is sent to his/her email address confirming that he has succesfully registered or completed a form. I have succesfull implemeted the use of javamail for sending email meassages in a JSF web application but cant seem to figure out how i can achieve automated sending of emails in JSF. Please any ideas, tutorials or source code would be very much appreciated.
Thanks.I don't understand your problem:
You have already been able to send e-mails from a JSF webapplication, but you are not capable of sending e-mails from a JSF webapplication?!
Automated sending of e-mails will be exactly the same as non-automated. -
Hi Friends,
I'm trying to combine JSF and tiles as follows:
Template file:
<f:subview id="content">
<tiles:insert attribute="content" flush="false"/>
</f:subview>
content file:
<tiles:insert definition="userSpecific">
<tiles:put name="content" type="string" >
<h:outputText value="aaaa"/>
</tiles:put>
</tiles:insert>
I get the following error when loading the content file:
2007-06-20 10:14:10,578 [http-8080-Processor23] ERROR org.apache.myfaces.shared_impl.taglib.UIComponentTagUtils - Component javax.faces.component.UIViewRoot is no ValueHolder, cannot set value.
I tried putting the template content in a verbatim tag and then it works
but the content page is not displayed in correct place in the template...
Thanks a lot in advance!Are you dead set on using tiles? I can see tiles including JSF but JSF including tiles? Not sure if that will work.
My suggestion is to use Trinidad. It has the concept of Regions which is very "tiles" like and you will be far more successful.
Maybe you are looking for
-
how many times can you install the academic version of fcp 3 with the same serial numbers. its not working now and i think it may be because its been installed to the max. anyone know?
-
Dear experts, Greetings. I have a small VC application in wich the data entered in the input fields should be displayed on a table upon clicking a button. But when I enter the next set of data, the first row is being replaced. I tried (Assign & Inse
-
Sql error dump while using pfcg tcode.
hi, I am getting one dump while executing PFCG tcode. Hereunder i am pasting the log, Runtime Errors DBIF_RSQL_SQL_ERROR Exception CX_SY_OPEN_SQL_DB Database error text........: "ORA-01115: IO error reading block from fil (block # 52025)#ORA-01110: d
-
Acrobat Pro XI for Mac- only wants to print dual sided, option to deselect not present
Hi folks- same problem was happening on Acrobat Pro x, so i returned it. Chat won't help on old version, nor on trial of new version, why would i buy it if it can't be fixed i queried, they didn't care.
-
My spedometer didn't work... T_T
I am really stressed up doing my home work.. I creating a intelligent car program that can do somethings. But i'm stuck when making a car simulation.. I need all of your help. Please make the speedometer work.. T__T thx a lot for your help.. you can