[
https://issues.jboss.org/browse/CDI-224?page=com.atlassian.jira.plugin.sy...
]
Thomas Andraschko commented on CDI-224:
---------------------------------------
"outcry" :D
We have a big product with many subproducts and customizations for customers.
In our core libs, we have many default view controllers beans and JSF cc's/includes..
For some subproducts, we @Specialize the view controllers or even create seperate
includes.
e.g.
core -> ViewAController
subprojectA -> SpecializedViewAController
Thats work fine with @Specialized/@Alternative.
We also have shared libs for each customer.
There we would like to decorate e.g. ViewAController.
As our controller are currently classes, it would be perfect if it would be possible to
apply decorators also on classes.
Currently we have to introduce interfaces for our view controllers, which is actually only
a workaround for this feature request because we don't gain any other benefit from
it.
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
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 was sent by Atlassian JIRA
(v6.3.1#6329)