You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Xiaobing Wong <li...@gmail.com> on 2007/12/14 11:10:42 UTC
About the loading constraint
Loading constraint is a new regulation since sun jdk 1.2.I use a test suit,
finding that there are some difference between harmony and sun jdk 1.5 about
the loading constraint. And I am not quite sure about the native resolution
of harmony. Who can help me to explain why???
There are two Spoofed.class. One is under the current direction, the other
is under the direction : greeters/ . They are different but with the same
name.
Spoofed.class
public class Spoofed {
private int secretValue = 42;
public int giveMeFive() {
return 5;
}
static {
System.out.println(
"linking/ex8/Spoofed initialized.");
}
}
greeters/Spoofed.class
public class Spoofed {
private int secretValue = 100;
public int giveMeFive() {
return secretValue;
}
static {
System.out.println(
"linking/ex8/greeters/Spoofed initialized.");
}
}
The method to invoke loading is as followed:
public void greet() {
Spoofed spoofed = new Spoofed();
System.out.println("secret val = "+ spoofed.giveMeFive());
spoofed = Delegated.getSpoofed();
System.out.println("secret val = "+ spoofed.giveMeFive());
}
In which the Delegated.class:
public class Delegated {
public static Spoofed getSpoofed() {
return new Spoofed();
}
}
Then we define the classloader to load the Spoofed.class in greeters. The
main function invokes greet().Results show as follows:
Result In sun jdk 1.5:
D:\linking\ex8>java Greet greeters Cracker
linking/ex8/greeters/Spoofed initialized.
secret val = 100
Exception in thread "main" java.lang.LinkageError: Class Spoofed violates
loader
constraints
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at Delegated.getSpoofed(Delegated.java:7)
at Cracker.greet(Cracker.java:13)
at Greet.main(Greet.java:39)
Result In harmony:
littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$ ./java Greet
greeters Cracker
linking/ex8/greeters/Spoofed initialized.
secret val = 100
linking/ex8/Spoofed initialized.
secret val = 5
littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$
Re: About the loading constraint
Posted by Pavel Pervov <pm...@gmail.com>.
Thanks. I'll look into this.
On 12/17/07, Xiaobing Wong <li...@gmail.com> wrote:
>
> ok~
>
>
>
> On Dec 14, 2007 6:56 PM, Pavel Pervov <pm...@gmail.com> wrote:
>
> > Xiaobing,
> >
> > this is interesting observation indeed and it certainly deserves JIRA.
> >
> > Could you, please, file a JIRA and provide the whole test case and
> > citation
> > (or link) to the spec where this behaviour is defined?
> >
> > Thank you very much.
> >
> >
> > On 12/14/07, Xiaobing Wong <li...@gmail.com> wrote:
> > >
> > > Loading constraint is a new regulation since sun jdk 1.2.I use a test
> > > suit,
> > > finding that there are some difference between harmony and sun jdk
> > 1.5about
> > > the loading constraint. And I am not quite sure about the native
> > > resolution
> > > of harmony. Who can help me to explain why???
> > >
> > >
> > >
> > > There are two Spoofed.class. One is under the current direction, the
> > other
> > > is under the direction : greeters/ . They are different but with the
> > same
> > > name.
> > >
> > > Spoofed.class
> > >
> > > public class Spoofed {
> > >
> > > private int secretValue = 42;
> > >
> > > public int giveMeFive() {
> > >
> > > return 5;
> > >
> > > }
> > >
> > > static {
> > >
> > > System.out.println(
> > >
> > > "linking/ex8/Spoofed initialized.");
> > >
> > > }
> > >
> > > }
> > >
> > > greeters/Spoofed.class
> > >
> > > public class Spoofed {
> > >
> > > private int secretValue = 100;
> > >
> > > public int giveMeFive() {
> > >
> > > return secretValue;
> > >
> > > }
> > >
> > > static {
> > >
> > > System.out.println (
> > >
> > > "linking/ex8/greeters/Spoofed initialized.");
> > >
> > > }
> > >
> > > }
> > >
> > >
> > >
> > > The method to invoke loading is as followed:
> > >
> > > public void greet() {
> > >
> > > Spoofed spoofed = new Spoofed();
> > >
> > > System.out.println("secret val = "+ spoofed.giveMeFive());
> > >
> > > spoofed = Delegated.getSpoofed();
> > >
> > > System.out.println("secret val = "+ spoofed.giveMeFive());
> > >
> > > }
> > >
> > > In which the Delegated.class:
> > >
> > > public class Delegated {
> > >
> > > public static Spoofed getSpoofed() {
> > >
> > > return new Spoofed();
> > >
> > > }
> > >
> > > }
> > >
> > >
> > >
> > > Then we define the classloader to load the Spoofed.class in greeters.
> > The
> > > main function invokes greet().Results show as follows:
> > >
> > >
> > >
> > > Result In sun jdk 1.5:
> > >
> > > D:\linking\ex8>java Greet greeters Cracker
> > >
> > > linking/ex8/greeters/Spoofed initialized.
> > >
> > > secret val = 100
> > >
> > > Exception in thread "main" java.lang.LinkageError: Class Spoofed
> > violates
> > > loader
> > >
> > > constraints
> > >
> > > at java.lang.ClassLoader.defineClass1(Native Method)
> > >
> > > at java.lang.ClassLoader.defineClass (Unknown Source)
> > >
> > > at java.security.SecureClassLoader.defineClass(Unknown Source)
> > >
> > > at java.net.URLClassLoader.defineClass(Unknown Source)
> > >
> > > at java.net.URLClassLoader.access$100 (Unknown Source)
> > >
> > > at java.net.URLClassLoader$1.run(Unknown Source)
> > >
> > > at java.security.AccessController.doPrivileged(Native Method)
> > >
> > > at java.net.URLClassLoader.findClass (Unknown Source)
> > >
> > > at java.lang.ClassLoader.loadClass(Unknown Source)
> > >
> > > at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
> > >
> > > at java.lang.ClassLoader.loadClass (Unknown Source)
> > >
> > > at java.lang.ClassLoader.loadClassInternal(Unknown Source)
> > >
> > > at Delegated.getSpoofed(Delegated.java:7)
> > >
> > > at Cracker.greet(Cracker.java:13)
> > >
> > > at Greet.main(Greet.java:39)
> > >
> > >
> > >
> > > Result In harmony:
> > >
> > > littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$ ./java
> Greet
> > > greeters Cracker
> > >
> > > linking/ex8/greeters/Spoofed initialized.
> > >
> > > secret val = 100
> > >
> > > linking/ex8/Spoofed initialized.
> > >
> > > secret val = 5
> > >
> > > littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$
> > >
> >
> >
> >
> > --
> > Pavel Pervov,
> > Intel Enterprise Solutions Software Division
> >
>
--
Pavel Pervov,
Intel Enterprise Solutions Software Division
Re: About the loading constraint
Posted by Xiaobing Wong <li...@gmail.com>.
ok~
On Dec 14, 2007 6:56 PM, Pavel Pervov <pm...@gmail.com> wrote:
> Xiaobing,
>
> this is interesting observation indeed and it certainly deserves JIRA.
>
> Could you, please, file a JIRA and provide the whole test case and
> citation
> (or link) to the spec where this behaviour is defined?
>
> Thank you very much.
>
>
> On 12/14/07, Xiaobing Wong <li...@gmail.com> wrote:
> >
> > Loading constraint is a new regulation since sun jdk 1.2.I use a test
> > suit,
> > finding that there are some difference between harmony and sun jdk
> 1.5about
> > the loading constraint. And I am not quite sure about the native
> > resolution
> > of harmony. Who can help me to explain why???
> >
> >
> >
> > There are two Spoofed.class. One is under the current direction, the
> other
> > is under the direction : greeters/ . They are different but with the
> same
> > name.
> >
> > Spoofed.class
> >
> > public class Spoofed {
> >
> > private int secretValue = 42;
> >
> > public int giveMeFive() {
> >
> > return 5;
> >
> > }
> >
> > static {
> >
> > System.out.println(
> >
> > "linking/ex8/Spoofed initialized.");
> >
> > }
> >
> > }
> >
> > greeters/Spoofed.class
> >
> > public class Spoofed {
> >
> > private int secretValue = 100;
> >
> > public int giveMeFive() {
> >
> > return secretValue;
> >
> > }
> >
> > static {
> >
> > System.out.println (
> >
> > "linking/ex8/greeters/Spoofed initialized.");
> >
> > }
> >
> > }
> >
> >
> >
> > The method to invoke loading is as followed:
> >
> > public void greet() {
> >
> > Spoofed spoofed = new Spoofed();
> >
> > System.out.println("secret val = "+ spoofed.giveMeFive());
> >
> > spoofed = Delegated.getSpoofed();
> >
> > System.out.println("secret val = "+ spoofed.giveMeFive());
> >
> > }
> >
> > In which the Delegated.class:
> >
> > public class Delegated {
> >
> > public static Spoofed getSpoofed() {
> >
> > return new Spoofed();
> >
> > }
> >
> > }
> >
> >
> >
> > Then we define the classloader to load the Spoofed.class in greeters.
> The
> > main function invokes greet().Results show as follows:
> >
> >
> >
> > Result In sun jdk 1.5:
> >
> > D:\linking\ex8>java Greet greeters Cracker
> >
> > linking/ex8/greeters/Spoofed initialized.
> >
> > secret val = 100
> >
> > Exception in thread "main" java.lang.LinkageError: Class Spoofed
> violates
> > loader
> >
> > constraints
> >
> > at java.lang.ClassLoader.defineClass1(Native Method)
> >
> > at java.lang.ClassLoader.defineClass (Unknown Source)
> >
> > at java.security.SecureClassLoader.defineClass(Unknown Source)
> >
> > at java.net.URLClassLoader.defineClass(Unknown Source)
> >
> > at java.net.URLClassLoader.access$100 (Unknown Source)
> >
> > at java.net.URLClassLoader$1.run(Unknown Source)
> >
> > at java.security.AccessController.doPrivileged(Native Method)
> >
> > at java.net.URLClassLoader.findClass (Unknown Source)
> >
> > at java.lang.ClassLoader.loadClass(Unknown Source)
> >
> > at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
> >
> > at java.lang.ClassLoader.loadClass (Unknown Source)
> >
> > at java.lang.ClassLoader.loadClassInternal(Unknown Source)
> >
> > at Delegated.getSpoofed(Delegated.java:7)
> >
> > at Cracker.greet(Cracker.java:13)
> >
> > at Greet.main(Greet.java:39)
> >
> >
> >
> > Result In harmony:
> >
> > littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$ ./java Greet
> > greeters Cracker
> >
> > linking/ex8/greeters/Spoofed initialized.
> >
> > secret val = 100
> >
> > linking/ex8/Spoofed initialized.
> >
> > secret val = 5
> >
> > littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$
> >
>
>
>
> --
> Pavel Pervov,
> Intel Enterprise Solutions Software Division
>
Re: About the loading constraint
Posted by Pavel Pervov <pm...@gmail.com>.
Xiaobing,
this is interesting observation indeed and it certainly deserves JIRA.
Could you, please, file a JIRA and provide the whole test case and citation
(or link) to the spec where this behaviour is defined?
Thank you very much.
On 12/14/07, Xiaobing Wong <li...@gmail.com> wrote:
>
> Loading constraint is a new regulation since sun jdk 1.2.I use a test
> suit,
> finding that there are some difference between harmony and sun jdk 1.5about
> the loading constraint. And I am not quite sure about the native
> resolution
> of harmony. Who can help me to explain why???
>
>
>
> There are two Spoofed.class. One is under the current direction, the other
> is under the direction : greeters/ . They are different but with the same
> name.
>
> Spoofed.class
>
> public class Spoofed {
>
> private int secretValue = 42;
>
> public int giveMeFive() {
>
> return 5;
>
> }
>
> static {
>
> System.out.println(
>
> "linking/ex8/Spoofed initialized.");
>
> }
>
> }
>
> greeters/Spoofed.class
>
> public class Spoofed {
>
> private int secretValue = 100;
>
> public int giveMeFive() {
>
> return secretValue;
>
> }
>
> static {
>
> System.out.println(
>
> "linking/ex8/greeters/Spoofed initialized.");
>
> }
>
> }
>
>
>
> The method to invoke loading is as followed:
>
> public void greet() {
>
> Spoofed spoofed = new Spoofed();
>
> System.out.println("secret val = "+ spoofed.giveMeFive());
>
> spoofed = Delegated.getSpoofed();
>
> System.out.println("secret val = "+ spoofed.giveMeFive());
>
> }
>
> In which the Delegated.class:
>
> public class Delegated {
>
> public static Spoofed getSpoofed() {
>
> return new Spoofed();
>
> }
>
> }
>
>
>
> Then we define the classloader to load the Spoofed.class in greeters. The
> main function invokes greet().Results show as follows:
>
>
>
> Result In sun jdk 1.5:
>
> D:\linking\ex8>java Greet greeters Cracker
>
> linking/ex8/greeters/Spoofed initialized.
>
> secret val = 100
>
> Exception in thread "main" java.lang.LinkageError: Class Spoofed violates
> loader
>
> constraints
>
> at java.lang.ClassLoader.defineClass1(Native Method)
>
> at java.lang.ClassLoader.defineClass(Unknown Source)
>
> at java.security.SecureClassLoader.defineClass(Unknown Source)
>
> at java.net.URLClassLoader.defineClass(Unknown Source)
>
> at java.net.URLClassLoader.access$100(Unknown Source)
>
> at java.net.URLClassLoader$1.run(Unknown Source)
>
> at java.security.AccessController.doPrivileged(Native Method)
>
> at java.net.URLClassLoader.findClass(Unknown Source)
>
> at java.lang.ClassLoader.loadClass(Unknown Source)
>
> at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>
> at java.lang.ClassLoader.loadClass(Unknown Source)
>
> at java.lang.ClassLoader.loadClassInternal(Unknown Source)
>
> at Delegated.getSpoofed(Delegated.java:7)
>
> at Cracker.greet(Cracker.java:13)
>
> at Greet.main(Greet.java:39)
>
>
>
> Result In harmony:
>
> littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$ ./java Greet
> greeters Cracker
>
> linking/ex8/greeters/Spoofed initialized.
>
> secret val = 100
>
> linking/ex8/Spoofed initialized.
>
> secret val = 5
>
> littleice@littleice-desktop:/trunk/target/hdk/jdk/jre/bin$
>
--
Pavel Pervov,
Intel Enterprise Solutions Software Division