You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-users@xml.apache.org by st...@msoe.edu on 2006/03/04 01:20:59 UTC
NullPointerException from GetResource() call
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()
{
}
}
Re: NullPointerException from GetResource() call
Posted by st...@msoe.edu.
Hello,
I don't believe so. I looked in system.xml and the XPathQueryResolver and
autoindex="false".
If this will help, here is my SysConfig from "db/System/". (I changed the
name attributes values for this posting)
--------
Document 'database.xml'
<?xml version="1.0"?>
<database name="db">
<collections>
<collection compressed=" true" name="CHANGEDFORPOST_0">
<filer class="org.apache.xindice.core.filer.BTreeFiler" />
<indexes />
<collections>
<collection compressed=" true" name="CHANGEDFORPOST_1">
<filer class="org.apache.xindice.core.filer.BTreeFiler" />
<indexes />
</collection>
<collection compressed=" true" name="CHANGEDFORPOST_2">
<filer class="org.apache.xindice.core.filer.BTreeFiler" />
<indexes/>
</collection>
</collections>
</collection>
</collections>
</database>
Thanks,
-Nate
> Do you have any indexes enabled?
>
> Todd
>
> stoddarn@msoe.edu wrote:
>> 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
>>>
>>>stoddarn@msoe.edu 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()
>>>> {
>>>> }
>>>>
>>>>}
>>>>
>>>
>>
>
Re: NullPointerException from GetResource() call
Posted by Todd Byrne <by...@cns.montana.edu>.
Do you have any indexes enabled?
Todd
stoddarn@msoe.edu wrote:
> 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
>>
>>stoddarn@msoe.edu 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()
>>> {
>>> }
>>>
>>>}
>>>
>>
>
Re: NullPointerException from GetResource() call
Posted by st...@msoe.edu.
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
>
> stoddarn@msoe.edu 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()
>> {
>> }
>>
>> }
>>
>
Re: NullPointerException from GetResource() call
Posted by Todd Byrne <by...@cns.montana.edu>.
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
stoddarn@msoe.edu 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()
> {
> }
>
> }
>