I have found a problem that could cause you a serious headache...please flame me if I am wrong...
Some browsers will (mostly on a windows platform) cut short a connection request with an application server...Sometimes it is the server that can do this but whether the server or client closes the connection you don't really have any control over it! And here is the catch!!! Some browsers will then resend the POST/GET data without your intervention...what a headache...
The problem with this is the following!
1. Client posts data to servlet container over http.
2. Servlet reads client data from form details passed as arguments and calls an EJB with the details...the EJB stores the data to a table the EJB also returns a confirmation string which is to be sent back to the calling client wrapped up in some pretty html layout...
3. At point 2, at the end of the call to the EJB..."""THE TRANSACTION ENDS AND THE DATA IS COMMITTED TO THE DATABASE SINCE THE EJB TRANSACTION HANDLING IS HANDLED BY THE CONTAINER!!!!"""
4. You now wrap up you request and return the data via the socket to the calling client...
5. Midway through this IE or the server throw a wobbly and close the connection...
what happens next can be one of 2 things...
6. in some cases you will get an error returned to the browser but in other cases the browser will resend the request, especially if it was the browser that closed the connection in the first place! You can see where I am going with this can you not...repeat steps 2 onwards and you get 2 sets of data posted to the database...
7. The client will only receive one result page and will not be aware that the post as gone twice. I must admit that I have only observed this behaviour with IE but since it is on 95% of boxes outthere then It is cause for concern!!
How do you get round this...All I can think of is that you would have to abandon using an EJB and start a user transaction from within the servlet. The transaction can then complete on a finally clause after the socket connect closes finishing the request response...if the connection goes down you get an exception which you can the use to roll back the transaction...
The problem will also occur if you call EJBs over SOAP/XMLRPC...as anyone else seen this issue...I have noticed similar posts on the web where people are getting double posts using JSP....and they are unable to explain it since they have disabled client side submit buttons...etc.
This is a fundimental flaw with using EJBs over a web container...can you setup the web container to initiate the transaction??? If not, then what?
Because there is no answer to this question, have I to consider that there is in fact no real site in production using JBoss ?
Do the JBoss community confirm this fact ?
If it's really the case, why all that stuff around JBoss ? Is it just for 'fun' ?
Creatura being taken aback...
creatura, have you tried looking round the site for this information?
This forum contains information on some success stories.
Have you looked at the customers page, it explains why JBoss do not know of everyone that is making use of it.
The customers page also does contain a list of some of the actual JBoss customers using JBoss and a case study of a customer that has migrated from Weblogic.
What do you think that this site is running on? There is a line at the bottom of the page that gives it away.
Sorry Darranl but I don't consider this site as a real professional one... In contrary, it I had to think that it would, I would consider it as a really slow one. Is it thus due to JBoss ?
The customers list presents a list of companies who have subscribed to the support. This doesn't mean that they have already built a significant web site using JBoss. The IT companies only need to show to their customers that they can integrate JBoss in their development. It doesn't mean more.
Do you think that the site www.lastminute.com runs JBoss ? The same for www.bloomberg.com, ...
Do you think that the site www.lastminute.com runs JBoss ?
yes, it does. As well as many other customers. JBoss has references available if you are actually interested by JBoss services (remember, we don't sell licenses).
Other than that, it is not because people do not answer your specific post in that specific forum that it means an appropriate answer doesn't exist. Nothing magic: if your post doesn't interest people, they will not answer.
I have got a small site running JBoss. About 1000 visitors a day. The site is reasonably complex - light pages are about 10 database requests, the heavier pages need up till 1000 database requests.
Before JBoss I had the same war's where running flawlessly on Tomcat (for years). Since i moved to JBoss there are a dozen different reasons that crashed my website. Crash means crash and no recovery. With help of the the server.log I have solved most of problems but still the website by far lacks the stability of my previous Tomcat set up.
For Bolt - do decent load testing. My JBoss worked fine in development - but the first days in production it had a TTL of 1 - 2 hours. (Now the TTL is about 24 hours - just enough to restart it only once a day!)
To get my website running production level with Tomcat is a matter of weeks. With JBoss you should be counting on a learning curve of several months (i am not there yet!). Unless of course you have a Mickey Mouse website.
i'm porting an application from Ora9IAS to JBoss, making use of EJB CMP
You say in development your application works fine, but in production not.
1. Wich test can i do to see if my application can work ?
2. why have you migrated to JBoss if Tomcat works fine ? have you tried to cluster JBoss ? Are you using EJB CMP ?
3. i'm still developing my application. Do you think JBoss is NOT the right choise ? what other tecnology/application server you advice, considering i will need to use Web Services ?
thank you very much
Many questions allessandro, here are the answers:
I needed messaging - so therefore i choose to use middleware.
In development JBoss works fine because there is no actual load. In production there is.
Three major issues i will mention:
- Security: check if it works! You expect _fail save_ but it is _fail unsave_. I misconfigured security and that resulted in a nice username password popup but no actual check. So everybody could log in using any username and any password.
- Database connections: Version 3.2.4 has some nice debugging features: use them. My application did not use the connections properly. For Tomcat that is no problem - but JBoss starts using more and more connections untill it just stops. (No response whatsoever). This was a hard to solve problem - time pressured rewrite of the application.
- JBoss uses hsqldb. Don't use it because it _will_ crash and it _will not_ restart. Not nice because for me it broke down in production so I got another time pressured learning curve on configuring JBoss on the environment you don't want to learn this.
Anyway, out of the box JBoss is not production ready. Somewhere in wiki you find: "hsqldb is not a production quality database. It is suitable for demos and testing. JBoss ships with the database to help you get something working out of the box".
Small point: the default settings for mysql are useless, they need tuning. I am still working on that btw.
As I have said before, my website is quite Mickey Mouse sized: 1000 visitors, about 1.000.000 database requests per day. Just running the application gave me considerable problems and needed advanced tuning. Things i did not need to with other important components like Tomcat (previous setup) and MySQL.
You simply need load testing and some more working knowledge with JBoss (documentation does not really help - it is not comparable with before mentioned MySQL and Tomcat). So, I think Trial and Error (load tests) is the best way.
In this process i have become sort of an JBoss guru. From that point of view i am now confident it is tuned and ready for production (cron restarts it every night though ;-).
ps, other questions: i do not use CMP. before i have seen a project fail big time using Weblogic (also database connections btw!)- so what are we talking about. Oracle? Memory leaks in the application server caused another project i have seen to invest almost an extra 500.000 euro in hardware). And clustering? It is still a hype, don't consider it.
2 weeks from today (July 15th) we will be relaunching our site, and it is built on a JBoss/Tomcat core. At peak hours of the day we will be serving nearly 10,000 concurrent users.
Hi Michael !
Is this new launch successfull (hope for you) ?
it's a little rocky but it's because of database issues, not jboss
we're using a combination of jboss, tomcat, hibernate, struts, velocity, & spring and they are all performing very well, not to mention fast as well
once we get our DB issues straightened out, we should have a pretty stable site :)
We've worked out the major bugs and now the site is very stable and fast....even when we hit 15,000 concurrent users :)
Thanks for the follow-ups. Have you gotten your MySQL settings figured out? If so, could you share them? I haven't switched my JMS to use MySQL instead of Hypersonic yet and I'd like to. (Although I'll mention that I haven't had a single JBoss crash, but my site and JMS usage is pretty low-traffic as well).
I(we) are about to do the same, major rewrites using a combination of CMP and other frameworks over Tomcat, the only thing I cant find hardware or networking information on JBOSS, what kind of machines/vendors are JBOSS(java) optimized, of course we are trying to use the latest and greatest DELL/XEON, but the speed is still not there, ideally I would like to use one of many frameworks out there Spring/Struts/JavaServerFaces, etc , but I think speed will be an issue.
What is the network/JBOSS setup like at BOLT or if somebody else wants to respond.