[ 
https://issues.apache.org/jira/browse/OWB-912?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

icarus updated OWB-912:
-----------------------

    Description: 
Hello, in my Project I use a ServletContextListener to execute code after the 
Application is deployed.

I have a interface “StartListener” with a single Metod, void onStart(), and all 
classes that implement this interface are injected in my ServletContextListener 
with @Inject @All.
In a loop I execute the onStart() Method of every StartListener.

It works as expected.
In my Sample Project I have 3 classes (StartListenerImpl1 – StartListenerImpl3) 
that implement the interface and just log their name. So if I deploy the 
Application I see in the log:

StartListenerImpl1
StartListenerImpl2
StartListenerImpl3

Now I add another class SpecialStartListenerImpl that extends 
StartListenerImpl1. I annotate it with @Specializes, overwrite the onStart() 
Method to log SpecialStartListenerImpl and deploy the application.

What I expect to see in the log:

SpecialStartListenerImpl 
StartListenerImpl2
StartListenerImpl3

What is in the logs if I deploy the application to Tomee 1.6

SpecialStartListenerImpl 

StartListenerImpl2 and StartListenerImpl3 were not instantiate and not injected 
in the ServletContextListener. @Specializes did not only deactivate 
StartListenerImpl1 but also StartListenerImpl2 and StartListenerImpl3. This is 
of course not what I wanted.

If I deploy the same application on Glassfish 4.0 I get what I expect:

SpecialStartListenerImpl 
StartListenerImpl2
StartListenerImpl3

I created an Thread in the TomEE forum. Link: 
http://openejb.979440.n4.nabble.com/Weird-Behavior-with-Specializes-and-Inject-Any-td4665967.html#a4665971

Romain Manni-Bucau already created a patch that is also linked in the thread. 
Link to patch:
https://gist.github.com/rmannibucau/1895920da61c11ae245c

I will upload my sample project here as well. 

  was:
Hello, in my Project I use a ServletContextListener to execute code after the 
Application is deployed.

I have a interface “StartListener” with a single Metod, void onStart(), and all 
classes that implement this interface are injected in my ServletContextListener 
with @Inject @All.
In a loop I execute the onStart() Method of every StartListener.

It works as expected.
In my Sample Project I have 3 classes (StartListenerImpl1 – StartListenerImpl3) 
that implement the interface and just log their name. So if I deploy the 
Application I see in the log:

StartListenerImpl1
StartListenerImpl2
StartListenerImpl3

Now I add another class SpecialStartListenerImpl that extends 
StartListenerImpl1. I annotate it with @Specializes, overwrite the onStart() 
Method to log SpecialStartListenerImpl and deploy the application.

What I expect to see in the log:

SpecialStartListenerImpl 
StartListenerImpl2
StartListenerImpl3

What is in the logs if I deploy the application to Tomee 1.6

SpecialStartListenerImpl 

StartListenerImpl2 and StartListenerImpl3 were not instantiate and not injected 
in the ServletContextListener. @Specializes did not only deactivate 
StartListenerImpl1 but also StartListenerImpl2 and StartListenerImpl3. This is 
of course not what I wanted.

If I deploy the same application on Glassfish 4.0 I get what I expect:

SpecialStartListenerImpl 
StartListenerImpl2
StartListenerImpl3

I created an Thread in the TomEE forum. Link: 
http://openejb.979440.n4.nabble.com/Weird-Behavior-with-Specializes-and-Inject-Any-td4665967.html#a4665971

Romain Manni-Bucau already created a patch that is also linked in the thread. 

I will upload my sample project here as well. 


> Weird Behavior with @Specializes and @Inject @Any
> -------------------------------------------------
>
>                 Key: OWB-912
>                 URL: https://issues.apache.org/jira/browse/OWB-912
>             Project: OpenWebBeans
>          Issue Type: Bug
>            Reporter: icarus
>         Attachments: Webmodul.zip
>
>
> Hello, in my Project I use a ServletContextListener to execute code after the 
> Application is deployed.
> I have a interface “StartListener” with a single Metod, void onStart(), and 
> all classes that implement this interface are injected in my 
> ServletContextListener with @Inject @All.
> In a loop I execute the onStart() Method of every StartListener.
> It works as expected.
> In my Sample Project I have 3 classes (StartListenerImpl1 – 
> StartListenerImpl3) that implement the interface and just log their name. So 
> if I deploy the Application I see in the log:
> StartListenerImpl1
> StartListenerImpl2
> StartListenerImpl3
> Now I add another class SpecialStartListenerImpl that extends 
> StartListenerImpl1. I annotate it with @Specializes, overwrite the onStart() 
> Method to log SpecialStartListenerImpl and deploy the application.
> What I expect to see in the log:
> SpecialStartListenerImpl 
> StartListenerImpl2
> StartListenerImpl3
> What is in the logs if I deploy the application to Tomee 1.6
> SpecialStartListenerImpl 
> StartListenerImpl2 and StartListenerImpl3 were not instantiate and not 
> injected in the ServletContextListener. @Specializes did not only deactivate 
> StartListenerImpl1 but also StartListenerImpl2 and StartListenerImpl3. This 
> is of course not what I wanted.
> If I deploy the same application on Glassfish 4.0 I get what I expect:
> SpecialStartListenerImpl 
> StartListenerImpl2
> StartListenerImpl3
> I created an Thread in the TomEE forum. Link: 
> http://openejb.979440.n4.nabble.com/Weird-Behavior-with-Specializes-and-Inject-Any-td4665967.html#a4665971
> Romain Manni-Bucau already created a patch that is also linked in the thread. 
> Link to patch:
> https://gist.github.com/rmannibucau/1895920da61c11ae245c
> I will upload my sample project here as well. 



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to