My goal is to create Java EE web service, which will take concurrently thousands (or more in future) requests and must store data from requests in list or similar structure. I want to store objects from requests in memory, but this is not obligatory. Some object will be extracted from every request and added to chosen data structure. Web service will have two operations: add to structure and remove from structure. Removal request will contain values of object instance variables. Probably it will be unique ID or other one or more instance variables. There will be always one object to remove (or 0 if request is not valid). Object with equal instance variable(s) value will be removed.
My thought is to use two EJBs. First would be @Stateless and exposed as web service. It would extract object from request and call second EJB to add or remove requested object from data structure. Second EJB would be @Singleton and would have instance variable ArrayList<> of objects extracted from requests. As I said it doesn't have to be ArrayList or List at all.
I have also thought about using one EJB, which would have to be @WebService @Singleton, but documentation says that this combination is "possible, but ... not defined by this specification."
Arjan, your requirement is not fully clear. Assuming you are building a high load application > 1000 request per second I would do:
Servlet-processing
Singleton EJB
TimerEJB
Benefit of the solution:
Drawback:
You cannot use @Singleton on your WS as the container may initilize more than one instance to deal wiht heavy load of requests.
Your @Singleton bean cannot use ArrayList<> as there will be concurrent access. You should use ConcurrentLinkedQueue instead. How your requests will be identified for the remove operation? Maybe a ConcurrentHashMap would be better for it.
Sooner or later you will run out of memory if you want to have "thousands (or more in future)" unless you dump the requests into DB or file. DB with JPA will be the easiest, you can achieve it with few annotations on your WS and Request object.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.