[ 
https://issues.apache.org/jira/browse/OWB-435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12898037#action_12898037
 ] 

YING WANG commented on OWB-435:
-------------------------------

Two more questions, 

1. My UserBean is a session scope bean and my decorator has a counter to record 
times of invocations. However, the count is always 1. It seems a new 
UserDecorator1 will be created for each request.

2. Actually a new UserDecorator1 will be created whenever a UserBean's method 
is invoked, even though the method is not defined in the decorator, could we 
improve this?

@Decorator
public abstract class UserDecorator1 implements UserInterface, Serializable 
{
        int count;
        
        @Inject @Delegate @Any UserInterface ui;
        
        public UserDecorator1() {
                count = 0;
        }
        
        public String getName() {
                count++;
                return "UserDecorator1(" + ui.getName() + ")." + count;
        }
}


> What is the expected result for following 2 decorators?
> -------------------------------------------------------
>
>                 Key: OWB-435
>                 URL: https://issues.apache.org/jira/browse/OWB-435
>             Project: OpenWebBeans
>          Issue Type: Question
>          Components: Interceptor and Decorators
>            Reporter: YING WANG
>            Assignee: Gurkan Erdogdu
>            Priority: Minor
>
> While I am testing 2 decorators decorate the same getName() method of 
> UserBean, I found the result is:
> 1. "UserDecorator1(UserDecorator2(MYNAME)) "   <==  Did call 
> UserDecorator1.getName() first, but before it finishes, it recursively 
> invokes the UserDecorator2.getName() on the calling stack.
> 2. or  should the result be:
> "UserDecorator2(MYNAME)"      <==== should decorator2's result overwrite 
> decorator1's?
> 3. or should the result be:
> "UserDecorator2(UserDecorator1(MYNAME)) "    <==== should decorator1's result 
> to the one used for decorator2?
> I prefer 3, but I am not sure which result is the correct one....
> ===================Userbean ========================
> public class UserBean implements UserInterface, Serializable 
> {
>     public String getName()
>     {
>       return "MYNAME";
>     }
> }
> ===================UserDecorator1 ========================
> @Decorator
> public abstract class UserDecorator1 implements UserInterface, Serializable 
> {
>       @Inject @Delegate @Any UserInterface ui;
>       
>       public String getName() {
>               return "UserDecorator1(" + ui.getName() + ")";
>       }
> }
> ===================UserDecorator2 ========================
> @Decorator
> public abstract class UserDecorator2 implements UserInterface, Serializable 
> {
>       @Inject @Delegate @Any UserInterface ui;
>       
>       public String getName() {
>               return "UserDecorator2(" + ui.getName() + ")";
>       }
> }
> ========================================================
>         <decorators>
>                 <class>com.jcdi.test.UserDecorator1</class>
>                 <class>com.jcdi.test.UserDecorator2</class>
>         </decorators>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to