db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Zaun (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JDO-194) JPOX does not support implicit variables.
Date Fri, 03 Feb 2006 16:29:06 GMT
    [ http://issues.apache.org/jira/browse/JDO-194?page=comments#action_12365084 ] 

Martin Zaun commented on JDO-194:
---------------------------------

> JDO implementations should behave defensively and treat both NoClassDefFoundError and
ClassNotFoundException as "class does not exist". 

In fact, this does not only include NoClassDefFoundErrors but LinkageErrors in general, see
below.

>We are going to file a bug on the JRE saying that behavior for classes that don't exist
is inconsistent based on the platform and the name. Specifically, it seems that Windows platforms
get confused trying to resolve class names that differ in capitalization from real class names.

The JRE's behaviour doesn't strike me as inconsistent with the Java specs after consulting
the Java Language Specification (3rd edition)
    http://java.sun.com/docs/books/jls/index.html
and, more detailed, the revised chapter 5 "Loading, Linking and Initializing" of the the Java
VM Specification (2nd edition + latest amendments):
    http://java.sun.com/docs/books/vmspec/2nd-edition/ConstantPool.pdf

In a nutshell:
1) A ClassNotFoundException is thrown when no binary representation of a class could be found
at all; a LinkageError, including NoClassDefFoundError, is thrown when some representation
was found but it's "content" turns out not to be a feasible or the required class.

2) ClassLoader.loadClass() is a place where LinkageErrors may occur.  (There are rules about
when classloaders, which may employ an eager or lazy loading strategy, may throw such errors).

3) The process of finding of a binary representation of a class is specified as platform-dependent
-- even for the bootstrap classloader. Note that user-defined classloaders have all freedom
anyway (for instance, loading classes over the net).

So, a classloader may, by its rules, report to have located a binary representation for a
class name, which then turns out not to be the required class, thus, resulting in a LinkageError.

The VM spec is explicit on this:

5.3.1 Loading Using the Bootstrap Class Loader
The following steps are used to load and thereby create the nonarray class or interface C
denoted by N using the bootstrap class loader.
...
1. The Java virtual machine searches for a purported representation of C in a platform- dependent
manner. Note that there is no guarantee that a purported representation found is valid or
is a representation of C.

   Typically, a class or interface will be represented using a file in a hierarchical file
system. The name of the class or interface will usually be encoded in the pathname of the
file.

   This phase of loading must detect the following error:
   * If no purported representation of C is found, loading throws an instance of NoClassDefFoundError
or an instance of one of its subclasses.


> JPOX does not support implicit variables.
> -----------------------------------------
>
>          Key: JDO-194
>          URL: http://issues.apache.org/jira/browse/JDO-194
>      Project: JDO
>         Type: Bug
>   Components: tck20
>     Reporter: Michael Watzek
>     Assignee: Michael Bouschen

>
> JPOX throws an exception executing queries having implicit parameters (see below). The
bug may be reproduced executing test case org.apache.jdo.tck.query.jdoql.variables.VariablesAndFields.
> Query: SELECT FROM org.apache.jdo.tck.pc.company.Employee WHERE team.contains(employee)
& employee.firstname == 'emp1First' 
> org.jpox.store.exceptions.NoSuchPersistentFieldException: Field "employee" does not exist
in org.apache.jdo.tck.pc.company.Person or is not persistent
> 	at org.jpox.store.rdbms.table.ClassTable.getFieldMapping(ClassTable.java:1790)
> 	at org.jpox.store.expression.TableExpression.newFieldExpression(TableExpression.java:183)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileIdentifier(JDOQLQuery.java:1534)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compilePrimary(JDOQLQuery.java:1299)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileUnaryExpressionNotPlusMinus(JDOQLQuery.java:1245)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileUnaryExpression(JDOQLQuery.java:1226)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileMultiplicativeExpression(JDOQLQuery.java:1179)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileAdditiveExpression(JDOQLQuery.java:1156)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileRelationalExpression(JDOQLQuery.java:1125)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileEqualityExpression(JDOQLQuery.java:1102)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileAndExpression(JDOQLQuery.java:1090)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileExclusiveOrExpression(JDOQLQuery.java:1078)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileInclusiveOrExpression(JDOQLQuery.java:1066)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileConditionalAndExpression(JDOQLQuery.java:1054)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileConditionalOrExpression(JDOQLQuery.java:1036)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileExpression(JDOQLQuery.java:1013)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compilePrimary(JDOQLQuery.java:1346)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileUnaryExpressionNotPlusMinus(JDOQLQuery.java:1245)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileUnaryExpression(JDOQLQuery.java:1226)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileMultiplicativeExpression(JDOQLQuery.java:1179)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileAdditiveExpression(JDOQLQuery.java:1156)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileRelationalExpression(JDOQLQuery.java:1125)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileEqualityExpression(JDOQLQuery.java:1102)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileAndExpression(JDOQLQuery.java:1090)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileExclusiveOrExpression(JDOQLQuery.java:1078)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileInclusiveOrExpression(JDOQLQuery.java:1066)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileConditionalAndExpression(JDOQLQuery.java:1054)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileConditionalOrExpression(JDOQLQuery.java:1036)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileExpression(JDOQLQuery.java:1013)
> 	at org.jpox.store.query.JDOQLQuery$Compiler.compileQueryStatement(JDOQLQuery.java:891)
> 	at org.jpox.store.query.JDOQLQuery.compile(JDOQLQuery.java:569)
> 	at org.jpox.store.query.JDOQLQuery.performExecute(JDOQLQuery.java:639)
> 	at org.jpox.store.query.Query.executeWithMap(Query.java:907)
> 	at org.jpox.store.query.Query.executeWithArray(Query.java:887)
> 	at org.jpox.store.query.Query.execute(Query.java:819)
> 	at org.apache.jdo.tck.query.QueryTest.execute(QueryTest.java:706)
> 	at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:625)
> 	at org.apache.jdo.tck.query.QueryTest.executeAPIQuery(QueryTest.java:601)
> 	at org.apache.jdo.tck.query.jdoql.variables.VariablesAndFields.testPositive(VariablesAndFields.java:148)
> 	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 junit.framework.TestCase.runTest(TestCase.java:154)
> 	at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at junit.textui.TestRunner.doRun(TestRunner.java:116)
> 	at junit.textui.TestRunner.doRun(TestRunner.java:109)
> 	at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:120)
> 	at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:95)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message