I can successfully start the Benchmark, but run into a problem when run the driver.
The error message likes this:
Apps server is jboss32
JAVA_HOME is /opt/java1.4
JAS_HOME is /opt/iexpress/SPECjAppServer2002
J2EE_HOME is /opt/iexpress/jboss
Driver Host: hpipvcq
Binding controller to //hpipvcq.cup.hp.com/Controller
Controller: Registering O1 on machine 22.214.171.124
O1 started ...
Controller: Registering M1 on machine 126.96.36.199
M1 started ...
Controller: Registering L1 on machine 188.8.131.52
L1 started ...
RunID for this run is : 51
Output directory for this run is : /opt/iexpress/SPECjAppServer2002/output/51
Java classpath is: /opt/iexpress/SPECjAppServer2002/jars/driver.jar:/opt/iexpress/jboss/client/jbossall-client.jar;/opt/iexpress/jboss/client/concurrent.jar;/opt/iexpress/jboss/client/log4j.jar;/opt/iexpress/SP
Exception in thread "main" java.rmi.RemoteException: InitialContext failed. javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang
The problem looks like the program can not find
But I add a line
System.out.println("Java classpath is: " + System.getProperty("java.class.path"));
to print out the java classpath and find that "jbossall-client.jar" is in the path already. ( you can see the whole classpath in the above output)
Did I miss something?
I had this same problem when running the driver into linux.
It was and wasn't related to classpath.
At jboss32.env at /config directory you have the Classpath line.
The default file has ; instead of :
That makes the driver.sh read some variables wrongly at jboss32.env what make it fail.
Please let me know how it goes.
After I changed those ; to : and recompiled the package, it works. Thank you.
I think the original Benchmark developer worked on Windows system, so ';' was used to separate classpath. but on Unix, ':' should be used.
I run into another problem, does it ring a bell again?
My test enviorment uses mysql and Jboss 4.0, and here is what I got in server.log:
2005-01-21 14:15:22,597 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackLocalException in method: public abstract org.spec.jappserver.util.helper.SequenceBlock org.spec.jappserver.util.sequenc
org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=hpipvcq.cup.hp.com/43, BranchQual=, localId=43] status=STATUS_NO_TRANSACTION; - nested throwable: (javax.
ejb.EJBException: Expected one updated row but got: 0)
at $Proxy115.nextSequenceBlock(Unknown Source)
It's funny, because I was running in the same problem. (Coincidence, isn't?)
I talked to Alexey who was working with Specj2002 here at JBoss, and he told me that this is okay, because this is the sequence generation and the application tries to recover it based on number for tries.
I wanted to see the code myself before answering you anything, and making sure that this is what was happening:
At SequenceSesEJB.java (code distributed by Spec.org), you will have a loop of retries.
so... it's okay!
Have you take a look at www.spec.org lately?
09/24/2004 The SPECjAppServer2002 expiration date has been extended by three months from the original date of October 27; submissions will now be accepted for review and publication until January 26, 2005.
Thank you, Clebert, for looking at this problem.
It looks like this java exception is a timing related issue. I found there is 1/3 of chance the exception would not appear when the injection rate is low, e.g 1. But if I increase the injection rate to 10, I run into it everytime.
If the application can retry, hope the retry does not affect the final test result.
I was aware of the SPECjAppServer2002 expiration date, but I do not think I will submit my testing result to SPEC.
Well... Any other solution would change the result. If for example we set this to pessimistic locking, we would have contentions. I think it would be worse.
If you find any other solution, please let me know!