[jboss-user] [JBossCache] - Re: CR3 Listener

jason.greene@jboss.com do-not-reply at jboss.com
Mon Jul 16 09:55:44 EDT 2007


"FredrikJ" wrote : 
  | 1. Wouldn't this be considered a major api change(?) and as such should not go in between two cr releases?
  | 

Unfortunately we ran into unexpected implementation problems that the current API could not address. We had to choose between complicating the system by introducing a secondary API, or breaking API compatibility and fixing the extensibility problems that lead to this issue in the first place. We decided that overall it was better to get a solid, extensible, and easy to use API with well defined behavior in the GA. Had this issue been discovered after GA, we would have not taken this option.

Before making this change, we also posted a detailed proposal and asked for feedback from everyone.

anonymous wrote : 
  | 2. I understand that the benefit is that you can choose to declare only those listener methods you are interested of, thus reducing the amount of empty boilerplate listener methods. However, the downpart is that we are losing type safety here and I personally do not consider this a good bargain. 
  | 

That is one of the benefits, although the main reason is to allow easy extensibility. In this model we can add a new notification type in a future release, and it will not break existing listeners.

anonymous wrote : 
  | Now, isn't this exactly why we have interfaces? An interface enforces signature and types. If we fail to honor the interface we get a nice compilation error, with the annotation based model we will get runtime checking and runtime errors. 
  | 

As mentioned above, the interface in this particular use case is not the best fit. It can't be extended, and it forces you to choose between implementing a bunch of methods you don't care about, or polluting your inheritance tree with a JBoss Cache class. The annotation model lets you choose whatever class design fits your application the best.

You do lose compile time checking, although the API is very simple and predictable. The run-time error occurs the first time you register a listener,  which should be close to immediate. 

Also, I should note that this is not a unique concept. EJB3 and DI frameworks use similar concepts.

anonymous wrote : 
  | If we look at the list of available annotations here http://labs.jboss.com/file-access/default/members/jbosscache/freezone/docs/2.0.0.CR3/JBossCache-UserGuide/en/html_single/index.html#api.listener we can see that the input ot the methods differ. Now I have to switch between my IDE and the documentation to lookup the annotation and what the proper signature is. Should I fail to comply, my IDE will not tell me since there is no compile-time checking.
  | 

If you point your IDE to the JBossCache javadocs, you will be able to pull up the info without leaving it, since we put docs on all the annotations. Also there is an easy convention, all notification methods take a single parameter, and its type is the annotation name + "Event".

i.e.  @NodeModified public void doSomething(NodeModifiedEvent event) {}


anonymous wrote : 
  | Furthermore, since there is no longer a CacheListener interface, I cannot use that interface for listener-registration in layers created on top of the cache, forcing me either into allowing Object or creating my own Listener interface which will allow me at least some typesafety. But in the end I will never really know until the cache is started and every possible listener has been registered to the cache, right?
  | 

Yes, although typically this occurs right away. Also usually one would test their listener before going into production, as compile time safety does not promise run-time correctness.

anonymous wrote : 
  | Generally I'm not opposed annotations. I think they do fill a purpose, but I can't seem understand the reasons for this particular design decision. 

I appreciate your feedback, and I understand your concerns. We are still open to any ideas you have that can make this better.

Here is the trail for all the design discussions that lead to these changes:
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=110525
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=111094
http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossCacheListenerAPIProposal
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=110911

-Jason

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064559#4064559

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4064559



More information about the jboss-user mailing list