[ 
https://issues.apache.org/jira/browse/SLING-8450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16853113#comment-16853113
 ] 

Brendan Robert commented on SLING-8450:
---------------------------------------

It persists back to the JCR by way of Sling, but FWIW I'm not married to the 
name. :D  I do have a sample but it's intermingled with other things.  An 
excerpt of the code shows some methods you can use to persist a bean:

Firstly, this example assumes you have declared a method in your bean called 
"getPath" which provides the current node path, or for new content the desired 
target location.
{code:java}
    @Reference
    transient private JcrPersist jcrPersist;


    public void saveChanges() throws Exception {
        getJcrPersistService().persist(this, resource.getResourceResolver());
    }

    public void saveChanges(ResourceResolver res) throws Exception {
        getJcrPersistService().persist(this, res);
        if (resource == null) {
            resource = res.getResource(getPath());
        }
    }

    // This is an example of how the bean can get the service if it was 
recently constructed and didn't get the OSGi injection
    protected JcrPersist getJcrPersistService() {
        if (jcrPersist == null) {
            Bundle bundle = FrameworkUtil.getBundle(JcrPersist.class);
            ServiceReference<JcrPersist> ref = 
bundle.getBundleContext().getServiceReference(JcrPersist.class);
            jcrPersist = bundle.getBundleContext().getService(ref);
        }
        return jcrPersist;
    }


{code}

> JcrPersist: Provide transparent persistence to Sling Models
> -----------------------------------------------------------
>
>                 Key: SLING-8450
>                 URL: https://issues.apache.org/jira/browse/SLING-8450
>             Project: Sling
>          Issue Type: New Feature
>          Components: API
>            Reporter: Brendan Robert
>            Priority: Major
>         Attachments: SlingJCRPersist.zip
>
>
> As a developer using sling, I would like my sling models to serve as a core 
> of a MVC coding paradigm; however, it is not possible to do this without 
> writing my own persistence logic to save my sling models back into resources 
> for every project I do this.
> I propose a new module to work in tandem with Sling Models, such that Sling 
> Models serve as a mechanism to load data from JCR and the JcrPersist module 
> provides an OSGi service to save changes to beans back to the JCR via a 
> persist method.
> There are some complex sling model features, such as @via, which will likely 
> not be subject to this feature, and other cases such as transient variables 
> that should not be persisted.  The persist service should provide the 
> developer a sufficient set of features to decide how much or how little is 
> persisted with it.  Like Sling Models, this should rely on annotations so 
> that no additional external configurations are needed.
>  
> PS: Here's the implementation with ~90% unit test coverage.  See attached. :)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to