You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-dev@db.apache.org by Craig L Russell <Cr...@Sun.COM> on 2005/10/26 14:15:54 UTC

Issue 133: TCK : Map tests

Hi Andy,

On Oct 23, 2005, at 2:25 AM, Andy Jefferson wrote:

> Hi Michelle,
>
> I've been through the issues with the various TCK Map tests, and  
> have the
> following comments :-
>
> 1. The key-type, value-type are currently being defined as things  
> like Object,
> String, SimpleClass whereas the Collection tests use fully- 
> qualified names.
> While this may be intentional to check the qualification of namings  
> it does
> raise the issue of what an implementation is supposed to do wrt  
> class namings
> when not fully-qualified. I refer to spec section 18.14.1
> <spec>
> The element-type attribute specifies the type of the elements. The  
> type name
> uses Java rules for naming: if no package is included in the name, the
> package name is assumed to be the same package as the persistence- 
> capable
> class. Inner classes are identified by the "$" marker.
> </spec>

Java has a slightly more complicated way of dealing with type names  
in the java.lang name space, and the JDO spec doesn't go into that  
level of detail.

As I understand it, the java compiler allows you to have classes  
named String, Integer, etc. in user-defined packages; but if you  
don't, then the compiler assumes that these classes are in java.lang.  
There is support for importing these classes from other packages but  
you cannot import them from the un-named package.

In practice, using your.own.package.String is really "not best  
practice"; in fact, I don't know of any practical use-case for it. So  
for JDO, I would be happy to require that String, Object, Integer,  
and the like are assumed to be in the java.lang package.

In any case, I don't want to require users to qualify String,  
Integer, etc. when Java does not require it.

Here's the proposed spec change:

<spec>
The element-type attribute specifies the type of the elements. The  
type name uses Java rules for naming: if no package is included in  
the name, the package name is assumed to be the same package as the  
persistence-capable class. Inner classes are identified by the "$"  
marker. Classes Boolean, Byte, Character, Double, Float, Integer,  
Long, Number, Object, Short, String, and StringBuffer are treated  
specially: they are assumed to be in the java.lang package and cannot  
be in user-defined packages.
</spec>

The only other interpretation that I would support is to literally do  
what Java does: for these specific type names (String, Integer, etc.  
list of 10 names), look first in the named package for the type, and  
if not found, go to java.lang to resolve them.

If anyone feels strongly that JDO should allow these 12  java.lang  
class names to be defined in user-defined packages, please say so.

>
> so in the case of the TCK tests, since there's no package name we  
> prepend the
> package of the class being persisted. This means that the String,  
> Object
> fully-qualified names get messed up since they aren't in the same  
> package as
> the class. I suggest that these be fully-qualified in the MetaData as
> "java.lang." so that a JDO implementation can find the correct  
> class. You can
> leave the "SimpleClass" as they are currently since those will be  
> correctly
> identified.

With the proposal above, JDO implementations would have to treat  
String, Integer, etc. specially.

Craig
>
>
> -- 
> Andy
>


Re: Issue 133: TCK : Map tests

Posted by Craig L Russell <Cr...@Sun.COM>.
Javadogs,

I agree with Erik that the spec should more closely follow Java  
semantics.

Here's the proposed spec change:

<spec 18.14.1>
The element-type attribute specifies the type of the elements. The  
type name uses Java language rules for naming: if no package is  
included in the name, the package name is assumed to be the same  
package as the persistence-capable class. Inner classes are  
identified by the "$" marker. Classes Boolean, Byte, Character,  
Double, Float, Integer, Long, Number, Object, Short, String, and  
StringBuffer are treated exactly as in the Java language: they are  
first checked to see if they are in the package in which they are  
used, and if not, assumed to be in the java.lang package.
</spec>

Craig

On Oct 26, 2005, at 5:20 AM, erik@jpox.org wrote:

> Quoting Craig L Russell <Cr...@Sun.COM>:
>
>
>> The only other interpretation that I would support is to literally do
>> what Java does: for these specific type names (String, Integer, etc.
>> list of 10 names), look first in the named package for the type, and
>> if not found, go to java.lang to resolve them.
>>
>>
>
> I like better this
>


Re: Issue 133: TCK : Map tests

Posted by er...@jpox.org.
Quoting Craig L Russell <Cr...@Sun.COM>:

> The only other interpretation that I would support is to literally do
> what Java does: for these specific type names (String, Integer, etc.
> list of 10 names), look first in the named package for the type, and
> if not found, go to java.lang to resolve them.
>

I like better this