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

Tommaso Teofili commented on JCR-3534:
--------------------------------------

> Any key generation should come from the repository itself. Currently it's 
> mixed - generating is done by the client (needs to know the right format) and 
> later reading & validating is done by the repository in createValue(). It 
> should all be done by the repository, the client code should not have to know 
> the format of the signature. I was thinking that we change the 
> JackrabbitValue#getContentIdentity() [0] to return the final secure/signed 
> token format. Should be possible to detect old and new IDs IMHO. This 
> requires that other code (where?) that uses the content identity can work 
> with the new format as well.

generating a BinaryReferenceMessage has to be done with 
BinaryReferenceMessage(String contentIdentity, String key, long 
referencedBinaryLength) which doesn't require any knowledge of signature / 
message format.
I'm -0.5 for changing JackrabbitValue#getContentIdentity(), IMHO that may be 
really confusing as it wouldn't expose the content identity anymore but a 
message with other semantics.

> - BinaryReferenceMessage should go into jackrabbit-api instead of 
> jackrabbit-jcr-commons since it's a specific Jackrabbit API and jcr-commons 
> is more about utilities around both JCR API users and JCR implementors, which 
> makes it hard to find actual jackrabbit specific features

if you'd say jackrabbit-core then it probably makes more sense, otherwise it 
seems to me this is not "that" high level to justify its belonging to 
jackrabbit-api, in the end its main purpose is to allow "efficient copying of 
binaries across repositories with the same datastore", which seems to me best 
fit a core concept related to some specific deployments.

> BinaryReferenceMessage also implements getStream(), read() and getSize() by 
> providing the message token - IMHO that is misleading if it is used as 
> special interface only. These should probably return null. The repository 
> itself would never return such a Binary itself.

that's basically for compatibility with existing code where you may now receive 
such an object and you wouldn't expect that to return null.

                
> Efficient copying of binaries across repositories with the same data store
> --------------------------------------------------------------------------
>
>                 Key: JCR-3534
>                 URL: https://issues.apache.org/jira/browse/JCR-3534
>             Project: Jackrabbit Content Repository
>          Issue Type: New Feature
>          Components: jackrabbit-api, jackrabbit-core
>    Affects Versions: 2.6
>            Reporter: Felix Meschberger
>            Assignee: Tommaso Teofili
>         Attachments: JCR-3534.2.patch, JCR-3534.3.patch, JCR-3534.patch, 
> JCR-3534.patch
>
>
> we have a couple of use cases, where we would like to leverage the global 
> data store to prevent sending around and copying around large binary data 
> unnecessarily: We have two separate Jackrabbit instances configured to use 
> the same DataStore (for the sake of this discussion assume we have the 
> problems of concurrent access and garbage collection under control). When 
> sending content from one instance to the other instance we don't want to send 
> potentially large binary data (e.g. video files) if not needed.
> The idea is for the sender to just send the content identity from 
> JackrabbitValue.getContentIdentity(). The receiver would then check whether 
> the such content already exists and would reuse if so:
> String ci = contentIdentity_from_sender;
> try {
>     Value v = session.getValueByContentIdentity(ci);
>     Property p = targetNode.setProperty(propName, v);
> } catch (ItemNotFoundException ie) {
>     // unknown or invalid content Identity
> } catch (RepositoryException re) {
>     // some other exception
> }
> Thus the proposed JackrabbitSession.getValueByContentIdentity(String) method 
> would allow for round tripping the JackrabbitValue.getContentIdentity() 
> preventing superfluous binary data copying and moving. 
> See also the dev@ thread 
> http://jackrabbit.markmail.org/thread/gedk5jsrp6offkhi

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to