[cdi-dev] [JBoss JIRA] (CDI-224) Support Decoration of no interface beans

Pete Muir (JIRA) jira-events at lists.jboss.org
Fri Sep 14 12:30:32 EDT 2012


     [ https://issues.jboss.org/browse/CDI-224?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pete Muir updated CDI-224:
--------------------------

         Assignee: Pete Muir
    Fix Version/s: 1.1.PRD
                       (was: TBD)

    
> Support Decoration of no interface beans
> ----------------------------------------
>
>                 Key: CDI-224
>                 URL: https://issues.jboss.org/browse/CDI-224
>             Project: CDI Specification Issues
>          Issue Type: Feature Request
>          Components: Decorators
>    Affects Versions: 1.0
>            Reporter: Aslak Knutsen
>            Assignee: Pete Muir
>             Fix For: 1.1.PRD
>
>
> According to CDI 1.0 Spec:
> "Decorators may be associated with any managed bean that is not itself an interceptor or decorator or with any EJB session bean."
> "The set of decorated types of a decorator includes all bean types of the managed bean which are Java interfaces, except for java.io.Serializable. The decorator bean class and its superclasses are not decorated types of the decorator."
> Both CDI and EJB support No interface beans, but for some reason Decorators only work on methods from a Interface. While Interceptors on the other hand work fine with Classes. 
> I can see no technical reason to why Decorators should only work on Interfaces since all Proxies etc should already be in place.
> {code}
> import javax.decorator.Decorator;
> import javax.decorator.Delegate;
> import javax.enterprise.inject.Any;
> import javax.inject.Inject;
> import junit.framework.Assert;
> import org.jboss.arquillian.container.test.api.Deployment;
> import org.jboss.arquillian.junit.Arquillian;
> import org.jboss.shrinkwrap.api.ShrinkWrap;
> import org.jboss.shrinkwrap.api.spec.WebArchive;
> import org.jboss.shrinkwrap.impl.BeansXml;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> @RunWith(Arquillian.class)
> public class DecoratesClassTestCase {
> 	@Deployment
> 	public static WebArchive create() {
> 		return ShrinkWrap.create(WebArchive.class)
> 				.addAsWebInfResource(
> 						new BeansXml().decorators(BusinessDecorator.class), "beans.xml");
> 	}
> 	
> 	@Test
> 	public void shouldBeAbleToDecorate(BusinessObject business) throws Exception {
> 		Assert.assertEquals("Decorated Test", business.send("Test"));
> 	}
> 	
> 	@Decorator
> 	public static abstract class BusinessDecorator extends BusinessObject {
> 		@Inject @Delegate @Any
> 		private BusinessObject delegate;
> 		
> 		public String send(String msg) {
> 			return "Decorated " + delegate.send(msg);
> 		}
> 	}
> 	
> 	public static class BusinessObject {
> 		
> 		public String send(String msg) {
> 			return msg;
> 		}
> 	}
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the cdi-dev mailing list