Seam2 uses javassit, not cglib. It makes sense once you understand
it, and I think the documentation says injection cannot be done with
final methods / variables. I know I was bit by this early on in my
Seam usage. It may just be an issue getting to know Seam.
On Thu, Jun 3, 2010 at 03:17, Michael Schütz <michaelschuetz83(a)gmail.com> wrote:
OK,
in CDI it's disallowed by spec:
" 5.4.1.Unproxyable bean types
Certain legal bean types cannot be proxied by the container:
•classes which don't have a non-private constructor with no parameters,
•classes which are declared final or have final methods
If an injection point whose declared type cannot be proxied by the container
resolves to a bean with a normal scope, the
container automatically detects the problem and treats it as a deployment
problem."
Anyway, the NPE in Seam2 is misleading. A cglib exception is swallowed.
Correct?
Michael
2010/6/3 Michael Schütz <michaelschuetz83(a)gmail.com>
>
> Hi to all,
>
> in Seam2, using injected member within final method will cause an NPE at
> Runtime. The reason for that is, that Seam2 uses cglib for dynamic proxying
> und subclassing is not possible for final methods.
>
> Example:
> @Name("simpleSeamComp")
> public class SimpleSeamComponent {
> public String getName() {
> return "Sam";
> }
> }
>
> @Name("finalSeamComp")
> public class FinalSeamComponent {
>
> @In(create = true)
> private SimpleSeamComponent simpleSeamComp;
>
> // causes NullPointerException
> public final String getHello() {
> return simpleSeamComp.getName();
> }
> }
>
>
> How will Seam3/CDI behave in that case?
>
>
>
> Thanks and regards
> Michael
>
_______________________________________________
seam-dev mailing list
seam-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/seam-dev
--
Jason Porter
Software Engineer
Open Source Advocate
PGP key id: 926CCFF5
PGP key available at:
keyserver.net,
pgp.mit.edu