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

David Blevins resolved TOMEE-1040.
----------------------------------

    Resolution: Fixed

> Abstract Dynamic Beans
> ----------------------
>
>                 Key: TOMEE-1040
>                 URL: https://issues.apache.org/jira/browse/TOMEE-1040
>             Project: TomEE
>          Issue Type: New Feature
>            Reporter: David Blevins
>             Fix For: 1.6.0
>
>
> If the bean class is abstract and implements 
> java.lang.reflect.InvocationHandler, then the abstract methods will delegate 
> to the bean's java.lang.reflect.InvocationHandler.invoke(..) method.
> This allows for sort of a hybrid approach where some methods can be abstract 
> and handled in a reflection-like manner, while others can be implemented 
> regularly.
> An interesting difference is the code takes extreme care to implement all the 
> constructors of the parent class as well as the annotations of the parent 
> class and any method annotations and method param annotations of abstract 
> methods.
> This should allow the dynamically created class to replace the parent class 
> in every way, including usage in annotation heavy APIs like JAX-RS, JAX-WS or 
> CDI.  I tested JAX-RS and it seems to work perfectly.
> For example see this RESTful service:
> {code}
>    @Stateless
>    @Path("/ejb")
>    public abstract class RESTIsVeryCool implements InvocationHandler {
>        @EJB
>        private SimpleEJB simpleEJB;
>        @javax.ws.rs.core.Context
>        Request request;
>        @Path("/normal")
>        @GET
>        public abstract String normal();
>        @Path("/rest")
>        @GET
>        public abstract String rest();
>        @Path("/param")
>        @GET
>        public String param(@QueryParam("arg") @DefaultValue("true") String p) 
> {
>            return p;
>        }
>        @Path("/field")
>        @GET
>        public boolean field() {
>            return "GET".equals(request.getMethod());
>        }
>        @Override
>        public Object invoke(Object proxy, Method method, Object[] args) 
> throws Throwable {
>            return simpleEJB.ok();
>        }
>    }
> {code}



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

Reply via email to