Hi Sounds like an interesting proposal (except that we don't use the "I" prefix for interfaces).
Am 29.03.2013 um 20:14 schrieb Dan Klco: Hello Everyone, A colleague (Michael Kelleher) and I have built an extension we would be interested in incorporating into Sling, as a contributed module. A short synopsis of this is, it functions as a far simpler, read-only ORM for Sling. It allows a developer to define an Interface, and with the use of Annotations, and a Service, create an instance backed by resource(s) within JCR. The mapping of method names to JCR properties is configured with annotations and interpreted by the Java Proxy InvocationHandler to map back to Sling Resources and properties. Here’s an example usage of the Sling Dynamic Proxy: public interface Page extends ISlingProxy { /** * Gets the property jcr:created */ @SlingProperty(name=”jcr:created”) public Date getCreationDate(); /** * Gets the property jcr:description at the sub path jcr:content, the path is not required and can be absolute */ @SlingProperty(name=”jcr:description”, path=”jcr:content”) public String getDescription(); What's the difference to something like: @SlingProperty(name=”jcr:content/jcr:description”) would that be like a "search path" ? Regards Felix /** * Gets the property jcr:title at the sub path jcr:content, the path is not required and can be absolute */ @SlingProperty(name=”jcr:title”, path=”jcr:content”) public String getTitle(); /** * Gets the content resource, this could also return a class which can be adapted from a resource or another proxy instance. */ @SlingReference(path=”jcr:content”) public Resource getContentResource(); /** * Gets the children of the current resource, the return type should match the return type in the generic of the return Iterator. */ @SlingChildren(returnType=Resource.class, path=””) public Iterator<Resource> getChildren(); } You could then retrieve an instance of the proxy as such: Resource resource; ISlingProxyService slingProxyService; {…} Page page = slingProxyService.getProxy(resource, Page.class); You can check out the code, including some basic tests on GitHub: https://github.com/sixdimensions/sling-proxy We both hope this project will be of interest to the Sling developers and the Sling community. Thanks, Dan Klco Senior Staff Engineer, Adobe WEM / Day CQ5 San Ramon, CA / Dayton, OH <http://www.sixdimensions.com/> Cell (937) 231-3050 Office (937) 343-1326 Fax (877) 510-5082 LinkedIn<http://www.linkedin.com/in/klcodanr> | @KlcoDanR<https://twitter.com/klcodanr> People. Deliver. Progress. -- Felix Meschberger | Principal Scientist | Adobe