Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Signing a jar slows app when first time accessing data from servlet

Posted on 2006-10-27
18
154 Views
Last Modified: 2013-11-24
Hi,

After signing a jar, there came a 10 - 15 sec delay when accessing a servlet for a first time. Does this delay come from cert trying to check that it is valid? Is there any workaround on this?

Regards,
Mika
0
Comment
Question by:JamixOy
18 Comments
 
LVL 11

Expert Comment

by:Manish
ID: 17818411
wht do u mean by signing a jar ?
0
 

Author Comment

by:JamixOy
ID: 17819688
Hi karanw,

We have purchased a certificate for signing jar-files. So I'll sign the jar-file with that sertificate to avoid security warnings; which are otherwise shown to the user when he/she starts the app. Usually we use WebStart to start the app, but now for showcase and testing, the jar-file is started from the command prompt.

/ mika
0
 
LVL 92

Expert Comment

by:objects
ID: 17824235
> Does this delay come from cert trying to check that it is valid?

would say so

> Is there any workaround on this?

should just be a once off if user says to trust cert always
0
MIM Survival Guide for Service Desk Managers

Major incidents can send mastered service desk processes into disorder. Systems and tools produce the data needed to resolve these incidents, but your challenge is getting that information to the right people fast. Check out the Survival Guide and begin bringing order to chaos.

 

Author Comment

by:JamixOy
ID: 17825013
Hi Objects,

There is also difference when jar is started from command propmt vs. double clicking. If I start the program with java -jar prog.jar, the delay is not so long (maybe 2 - 3 sec which is good enough).

After a little testing I am not sure that the validating is the issue which is delaying the first acces to servlet (Maybe signing the jar makes some other changes to the jar). The cpu load is in 100 % when delay is on.

What am I missing here?

Cheers,
Mika
0
 
LVL 92

Expert Comment

by:objects
ID: 17827936
0
 

Author Comment

by:JamixOy
ID: 17832006
Hi Objects,

Thanks for the link. I would think that this might be the same issue.
I use the javax.crypto.* classes to encrypt datatransfer over the internet. The jar size is about 5MB. I am using JRE 1.5.0_08.

Here are some timings:

no jar: 359 ms

Running from command prompt (java -jar app.jar):
=================================
unsigned jar: 953 ms
signed jar: 1437 ms

Running with double clicking the jar:
=======================
unsigned jar: 986 ms
signed jar: 23144 ms

My desktop is P4 3.00GHz, 1GB RAM.

Regards,
Mika
0
 
LVL 92

Expert Comment

by:objects
ID: 17832272
> signed jar: 23144 ms

thats the strange one, check what the .jar association is ie. what it runs

try this:

javaw -jar app.jar
0
 

Author Comment

by:JamixOy
ID: 17832300
Hi Objects,

It is opened by: Java(TM) 2 Platform Standard Edition binary. Have no idea where this links to..

The time with javaw -jar app.jar is: 1531 ms.
0
 
LVL 92

Expert Comment

by:objects
ID: 17832320
I don't see how that can take so much longer, you can check the file mappings in
Tools>Folder Options>File Types
0
 

Author Comment

by:JamixOy
ID: 17832584
The mapping is: Java(TM) 2 Platform Standard Edition binary, but have no idea where that is mapped to..

Standard Edition binary? java.exe? javaw.exe? which parameters does it use?

I'll try to debug the app deeper to find where the delay actually is..
0
 
LVL 92

Expert Comment

by:objects
ID: 17832593
you can check further and find the exact copmmand it executes.
0
 

Author Comment

by:JamixOy
ID: 17888448
Hi,

Sorry, had no time to test this earlier, but here it is:
The rows that consume lots time are:

     private Cipher cipherAES = null;
     private SecretKeySpec skeySpec = null;

     skeySpec = new SecretKeySpec(key, "AES");
     cipherAES = Cipher.getInstance("AES");
     cipherAES.init(Cipher.DECRYPT_MODE, skeySpec);
     return cipherAES.doFinal(toDec);

Expecially the row: 'cipherAES.init(Cipher.DECRYPT_MODE, skeySpec);' takes the 99.99% of the time (and only if the jar package is signed). Any suggestions?

/ mika
0
 
LVL 92

Expert Comment

by:objects
ID: 17888548
i meant the windows command it executes.
it appears javaw is taking considerably longer than java
0
 

Author Comment

by:JamixOy
ID: 17888682
Hi objects,

I think that I found what causes the problem. I previously told that I was using jre 1.5.0_08, but I think that the link from windows to .jar file was to version 1.5.0_06 even I had ver _08 installed.

When running the jar with _06, the delay is very long (appox. 25 sec), but when using jre ver _08, the delay is quite short (maybe that 1,5 sec). _07 is as fast as _08.

I'll try to find what Sun did with the _07 jre..

Cheers,
Mika
0
 

Author Comment

by:JamixOy
ID: 17888727
Hi,

Found this:

6354728       java       classes_security       Verification of signed JAR files is very slow (performance reduction)

Patched to _07.

/ mika
0
 
LVL 92

Expert Comment

by:objects
ID: 17892804
ah, thats explains the time discrepancy. was getting confused :)
0
 
LVL 1

Accepted Solution

by:
Computer101 earned 0 total points
ID: 18073595
PAQed with points refunded (250)

Computer101
EE Admin
0

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
throw exception 21 58
Java syntax, or is it Selenium 6 30
Html Table Looping (part 2) 5 27
Java class and jar 3 21
For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question