[
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)