Intentando heredar de un componente de seam, me he topado con que el modo en que Seam carga los componentes puede limitarnos a la hora de hacer subclases de componentes existentes (Eso si, si el nuevo componente heredado no sobreescribe al padre instalandolo com más prioridad).
El problema viene en el modo en que Seam lee las anotaciones de los métodos del componente. Para ello, en org.jboss.seam.Component, encontramos lo siguiente:
.... for ( ; clazz!=Object.class; clazz = clazz.getSuperclass() ) { for ( Method method: clazz.getDeclaredMethods() ) { scanMethod(applicationContext, selectionSetters, dataModelNames, method); } .....
O lo que es lo mismo, procesa todos los métodos de las superclases de forma normal, por lo que si nuestra clase padre (como en mi caso) tiene un método anotado con @Factory(“unidentificadorcualquiera”), no podremos heredar de ella, puesto que al arrancar nuestro nuevo componente, seam lanzará un error indicando que ambos componentes (padre e hijo) declaran una factoría llamada “unidentificadorcualquiera”.
0 comentarios