Hello, Thank you for the reply. I should have included my java memory settings in my previous post. I'm already running tomcat with the following settings: CATALINA_OPTS="-Xms128m -Xmx512m"
I'm did some more experiments, and while I get the failure from the getResource() call, I am able to call listResources(), and see that the resource name that I'm trying to access. Sometimes even after I do a successful listResources(), I still get the getResource() failure. Thanks again for the help, -Nate > I want to say I have ran into this before I would try increasing your > memory in your Tomcat. If that doesn't fix the problem let me know and I > can look into it deeper. > > Add this > > JAVA_OPTS="$JAVA_OPTS -Xmx512m" > > To the the top of catalina.sh > > Todd > > [EMAIL PROTECTED] wrote: >> Hello, >> >> I searched around these mail archives for posts about >> NullPointerExceptions, but I wasn't able to find a solution to my >> problem >> below. Any advice on how to find a solution would be greatly >> appreciated. >> >> Here is the message I receive from XMLDBException.GetMessage() call: >> Failed to execute command 'GetResource' on server: >> http://localhost:8080/xindice/, message: java.lang.Exception: >> java.lang.NullPointerException >> >> I'm using the following versions: >> Xindice: 1.1b4 >> Tomcat: 5.0.25 >> JVM: 1.4.2_01-b06 >> OS: Linux 2.4.18-14 >> >> Here is the sequence that causes this error: >> 1. User updates web form and post to my Servlet >> 2. My servlet does a GetResource() to pull the current version of the >> XML data. >> 3. My servlet updates the XML data. >> 4. My servlet does a createResource() and storeResource() to update >> the >> XML data back into Xindice. >> 5. ... later user repeats steps 1 to 4. >> >> Each time the user updates the form to Add/Update/Delete data. About >> one >> in every ten cycles the NullPointException will be thrown when I perform >> the GetResource(). I tried having my code sleep for 2 seconds after the >> first GetResource() failed and then retry to call, but that only solves >> the problem once in awhile. >> >> My XML data is usually somewhere in the 5 - 200 Kb range. A posting >> said >> a storeResource should take about 3ms/KB, so I thought sleeping for 2 >> seconds should have been enough delay for any of my files. >> >> Thanks for the help, >> -Nate >> >> Here is some code snippets. I create a singleton that owns this class, >> so >> there is only one of these (currently). Therefore EnableDatabase() is >> only executed once the first time that object is used. >> >> >> /* >> * XindiceGateway.java >> * >> * Created on August 25, 2004, 9:31 PM >> */ >> >> package org.test.gateways; >> >> import java.util.Vector; >> import org.apache.log4j.Logger; >> import org.apache.xindice.client.xmldb.services.CollectionManager; >> import org.apache.xindice.xml.dom.DOMParser; >> import org.test.commands.DatabaseCommand; >> import org.w3c.dom.Node; >> >> import org.xmldb.api.base.*; >> import org.xmldb.api.modules.*; >> import org.xmldb.api.*; >> >> >> /** >> * >> * @author stoddarn >> */ >> public class XindiceGateway >> { >> // Log4j Logger >> static Logger m_logger = Logger.getLogger(XindiceGateway.class); >> >> // Static mutex on the database >> static String m_databaseMutex = new String ("mutex"); >> >> private boolean m_databaseRegistered = false; >> >> // Static XINDICE data >> private static String XINDICE_DB_DRIVER = new >> String("org.apache.xindice.client.xmldb.DatabaseImpl"); >> >> // The root to the database >> private static String XINDICE_DB_ROOT = new >> String("xmldb:xindice://localhost:8080/db/"); // LINUX Penguin >> >> // Xindice API version >> private static String XINDICE_API_VERSION = new String ("1.0"); >> >> // Xindice file setup >> private static String XINDICE_COMPRESSION_ENABLED = new String >> ("true"); >> private static String XINDICE_FILTER_CLASS = new >> String("org.apache.xindice.core.filer.BTreeFiler"); >> >> >> /** Make sure the database is registered */ >> protected void EnableDatabase () >> throws ClassNotFoundException, InstantiationException, >> IllegalAccessException, >> XMLDBException >> { >> // If the database isn't already registered >> if (! m_databaseRegistered) >> { >> m_databaseRegistered = true; >> >> m_logger.info("Enabling Xindice Database"); >> >> Class c = Class.forName(XINDICE_DB_DRIVER); >> >> Database database = (Database) c.newInstance(); >> DatabaseManager.registerDatabase(database); >> >> // Update the CodeReview paths >> boolean baseCollectionFound = false; >> boolean projectListingsCollectionFound = false; >> boolean projectListingsFileFound = false; >> boolean projectsCollectionFound = false; >> >> // Check for "test" >> String [] baseCollection = ListCollections(""); >> // Loop to see if there is a match >> for (int bcItr = 0; !baseCollectionFound && bcItr < >> baseCollection.length; bcItr++) >> { >> >> if (baseCollection[bcItr].equals("test")) >> { >> baseCollectionFound = true; >> } >> } >> // If the baseCollection is missing add it >> if (!baseCollectionFound) >> { >> m_logger.info("Create codereview collection required"); >> CreateCollection("", "test"); >> } >> >> // Check for "projectlistings" and "projects" >> String [] testCollection = ListCollections("test"); >> // Loop to see if there is a match for project listings and projects >> for (int crItr = 0; (!projectListingsCollectionFound || >> !projectsCollectionFound) && crItr < testCollection.length; crItr++) >> { >> if (testCollection[crItr].equals("projectlistings")) >> { >> projectListingsCollectionFound = true; >> } >> else if (testCollection[crItr].equals("projects")) >> { >> projectsCollectionFound = true; >> } >> } >> // If the baseCollection is missing add it >> if (!projectListingsCollectionFound) >> { >> m_logger.info("Create projectlistings collection required"); >> CreateCollection("test", "projectlistings"); >> } >> >> // If the baseCollection is missing add it >> if (!projectsCollectionFound) >> { >> m_logger.info("Create projects collection required"); >> CreateCollection("test", "projects"); >> } >> } >> } >> >> >> /** Add documents to a collection */ >> public void AddDocument(String collectionName, String documentName, >> String >> documentXML) >> { >> Collection col = null; >> >> String[] documents = null; >> synchronized (m_databaseMutex) >> { >> try { >> EnableDatabase(); >> >> // Get the collection >> col = DatabaseManager.getCollection(XINDICE_DB_ROOT + >> collectionName); >> >> XMLResource document = (XMLResource) >> col.createResource(documentName, "XMLResource"); >> document.setContent(documentXML); >> col.storeResource(document); >> } >> catch (XMLDBException e) { >> m_logger.error("AddDocument: XML:DB Exception occured: " + >> e.getMessage()); >> } >> catch (Exception e) { >> m_logger.error("AddDocument: Other Exception occured"); >> } >> finally >> { >> // If the colletion was created, then make sure we close it >> if (col != null) >> { >> try >> { >> // Close the collection >> col.close(); >> } >> catch (Exception e) >> { >> // Catch any issues with closing the exception. >> m_logger.error("Unable to close collection. " + >> e.getMessage()); >> } >> } >> } >> } >> } >> >> >> /** Read a document */ >> public String ReadDocument(String collectionName, String documentName) >> { >> Collection col = null; >> String returnString = null; >> >> synchronized (m_databaseMutex) >> { >> try { >> EnableDatabase(); >> >> col = DatabaseManager.getCollection(XINDICE_DB_ROOT + >> collectionName); >> >> XMLResource document = (XMLResource) >> col.getResource(documentName); >> >> returnString = (String)document.getContent(); >> } >> catch (XMLDBException e) { >> m_logger.error("ReadDocument (" + collectionName + "/" + >> documentName + "): " + e.getMessage()); >> } >> catch (Exception e) { >> m_logger.error("ReadDocument (" + collectionName + "/" + >> documentName + "): " + e.getMessage()); >> } >> finally >> { >> // If the colletion was created, then make sure we close it >> if (col != null) >> { >> try >> { >> // Close the collection >> col.close(); >> } >> catch (Exception e) >> { >> // Catch any issues with closing the exception. >> m_logger.error("Unable to close collection. " + >> e.getMessage()); >> } >> } >> } >> } >> >> return (returnString); >> } >> >> >> >> /** Creates a new instance of XindiceGateway */ >> public XindiceGateway() >> { >> } >> >> } >> >