[seam-dev] qualify common types

Pete Muir pmuir at redhat.com
Wed Apr 7 08:36:43 EDT 2010


Yet again, this shows that Java desperately needs a properly module system to work in the modern world!

On 2 Apr 2010, at 16:10, Dan Allen wrote:

> Seam 3 module writers,
> 
> Be sure that if you are producing a common type for internal use, such as a javax.naming.Context, that you qualify it to your module (or purpose). Otherwise, any other module that provides that type will conflict with your module (AmbigousResolutionException).
> 
> Here's an example:
> 
>    @Produces
>    public Context getContext() throws NamingException
>    {
>       return new InitialContext();
>    }
> 
> Here's another:
> 
>    public @Produces @ConversationScoped EntityManager getEntityManager()
>    {
>       return entityManager;
>    }
> 
> These should be qualified. In the first case, perhaps something like this for the foobar module:
> 
> @Produces @org.jboss.seam.foobar.annotations.Module
> public Context getContext() throws NamingException
> {
>    return new InitialContext();
> }
> 
> If the type is common, but your module is expected to produce it, then it's okay for it to be unqualified (@Default qualifier). For example, the international module may be expected to produce a java.util.Locale. The developer shouldn't use two international modules, so this is fine. I would call this a @Default type which your module exports. It would be good to provide this list in your documentation.
> 
> If you have any feedback or additional suggestions, feel free to comment.
> 
> Dan
> 
> -- 
> Dan Allen
> Senior Software Engineer, Red Hat | Author of Seam in Action
> Registered Linux User #231597
> 
> http://mojavelinux.com
> http://mojavelinux.com/seaminaction
> http://www.google.com/profiles/dan.j.allen
> _______________________________________________
> seam-dev mailing list
> seam-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/seam-dev




More information about the seam-dev mailing list