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 <[EMAIL PROTECTED]>
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 <
> [EMAIL PROTECTED]>
> 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 <
> [EMAIL PROTECTED]
> > >
> > 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 <
> > > [EMAIL PROTECTED]>
> > > 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 <
> > > [EMAIL PROTECTED]
> > > > >
> > > > 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 <
> > > > > [EMAIL PROTECTED]>
> > > > > 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 <
> > > > > [EMAIL PROTECTED]
> > > > > > >
> > > > > > 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 <
> > > > > > > [EMAIL PROTECTED]>
> > > > > > > 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 <
> > > > > > > > [EMAIL PROTECTED]>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > comments inline below. Thank you for the response.
> > > > > > > > >
> > > > > > > > > On Tue, Jul 22, 2008 at 2:20 PM, Julian Reschke <
> > > > > > [EMAIL PROTECTED]
> > > > > > > >
> > > > > > > > > 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