Hi,
Shelly has reported a bug and a fix for 4.1 where the JMS buffers fill up because of failure to close things properly. The fix is to add "connection.close();" to the following two files.
exposed/src/main/java/org/icatproject/exposed/interceptor/LogoutInterceptor.java user-ldap/src/main/java/org/icatproject/userldap/facility/LoginInterceptor.java
If it is desired I will produce a 4.1.2 with this correction. Please tell me if you want this. It is only a problem (I think) with a high rate of ICAT calls.
I have been investigating the poor performance of the "get" and "search" calls. It is caused by unexpected behaviour of EclipseLink. They have added functionality which is not present in hibernate to do lazy evaluations outside of a transaction and even when the persistence context has been cleared and all entities detached. The result of this was that the handling of the INCLUDE mechanism was very inefficient leading to many queries for things which had not been requested. I have found no way to turn this behavior off, so I plan to copy the data structure to be output before allowing the copy to be handled by JAX-WS. I have tried it for one entity type and found that it solves the problem. If anybody knows of a way to really detach the entities I would be very pleased to hear about it otherwise I may write a "pruned" operation for each entity which returns a new object with the desired contents and which recurses down to copy everything that is needed. An alternative which would be more robust (as there is no opportunity to miss an attribute) but probably slower would be to use reflection. I might get the best of both worlds by writing a code generator to generate the code for each entity type. This is a very significant performance problem - perhaps a factor of five, however as it is "only" performance I propose to release a 4.2 sooner than expected with just the performance enhancement and the decoupled authentication mechanism. Shelly's bug will vanish as the offending authn code has gone.
I have another issue where I am looking for advice. Currently icat has a top level module with component modules in sub-directories, each with its own pom. This structure means that all components get the same version number (mainly because of SVN tagging of the top level module) which gets increased though nothing has changed. Do people have any experience of using maven this way - or better suggestions.
Steve