Thanks for the response...I did removed the table from the abstract
class, and it didn't seem to affect the result.  However, I did track
down the problem.  I still had these two sections in the
ClientPayrollDeduction class-descriptor:
    <field-descriptor
        name="payrollDeductionId"
        column="parent_id"
        jdbc-type="INTEGER"
        access="anonymous"
        />
    <reference-descriptor name="super"
        class-ref="model.PayrollDeductionPlan"
        auto-retrieve="true"
        auto-update="true"
        auto-delete="true"
        >
        <foreignkey field-ref="payrollDeductionId"/>
    </reference-descriptor>

Since the PayrollDeduction is now an abstract class I no longer needed
the reference to it from the child class.  Once I removed those sections
it worked fine.

Thanks.

-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, March 15, 2005 12:07 PM
To: OJB Users List
Subject: Re: Abstract Parent Class


Hi Wes,

I think the most important part is

Caused by: java.lang.NullPointerException
        at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java
:1194)
        at
org.apache.ojb.broker.metadata.RepositoryPersistor.readMetadataFromXML(U
nknown Source)
        at
org.apache.ojb.broker.metadata.RepositoryPersistor.buildRepository(Unkno
wn Source)
        at
org.apache.ojb.broker.metadata.RepositoryPersistor.readDescriptorReposit
ory(Unknown Source)
        ... 44 more
Caused by: java.lang.NullPointerException
        at
org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelpe
r.computeInheritedPersistentFields(Unknown Source)
        at
org.apache.ojb.broker.metadata.RepositoryXmlHandler.endDocument(Unknown
Source)
        at
org.apache.xerces.parsers.AbstractSAXParser.endDocument(AbstractSAXParse

It was caused by a NPE when AnonymousPersistentFieldHelper search for 
anonymous fields. Could you compile OJB with "debug" information 
enabled, so that we can see the line of the NPE.
You can build the jar with a 'ant jar-debug' call (instead 'ant jar') on

the OJB source distribution.

Did behavior change when you remove the table name entry in
<class-descriptor
     class="model.PayrollDeductionPlan"
     table="dexa810t"
     >
        <extent-class class-ref="model.ClientPayrollDeductionPlan" />
</class-descriptor>

think an abstract class hasn't a table in DB.

Is model.AdmObject an interface you will work on OJB level, e.g. "give 
me all AdmObjects" or is it a base class all other objects inherit from?

regards,
Armin


Lemke, Wesley wrote:
> I did just notice that the stack trace says:  Caused by:
> org.apache.ojb.broker.metadata.MetadataException: Can't read 
> repository file 'repository.xml'
> 
> Here is my entire repository.xml file.  It seems ok to me....
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- This is a sample metadata repository for the 
>      Apache ObJectRelationalBridge (OJB) System.
>      Use this file as a template for building your own mappings.
> -->
> 
> <!-- doctype definition
>      By default we are using a local DTD that is expected to reside
>      in the same directory as this repository.xml file.
>      If you intend to validate your repository.xml against
>      the public dtd at the Apache site, please replace the string
>      "repository.dtd" 
>      by the public adress
>      "http://db.apache.org/ojb/dtds/1.0/repository.dtd";.
>      In this case validation will only work if the machine you
>      run your application on can connect to the internet!
> -->
>      
> <!DOCTYPE descriptor-repository PUBLIC
>        "-//Apache Software Foundation//DTD OJB Repository//EN"
>        "repository.dtd"
> [
> <!ENTITY database SYSTEM "repository_database.xml">
> <!ENTITY internal SYSTEM "repository_internal.xml">
> <!ENTITY user SYSTEM "repository_user.xml">
> ]>
> 
> 
> <descriptor-repository version="1.0" 
> isolation-level="read-uncommitted">
> 
>     <!-- include all used database connections -->
>     <jdbc-connection-descriptor
>         jcd-alias="mysqlDS"
>         default-connection="false"
>         platform="MySQL"
>         jdbc-level="1.0"
>         jndi-datasource-name="jdbc/ao79"
>         batch-mode="false"
>     >
>       <sequence-manager 
> className="org.apache.ojb.broker.util.sequence.SequenceManagerNativeIm
> pl
> ">
>            <attribute attribute-name="autoNaming"
> attribute-value="true"/>
>         </sequence-manager>           
>     </jdbc-connection-descriptor>
> 
> <class-descriptor class="model.AdmObject">
>       <extent-class class-ref="model.PayrollDeductionPlan" /> 
> </class-descriptor>
> 
> <class-descriptor class="model.PayrollDeductionPlan">
>     <extent-class class-ref="model.ClientPayrollDeductionPlan" /> 
> </class-descriptor>
> 
> <class-descriptor
>     class="model.ClientPayrollDeductionPlan"
>     table="dexa820t"
>     >
>     <field-descriptor
>         name="objectId"
>         column="B_ID"
>         jdbc-type="INTEGER"
>         primarykey="true"
>         autoincrement="true"
>         />
>     <field-descriptor
>         name="clientInfo"
>         column="client_info"
>         jdbc-type="VARCHAR"
>         />
> 
>     <field-descriptor
>         name="payrollDeductionId"
>         column="parent_id"
>         jdbc-type="INTEGER"
>         access="anonymous"
>         />
>     <field-descriptor
>       name="idOfLastUserToUpdate"
>       column="update_user"
>       jdbc-type="VARCHAR"
>     />
>     <field-descriptor
>       name="idOfUserThatCreated"
>       column="created_user"
>       jdbc-type="VARCHAR"
>     />
>     <field-descriptor
>       name="objectStatus"
>       column="object_status"
>       jdbc-type="VARCHAR"
>     />        
>     <reference-descriptor name="super"
>         class-ref="model.PayrollDeductionPlan"
>         auto-retrieve="true"
>         auto-update="true"
>         auto-delete="true"
>         >
>         <foreignkey field-ref="payrollDeductionId"/>
>     </reference-descriptor>
>     <collection-descriptor
>         name="payPlanAssociations"
>         element-class-ref="model.PayPlanAssociation"
>         auto-retrieve="true"
>         auto-update="true"
>         auto-delete="true"
>         >
>         <inverse-foreignkey field-ref="payPlanFK"/>        
>     </collection-descriptor>    
> </class-descriptor>
> 
> <class-descriptor
>     class="model.PayPlanAssociation"
>     table="dexa830t"
>     >
>     <field-descriptor
>         name="id"
>         column="D_ID"
>         jdbc-type="INTEGER"
>         primarykey="true"
>         autoincrement="true"
>         />
>     <field-descriptor
>         name="payPlanFK"
>         column="a_id"
>         jdbc-type="INTEGER"
>         />
>     <reference-descriptor name="payrollDeductionPlan"
>         class-ref="model.PayrollDeductionPlan"
>         auto-retrieve="true"
>         auto-update="true"
>         auto-delete="true"
>         >
>         <foreignkey field-ref="payPlanFK"/>
>     </reference-descriptor>
> </class-descriptor>
> 
> </descriptor-repository>
> 
> -----Original Message-----
> From: Lemke, Wesley [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 15, 2005 8:26 AM
> To: [email protected]
> Subject: Abstract Parent Class
> 
> 
> I am getting a really strange error when trying to change one of our 
> classes to an abstract class.  Here is our original mapping file:
> 
> <!-- All of our persistent objects extend this class  --> 
> <class-descriptor class="model.AdmObject">
>       <extent-class class-ref="model.PayrollDeductionPlan" /> 
> </class-descriptor>
> 
> <class-descriptor
>     class="model.PayrollDeductionPlan"
>     table="dexa810t"
>     >
> <!-- field-descriptors removed for the sake of brevity --> 
> </class-descriptor>
> 
> <!-- this class extends PayrollDeductionPlan --> <class-descriptor
>     class="model.ClientPayrollDeductionPlan"
>     table="dexa820t"
>     >
> <!-- field-descriptors removed for the sake of brevity --> 
> </class-descriptor>
> 
> My code works perfectly when it is like that, however, we want to make

> PayrollDeductionPlan an abstract class, so I changed the mapping file 
> to be like this:
> 
> <class-descriptor class="model.AdmObject">
>       <extent-class class-ref="model.PayrollDeductionPlan" /> 
> </class-descriptor>
> 
> <class-descriptor
>     class="model.PayrollDeductionPlan"
>     table="dexa810t"
>     >
>       <extent-class class-ref="model.ClientPayrollDeductionPlan" /> 
> </class-descriptor>
> 
> 
> I also moved the field-descriptors from PayrollDeductionPlan to 
> ClientPayrollDeductionPlan, and declared the PayrollDeductionPlan as 
> abstract in the java code. When I run my code like this I get the 
> following error:
> 
> Error 500: Server caught unhandled exception from servlet
> [servlets.InheritanceServlet]: Borrow broker from pool failed, using 
> PBKey org.apache.ojb.broker.PBKey: jcdAlias=mysqlDS, user=VKDB2T2,
> password=*****
> 
> 
> I'm assuming that there is something else going on, the changes above 
> should not affect the database connection.  Here is the entire 
> stacktrace (The "INFO:  # finalize DescriptorRepository instance #" 
> does not show up when PayrollDeductionPlan is not abstract):
> 
> [3/15/05 8:22:26:101 CST] 4cab288f SystemOut     O [DEFAULT] INFO: #
> finalize DescriptorRepository instance #
> [3/15/05 8:22:27:493 CST] 39ad2883 WebGroup      E SRVE0026E: [Servlet
> Error]-[servlets.InheritanceServlet]:
> org.apache.ojb.broker.PBFactoryException: Borrow broker from pool 
> failed, using PBKey org.apache.ojb.broker.PBKey: jcdAlias=mysqlDS, 
> user=VKDB2T2, password=*****
>       at 
> org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl.createP
> er
> sistenceBroker(Unknown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl.createPersis
> tenceBroker(Unknown Source)
>       at
>
org.apache.ojb.broker.PersistenceBrokerFactory.createPersistenceBroker(U
> nknown Source)
>       at
> servlets.InheritanceServlet.doPost(InheritanceServlet.java:51)
>       at servlets.InheritanceServlet.doGet(InheritanceServlet.java:40)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.servlet.InvokerServlet.service(InvokerServlet.ja
> va:255)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:7
> 9)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInv
> oker.java:201)
>       at
>
com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocati
> on(CachedInvocation.java:71)
>       at
>
com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(Servle
> tRequestProcessor.java:182)
>       at
>
com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSELis
> tener.java:334)
>       at
>
com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection
> .java:56)
>       at
>
com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:
> 610)
>       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
> Caused by: org.apache.ojb.broker.metadata.MetadataException: Can't
read
> repository file 'repository.xml'
>       at org.apache.ojb.broker.metadata.MetadataManager.init(Unknown
> Source)
>       at org.apache.ojb.broker.metadata.MetadataManager.<init>(Unknown
> Source)
>       at
> org.apache.ojb.broker.metadata.MetadataManager.getInstance(Unknown
> Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl.createNewBro
> kerInstance(Unknown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl$PBKeyedPo
> olableObjectFactory.makeObject(Unknown Source)
>       at
>
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(Generic
> KeyedObjectPool.java:747)
>       ... 38 more
> Caused by: java.lang.NullPointerException
>       at
>
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java
> :1194)
>       at
>
org.apache.ojb.broker.metadata.RepositoryPersistor.readMetadataFromXML(U
> nknown Source)
>       at
>
org.apache.ojb.broker.metadata.RepositoryPersistor.buildRepository(Unkno
> wn Source)
>       at
>
org.apache.ojb.broker.metadata.RepositoryPersistor.readDescriptorReposit
> ory(Unknown Source)
>       ... 44 more
> Caused by: java.lang.NullPointerException
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelpe
> r.computeInheritedPersistentFields(Unknown Source)
>       at
>
org.apache.ojb.broker.metadata.RepositoryXmlHandler.endDocument(Unknown
> Source)
>       at
>
org.apache.xerces.parsers.AbstractSAXParser.endDocument(AbstractSAXParse
> r.java:725)
>       at
>
org.apache.xerces.impl.XMLNamespaceBinder.endDocument(XMLNamespaceBinder
> .java:704)
>       at
>
org.apache.xerces.impl.dtd.XMLDTDValidator.endDocument(XMLDTDValidator.j
> ava:998)
>       at
>
org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScann
> erImpl.java:455)
>       at
>
org.apache.xerces.impl.XMLEntityManager.endEntity(XMLEntityManager.java:
> 1288)
>       at
>
org.apache.xerces.impl.XMLEntityManager$EntityScanner.load(XMLEntityMana
> ger.java(Compiled Code))
>       at
>
org.apache.xerces.impl.XMLEntityManager$EntityScanner.skipSpaces(XMLEnti
> tyManager.java(Compiled Code))
>       at
>
org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dis
> patch(XMLDocumentScannerImpl.java:1011)
>       at
>
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDo
> cumentFragmentScannerImpl.java:333)
>       at
>
org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardPars
> erConfiguration.java:525)
>       at
>
org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardPars
> erConfiguration.java:581)
>       at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
>       at
>
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java
> :1158)
>       ... 47 more
> 
> 
> Anyone have any ideas on what the problem could be?
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to