jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nick Stuart" <nstu...@speranzasystems.com>
Subject Re: saving files
Date Wed, 23 Jul 2008 15:31:46 GMT
Hmm, wouldn't think the parent node type would have any effect on the
subnodes at all, but I do put all my files in folder nodes so never had this
case. A bit strange, but there might be a valid reason for it. *shrug*

On Wed, Jul 23, 2008 at 11:29 AM, Michael Harris <michael.e.harris@gmail.com>
wrote:

> yep
>
> On Wed, Jul 23, 2008 at 11:27 AM, Michael Harris <
> michael.e.harris@gmail.com>
> wrote:
>
> > Im using a TransientRepository.
> >
> > I wonder if its because Im putting the nt:file in the root node and not
> in
> > a node of type folder.
> >
> >
> > On Wed, Jul 23, 2008 at 11:22 AM, Nick Stuart <
> nstuart@speranzasystems.com>
> > wrote:
> >
> >> Hm, that is odd. Are you using a file DataStore or is everything being
> >> saved
> >> in the database?
> >>
> >> I have a simple DataStore element in my repo config like this:
> >> <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
> >>        <param name="path" value="${rep.home}/repository/datastore"/>
> >>        <param name="minRecordLength" value="100"/>
> >>    </DataStore>
> >>
> >> (syntax might be different for 1.4, cant remember)
> >>
> >> Again, this shouldn't matter as it worked before when saving to
> database.
> >> The other thing to look at if you do have a file DataStore is the
> >> directory
> >> itself. It should have some folders and files in there, all with weird
> >> names, but you should be able to find what you added to the repo. And
> >> changing it to the FileDataStore lets you test this out too, where I'm
> not
> >> quite sure where to look if things are in the DB.
> >>
> >> On Wed, Jul 23, 2008 at 11:05 AM, Michael Harris <
> >> michael.e.harris@gmail.com>
> >> wrote:
> >>
> >> > yeah tried that and no dice.  wierd eh.  I confirmed that the testFile
> >> has
> >> > content in it....
> >> >
> >> > On Wed, Jul 23, 2008 at 11:01 AM, Nick Stuart <
> >> nstuart@speranzasystems.com
> >> > >
> >> > wrote:
> >> >
> >> > > Well the only thats really different between that and my code is
> >> setting
> >> > > mimeType and encoding to empty. I don't touch the encoding at all,
> and
> >> > > always set the mimeType to something even if it is just text/plain.
> >> Other
> >> > > then that it looks about the same. Try hardcoding at least mimeType
> to
> >> > > 'text/plain' and remove the encoding bit and see if you get better
> >> > results.
> >> > > That may be screwing up the retrieval bit, not sure why it would
> >> though.
> >> > >
> >> > > -Nick
> >> > >
> >> > > On Wed, Jul 23, 2008 at 10:56 AM, Michael Harris <
> >> > > michael.e.harris@gmail.com>
> >> > > wrote:
> >> > >
> >> > > > yeah man I tried writing the retrieved stream to a file, it is
> >> empty.
> >> > >  The
> >> > > > file that I save definitely has content (confirmed by less).
> >> > > >
> >> > > > Perhaps you can take a look see (the code isn't complicated);
> having
> >> > more
> >> > > > experience than me you could identify obvious problems pretty
> >> quickly.
> >> > > >
> >> > > > here is the save code
> >> > > >
> >> > > >    public void saveFile(File file, Session session) throws
> Exception
> >> {
> >> > > >        // create the file node - see section 6.7.22.6 of the
spec
> >> > > >
> >> > > >        Node folderNode = session.getRootNode();
> >> > > >        Node fileNode = folderNode.addNode(file.getName(),
> >> "nt:file");
> >> > > >
> >> > > >        // create the mandatory child node - jcr:content
> >> > > >        Node resNode = fileNode.addNode("jcr:content",
> >> "nt:resource");
> >> > > >        resNode.setProperty("jcr:mimeType", "");
> >> > > >        resNode.setProperty("jcr:encoding", "");
> >> > > >         FileInputStream fileInputStream = new
> FileInputStream(file);
> >> > > >        resNode.setProperty("jcr:data", fileInputStream);
> >> > > >         Calendar lastModified = Calendar.getInstance();
> >> > > >        lastModified.setTimeInMillis(file.lastModified());
> >> > > >        resNode.setProperty("jcr:lastModified", lastModified);
> >> > > >
> >> > > >         session.save();
> >> > > >    }
> >> > > >
> >> > > > and here is the test code
> >> > > >
> >> > > >    protected void setUp() throws Exception {
> >> > > >        super.setUp();
> >> > > >        String testFileName = "/tmp/" + getName() + ".txt";
> >> > > >        FileWriter fw = new FileWriter(testFileName);
> >> > > >        fw.write("some content");
> >> > > >        fw.flush();
> >> > > >        testFile = new File(testFileName);
> >> > > >    }
> >> > > >
> >> > > >
> >> > > >    public void testSaveFile() throws Exception {
> >> > > >        Session session = getSession();
> >> > > >        dao.saveFile(testFile, session);
> >> > > >
> >> > > >        Node root = session.getRootNode();
> >> > > >         Node fileNode = root.getNode(testFile.getName());
> >> > > >        Node fileDetails = fileNode.getNode("jcr:content");
> >> > > >
> >> > > >        Property fileProp = fileDetails.getProperty("jcr:data");
> >> > > >         InputStream retrievedStream = fileProp.getStream();
> >> > > >
> >> > > >        FileOutputStream fos = new
> >> > > > FileOutputStream("/tmp/retrievedFile.txt");
> >> > > >        byte[] buf = new byte[256];
> >> > > >        int read = 0;
> >> > > >        while ((read = retrievedStream.read(buf)) > 0) {
> >> > > >            fos.write(buf, 0, read);
> >> > > >            fos.flush();
> >> > > >        }
> >> > > >
> >> > > >
> >> > > >    }
> >> > > >
> >> > > > On Wed, Jul 23, 2008 at 10:38 AM, Nick Stuart <
> >> > > nstuart@speranzasystems.com
> >> > > > >
> >> > > > wrote:
> >> > > >
> >> > > > > I know that works as I've used it extensively. I am on a
1.5
> >> build,
> >> > but
> >> > > > it
> >> > > > > was working with the 1.4.x build I started with. Have you
looked
> >> at
> >> > the
> >> > > > > stream going in to make sure something is actually being
saved?
> >> You
> >> > > > > obviously have the node and property there or otherwise
you
> would
> >> be
> >> > > > > getting
> >> > > > > a RepositoryException.
> >> > > > >
> >> > > > > I would check to make sure you are saving everything you
think
> you
> >> > are.
> >> > > > > Also, try just using the stream and ignore the debugger
(it
> might
> >> be
> >> > > > lying
> >> > > > > to you, who knows). But it looks like everything is in order.
> >> > > > >
> >> > > > > On Wed, Jul 23, 2008 at 10:35 AM, Michael Harris <
> >> > > > > michael.e.harris@gmail.com>
> >> > > > > wrote:
> >> > > > >
> >> > > > > > Nick
> >> > > > > >
> >> > > > > > thanx for the reply.  when I do that and inspect the
returned
> >> > stream
> >> > > in
> >> > > > > the
> >> > > > > > eclipse debugger there is nothing in it.
> >> > > > > >
> >> > > > > > michael.
> >> > > > > >
> >> > > > > >
> >> > > > > >
> >> > > > > > On Wed, Jul 23, 2008 at 10:22 AM, Nick Stuart <
> >> > > > > nstuart@speranzasystems.com
> >> > > > > > >
> >> > > > > > wrote:
> >> > > > > >
> >> > > > > > > All you can really do is retrieve the InputStream
for said
> >> file.
> >> > > > Which
> >> > > > > > > should be enough, and the nodes hold the rest
of the info if
> >> you
> >> > > need
> >> > > > > it
> >> > > > > > > obviously (file name, type, etc).
> >> > > > > > >
> >> > > > > > > Something like:
> >> > > > > > >
> >> > > > > > > Node resNode = fileNode.getNode("jcr:content");
> >> > > > > > > resNode.getProperty("jcr:data").getStream();
> >> > > > > > >
> >> > > > > > > Where fileNode is the jcr:file node type. You
wont be able
> to
> >> > > > actually
> >> > > > > > get
> >> > > > > > > a
> >> > > > > > > File object becuase thats part of JCR, that it
extracts that
> >> > stuff
> >> > > > away
> >> > > > > > > from
> >> > > > > > > you, and you just deal with the contents and info.
> >> > > > > > >
> >> > > > > > > -Nick
> >> > > > > > >
> >> > > > > > > On Wed, Jul 23, 2008 at 10:16 AM, Michael Harris
<
> >> > > > > > > michael.e.harris@gmail.com>
> >> > > > > > > wrote:
> >> > > > > > >
> >> > > > > > > > ladies and gentlemen
> >> > > > > > > >
> >> > > > > > > > its still not obvious to me how to retrieve
the saved
> file.
> >> >  Can
> >> > > > > > someone
> >> > > > > > > > please illuminate the situation?
> >> > > > > > > >
> >> > > > > > > > thanx in advance.
> >> > > > > > > >
> >> > > > > > > > On Tue, Jul 22, 2008 at 3:05 PM, Michael
Harris <
> >> > > > > > > > michael.e.harris@gmail.com>
> >> > > > > > > > wrote:
> >> > > > > > > >
> >> > > > > > > > > comments inline below.  Thank you for
the response.
> >> > > > > > > > >
> >> > > > > > > > > On Tue, Jul 22, 2008 at 2:20 PM, Julian
Reschke <
> >> > > > > > julian.reschke@gmx.de
> >> > > > > > > >
> >> > > > > > > > > wrote:
> >> > > > > > > > >
> >> > > > > > > > >> Michael Harris wrote:
> >> > > > > > > > >>
> >> > > > > > > > >>> hey all,
> >> > > > > > > > >>>
> >> > > > > > > > >>> more newb questions here.
> >> > > > > > > > >>> Want to save a file in the repository.
 found this on
> >> the
> >> > > wiki
> >> > > > > > > > >>>
> >> > > > > > > > >>> Node folderNode = session.getRootNode();
> >> > > > > > > > >>>        Node fileNode =
> >> folderNode.addNode(file.getName(),
> >> > > > > > "nt:file");
> >> > > > > > > > >>>
> >> > > > > > > > >>>        // create the mandatory
child node -
> jcr:content
> >> > > > > > > > >>>        Node resNode = fileNode.addNode("jcr:content",
> >> > > > > > "nt:resource");
> >> > > > > > > > >>>        resNode.setProperty("jcr:mimeType",
"");
> >> > > > > > > > >>>        resNode.setProperty("jcr:encoding",
"");
> >> > > > > > > > >>>
> >> > > > > > > > >> > ...
> >> > > > > > > > >>
> >> > > > > > > > >> That is very bad advice. If you
don't know mimeType or
> >> > > encoding,
> >> > > > > do
> >> > > > > > > not
> >> > > > > > > > >> set it.
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >> Where did you find that?
> >> > > > > > > > >>
> >> > > > > > > > >
> >> > > > > > > > > I got the code from the wiki.  It had
the mimetype and
> the
> >> > > > encoding
> >> > > > > > > type.
> >> > > > > > > > > I modified the code and just put empty
strings in for
> now.
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >>
> >> > > > > > > > >>         resNode.setProperty("jcr:data",
new
> >> > > > > FileInputStream(file));
> >> > > > > > > > >>>        Calendar lastModified
= Calendar.getInstance();
> >> > > > > > > > >>>
> >>  lastModified.setTimeInMillis(file.lastModified());
> >> > > > > > > > >>>        resNode.setProperty("jcr:lastModified",
> >> > lastModified);
> >> > > > > > > > >>>
> >> > > > > > > > >>> Is the file itself being put
in the repository
> >> (jcr.data)
> >> > or
> >> > > > just
> >> > > > > > the
> >> > > > > > > > >>> content?
> >> > > > > > > > >>>
> >> > > > > > > > >>
> >> > > > > > > > >> The contents.
> >> > > > > > > > >>
> >> > > > > > > > >>  Do I even need the resNode?  Can
I just save the file
> >> into
> >> > > the
> >> > > > > > > > fileNode?
> >> > > > > > > > >>>
> >> > > > > > > > >>
> >> > > > > > > > >> Not unless you use a different node
type.
> >> > > > > > > > >>
> >> > > > > > > > >
> >> > > > > > > > > So does it mean anything to say "Can
I save the file
> >> itself?"
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > > so the above code I put into a DAO method
saveFile(File,
> >> > > > Session).
> >> > > > > >  In
> >> > > > > > > > the
> >> > > > > > > > > test for that method, i have
> >> > > > > > > > >
> >> > > > > > > > >         Node root = session.getRootNode();
> >> > > > > > > > >         // testFile is the file in the
Dao
> >> > > > > > > > >         Node fileNode =
> root.getNode(testFile.getName());
> >> > > > > > > > >         Node fileDetails =
> >> fileNode.getNode("jcr:content");
> >> > > > > > > > >
> >> > > > > > > > >         Property fileProp =
> >> > > fileDetails.getProperty("jcr:data");
> >> > > > > > > > >
> >> > > > > > > > > I am trying to get at the file contents,
which is just a
> >> > string
> >> > > > > "some
> >> > > > > > > > > content".
> >> > > > > > > > >
> >> > > > > > > > > on the property retrieved I dont see
the file content
> (Im
> >> in
> >> > > > > > eclipse's
> >> > > > > > > > > debugger).  How do I retrieve the file.
 What would a
> >> > > > > > > > > loadFile(Session, filename) method look
like?
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >>  Finally, we are going to need to
lock the file (which
> is
> >> > why
> >> > > we
> >> > > > > are
> >> > > > > > > > using
> >> > > > > > > > >>> jcr).  Is it possible to attach
info (like who owns
> the
> >> > lock)
> >> > > > to
> >> > > > > > the
> >> > > > > > > > >>> locked
> >> > > > > > > > >>> file?
> >> > > > > > > > >>>
> >> > > > > > > > >>
> >> > > > > > > > >> To some extent, that's part of the
JCR locking model
> (it
> >> > > > remembers
> >> > > > > > who
> >> > > > > > > > >> owns the lock, and exposes the information
both in the
> >> API
> >> > and
> >> > > > on
> >> > > > > > > > properties
> >> > > > > > > > >> defined in mix:lockable).
> >> > > > > > > > >>
> >> > > > > > > > >>  Thanx.  This community has been
quite helpful.
> >> > > > > > > > >>>
> >> > > > > > > > >>
> >> > > > > > > > >> BR, Julian
> >> > > > > > > > >>
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > > --
> >> > > > > > > > > ---------------------
> >> > > > > > > > > Michael Harris
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > > --
> >> > > > > > > > ---------------------
> >> > > > > > > > Michael Harris
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > > >
> >> > > > > >
> >> > > > > > --
> >> > > > > > ---------------------
> >> > > > > > Michael Harris
> >> > > > > >
> >> > > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > > --
> >> > > > ---------------------
> >> > > > Michael Harris
> >> > > >
> >> > >
> >> >
> >> >
> >> >
> >> > --
> >> > ---------------------
> >> > Michael Harris
> >> >
> >>
> >
> >
> >
> > --
> > ---------------------
> > Michael Harris
> >
>
>
>
> --
> ---------------------
> Michael Harris
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message