Hi Antonio,

>
> Yes. we have all tables with PK. The class-descriptors has PK too.

ok, maybe it's a bug in OJB. I'm not sure, but if the given class in BasePrefetcher is an interface (class-descriptor only with extent classes without fields), getPkFields().length will always return 0.

I have a workaround for this particular problem, but don't know if there will be more side-effects.

Replace in BasePrefetcher line 116 with

pkLimit = getPrefetchInLimit() / aBroker.getDescriptorRepository().findFirstConcreteClass(itemClassDesc).getPkFields().length;


AND fix a bug in DescriptorRepository#findFirstConcreteClass


RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java,v
retrieving revision 1.42
diff -r1.42 DescriptorRepository.java
317,318c317,318
< ClassDescriptor extCld = (ClassDescriptor) extents.get(i);
< result = findFirstConcreteClass(extCld);
---
> Class ext = (Class) extents.get(i);
> result = findFirstConcreteClass(getDescriptorFor(ext));



regards, Armin


Antonio Gallardo wrote:
Hi Armin:
Thanks for your answer!

Armin Waibel dijo:

Hi Antonio,

that's anyone's guess:

> Caused by: java.lang.ArithmeticException: / by zero
>    at
>
org.apache.ojb.broker.accesslayer.BasePrefetcher.<init>(BasePrefetcher.java:116)

In BasePrefetcher you can find the line

pkLimit = getPrefetchInLimit() /
getItemClassDescriptor().getPkFields().length;

So, do all your class-descriptors have a PK field-descriptor?


Yes. we have all tables with PK. The class-descriptors has PK too.

Best Regards,

Antonio Gallardo


regards,
Armin

Antonio Gallardo wrote:


Hi Jakob:

Thanks for the answer. I work with Carlos. I suggested Carlos to send a
mail to the list, because I have no experience with this type of errors
in
OJB.

He is on another project, but I tried to see into this problem too. We
already compiled OJB with jar-debug option and here is the same error,
but
now with line numbers (see below).

We have 2 days trying to solve it (before mail post) and we have no
clues
why this error happens. The O/R map (repository.xml) was generated using
Druid (the same as my project that works fine). For me it looks like
some
relations inside the model are not well managed by OJB, but I am not
sure
of this.

Here is more info:

All the code worked good. Then when we insert a row in a particular
table
seems like the row "break" all the model. We checked inside the DB and
the
created row + relations are OK. We also checked the insert method and is
good too.

If we remove the offending row in the table everything works good.

Please give us some advise or ask us more info you need to diagnostic
this
error. ;-D

org.apache.ojb.broker.PersistenceBrokerException:
java.lang.ArithmeticException: / by zero
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:251)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:263)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollection(QueryReferenceBroker.java:514)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollections(QueryReferenceBroker.java:696)
        at
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java:501)
        at
org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:293)
        at
net.agssa.sga.forms.unidadmedida.UnidadmedidaHandler.getList(UnidadmedidaHandler.java:99)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:230)
        at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1244)
        at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:1105)
        at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:190)
        at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:138)
        at
org.mozilla.javascript.continuations.InterpretedFunctionImpl.call(InterpretedFunctionImpl.java:121)
        at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1244)
        at
org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter.callFunction(FOM_JavaScriptInterpreter.java:522)
        at
org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode.invoke(CallFunctionNode.java:166)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:84)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:164)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:108)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:163)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:108)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:354)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.handleCocoonRedirect(TreeProcessor.java:411)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:363)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.handleCocoonRedirect(TreeProcessor.java:411)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:363)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:307)
        at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:133)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:84)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:164)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:108)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:163)
        at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:108)
        at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:354)
        at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:307)
        at org.apache.cocoon.Cocoon.process(Cocoon.java:656)
        at
org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1112)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
        at java.lang.Thread.run(Thread.java:534)
Caused by: java.lang.ArithmeticException: / by zero
        at
org.apache.ojb.broker.accesslayer.BasePrefetcher.<init>(BasePrefetcher.java:116)
        at
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherImpl.<init>(RelationshipPrefetcherImpl.java:78)
        at
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.<init>(CollectionPrefetcher.java:97)
        at
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherFactory.createRelationshipPrefetcher(RelationshipPrefetcherFactory.java:85)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(QueryReferenceBroker.java:316)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:187)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java:244)
        ... 72 more

---------------------------------------------------------------------
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