[wildfly-dev] WFLY-508, JBeret initial review and integration issues

Cheng Fang cfang at redhat.com
Wed Jul 24 14:14:46 EDT 2013


On 7/24/13 12:52 PM, Stuart Douglas wrote:
> I have also been looking at this today, and there are quite a few 
> things in the code base that worry me about its quality.
>
> 1) JdbcRepository seems to save jobs to the database but never seems 
> to actually load them again or remove them? [1]
JdbcRepository is still work in progress, and is currently not used yet.
>
> 2) Some things seem to be implemented in a very inefficient manner, 
> using lists when a map or a set would be more appropriate. For example 
> i 
> <https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/java/org/jberet/repository/JdbcRepository.java#L36>n 
> AbstractJobRepository all jobs are stored in a list, and as a result 
> every operation on the repo is O(n) on the number of jobs. A map would 
> be a far more suitable data structure here. This will be a real 
> problem is a customer is ever trying to scale to even a moderately 
> sized number of jobs and job instances.
See my reply to previous message.  Initially I did implement it as a 
map, but didn't like duplicating id as the key so changed it to list.  I 
don't expect the number of jobs to be that large, or access to jobs to 
be a hot spot.  But I'm open to switch it since the feedback so far has 
favored a mapping lookup.
>
> 3) Thread safety
> Almost all objects in the code base are mutable (i.e. no use of 
> final), and with a few exceptions most of the code is not 
> synchronized. From what I can see not much thought has been given to 
> thread safety, and looking through the code I think there are quite a 
> few places where there are the potential to have threading issues. 
> e.g. In [2], where a list that is being modified concurrently is 
> returned to the caller. The caller cannot safely use the list, as it 
> may be modified by another thread as it is being iterated. There are 
> other places where I think there are the potential for races, however 
> I don't know the code well enough to be sure.
If most of the code is synchronized, I would also be worried;-) .  But I 
agreeed, thread safety is the area we need to look more closely as we 
integrate to WildFly.  In {2], what's your recommendation? to always 
return a new list the the caller, which seems a bit wasteful.
>
> 4) It looks like it has been designed as a standalone project to be 
> embedded into a deployment, and no thought has been given to how to 
> actually integrate it into Wildfly. I know David already mentioned the 
> statics issue, but this is a big problem. e.g. only one 
> jberet.properties will be loaded, so if two applications have 
> different properties files then one will leak into the other app, 
> depending on the current TCCL when the BatchConfig class is first 
> accessed.
jberet.properties is only for standalone distro.  For running in 
WildFly, all configuration will be included in subsystem configuration.

Appreciate all the feedback!

Cheng
>
> Stuart
>
> [1] 
> https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/java/org/jberet/repository/JdbcRepository.java#L36
> [2] 
> https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/java/org/jberet/runtime/JobExecutionImpl.java#L134
>
>
>
> On Wed, Jul 24, 2013 at 6:09 PM, David M. Lloyd 
> <david.lloyd at redhat.com <mailto:david.lloyd at redhat.com>> wrote:
>
>     On initial review of JBeret we have noticed a number of issues
>     that need
>     to be addressed.  The culmination amounts to a series of questions and
>     observations here:
>
>     #1) Why did we not choose to just use the RI?  In other words, what
>     benefit do we get from JBeret that is not also in the RI?  In other,
>     other words, why should we *use* this code instead of the RI at this
>     point in time?
>
>     #2) Why does JBeret duplicate facilities already present in the
>     WildFly
>     code base and deployer chain - e.g. annotation indexing, reflection
>     indexing, thread management, parsing facilities, etc.?
>
>     #3) Specific to algorithmic complexity - it appears that jobs are
>     keyed
>     by ID, yet accessed using a sequential search [1] - this does not
>     scale
>     well to large numbers of jobs.  Is there no better approach?
>
>     #4) JAXB seems to be being used to parse XML, which is a departure
>     from
>     all of our other services which expect parsing to be done during
>     deployment processing in a more efficient manner.  Is there any better
>     way we can integrate this, preferably not using JAXB?
>
>     #5) There are a number of resources present that seem
>     inappropriate for
>     the production JAR [2] [3].  Is this intentional?
>
>     #6) This code base makes extensive use of static state, including
>     static
>     fields that seem not to be adequately protected for thread-safety, and
>     at least one static thread pool [4].  This needs to be fixed, as these
>     kinds of things make embedding difficult or impossible.
>
>     [1]
>     https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/java/org/jberet/repository/AbstractRepository.java#L50
>     [2]
>     https://github.com/jberet/jsr352/tree/master/jberet-core/src/main/resources/sql
>     [3]
>     https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/resources/jobXML.xjb
>     [4]
>     https://github.com/jberet/jsr352/blob/master/jberet-core/src/main/java/org/jberet/util/ConcurrencyService.java#L22
>
>     --
>     - DML
>     _______________________________________________
>     wildfly-dev mailing list
>     wildfly-dev at lists.jboss.org <mailto:wildfly-dev at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
>
>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/wildfly-dev/attachments/20130724/120cd07d/attachment-0001.html 


More information about the wildfly-dev mailing list