Re: log4j class loader

2012-03-07 Thread Michelle Caisse

Which classloader is the one used to load log4j?  -- Michelle

On 3/6/2012 7:36 PM, Craig L Russell wrote:

Hi Michelle,

On Mar 6, 2012, at 5:50 PM, Michelle Caisse wrote:


On 3/2/2012 11:25 AM, Craig L Russell wrote:
It looks like log4j looks in the class loader that loads the log4j 
classes [1], so putting the configuration file directory in the 
class loader used to load log4j should work.
Would it then also be the case that putting the configuration file in 
the directory from which the log4j jar file is loaded should work? I 
tried this and it did not work.


I looked in Enhance.java and couldn't quite figure out where the 
log4j jar file is being added to the class path.
Log4j is handled by maven's dependency management. The same is 
currently true for the DataNucleus jars, though I had worked on an 
alternative to remove DataNucleus from the classpath when the IUT was 
run.


If you're using maven for dependency management, then maven is only 
going to add the log4j.jar to the classpath, not the directory in 
which log4j.jar is located.


I'd suggest *not* using maven for dependencies for jdori, as it makes 
jdori not like iut.


How about creating a directory for the known jdori dependencies 
including the log4j.properties and all of DN dependencies and treating 
it just like an iut except that it's configured by exectck. Then as 
soon as jdori works, we can expect that a properly set up iut will 
also work.


I understand that there is then a bit of duplicate work to configure 
jdori if you use mvn dependency management for DN, but I think 
removing DN and its dependencies from mvn management is actually a 
good thing.


Craig


-- Michelle


   URL[] classPathURLs = new URL[2];
   ArrayList cpList = new ArrayList();
   ClassLoader loader = null;
   try {
   cpList.add((new 
File(enhancedIdDirName)).toURI().toURL());

   cpList.add((new File(fromDirName)).toURI().toURL());
   String[] jars = {"jar"};
   if (impl.equals("iut")) {
   fi = FileUtils.iterateFiles(new 
File(iutLibsDirectory), jars, true);

   while (fi.hasNext()) {
   cpList.add(fi.next().toURI().toURL());
   }
   }
   loader = new 
URLClassLoader(cpList.toArray(classPathURLs),

   getClass().getClassLoader());
   // Utilities.printClasspath(loader);
   } catch (MalformedURLException ex) {
   
Logger.getLogger(Enhance.class.getName()).log(Level.SEVERE, null, ex);

   }

Actually, I can't figure out where DataNucleus and log4j are being 
added to the class path of the loader.


Craig

[1] sources from log4j
 /**
69
This method will search for resource in different
70
places. The search order is as follows:
71
72

73
74
Search for resource using the thread context
75
class loader under Java2. If that fails, search for
76
resource using the class loader that loaded this
77
class (Loader). Under JDK 1.1, only the the class
78
loader that loaded this class (Loader) is used.
79
80
Try one last time with
81
ClassLoader.getSystemResource(resource), that is is
82
using the system class loader in JDK 1.2 and virtual machine's
83
built-in class loader in JDK 1.1.
84
85

86
*/
87
static public URL getResource(String resource) {
88
ClassLoader classLoader = null;
89
URL url = null;
90
91
try {
92
if(!java1 && !ignoreTCL) {
93
classLoader = getTCL();
94
if(classLoader != null) {
95
LogLog.debug("Trying to find ["+resource+"] using context classloader "
96
+classLoader+".");
97
url = classLoader.getResource(resource);
98
if(url != null) {
99
return url;
100
}
101
}
102
}
103
104
// We could not find resource. Ler us now try with the
105
// classloader that loaded this class.
106
classLoader = Loader.class.getClassLoader();
107
if(classLoader != null) {
108
LogLog.debug("Trying to find ["+resource+"] using "+classLoader
109
+" class loader.");
110
url = classLoader.getResource(resource);
111
if(url != null) {
112
return url;
113
}
114
}
115
} catch(IllegalAccessException t) {
116
LogLog.warn(TSTR, t);
117
} catch(InvocationTargetException t) {
118
if (t.getTargetException() instanceof InterruptedException
119
|| t.getTargetException() instanceof InterruptedIOException) {
120
Thread.currentThread().interrupt();
121
}
122
LogLog.warn(TSTR, t);
123
} catch(Throwable t) {
124
//
125
// can't be InterruptedException or InterruptedIOException
126
// since not declared, must be error or RuntimeError.
127
LogLog.warn(TSTR, t);
128
}
129
130
// Last ditch attempt: get the resource from the class path. It
131
// may be the case that clazz was loaded by the Extentsion class
132
// loader which the parent of the system class loader. Hence the
133
// code below.
134
LogLog.debug("Trying to find ["+resource+
135
"] using ClassLoader.getSystemResource().");
136
return ClassLoader.getSystemResource(resource);
137
}
138
13
Craig L Russel

Re: log4j class loader

2012-03-07 Thread Craig L Russell

Hi Michelle,

I think this problem is due to the maven setup.

If you have maven set up your classpath, and declare a dependency on  
log4j, then maven will put the log4j.jar file into the classpath.


But in order to have maven also put log4j.properties into the  
classpath, you need tell maven to add a dependency on a resources  
directory that has the log4j.properties.


For example,

  


src/main/resources



What the above snippet does is to add src/main/resources to the  
classpath when building the jar file. Something similar needs to be  
done for exectck or tck...


Craig

On Mar 7, 2012, at 6:28 PM, Michelle Caisse wrote:


Which classloader is the one used to load log4j?  -- Michelle

On 3/6/2012 7:36 PM, Craig L Russell wrote:

Hi Michelle,

On Mar 6, 2012, at 5:50 PM, Michelle Caisse wrote:


On 3/2/2012 11:25 AM, Craig L Russell wrote:
It looks like log4j looks in the class loader that loads the  
log4j classes [1], so putting the configuration file directory in  
the class loader used to load log4j should work.
Would it then also be the case that putting the configuration file  
in the directory from which the log4j jar file is loaded should  
work? I tried this and it did not work.


I looked in Enhance.java and couldn't quite figure out where the  
log4j jar file is being added to the class path.
Log4j is handled by maven's dependency management. The same is  
currently true for the DataNucleus jars, though I had worked on an  
alternative to remove DataNucleus from the classpath when the IUT  
was run.


If you're using maven for dependency management, then maven is only  
going to add the log4j.jar to the classpath, not the directory in  
which log4j.jar is located.


I'd suggest *not* using maven for dependencies for jdori, as it  
makes jdori not like iut.


How about creating a directory for the known jdori dependencies  
including the log4j.properties and all of DN dependencies and  
treating it just like an iut except that it's configured by  
exectck. Then as soon as jdori works, we can expect that a properly  
set up iut will also work.


I understand that there is then a bit of duplicate work to  
configure jdori if you use mvn dependency management for DN, but I  
think removing DN and its dependencies from mvn management is  
actually a good thing.


Craig


-- Michelle


  URL[] classPathURLs = new URL[2];
  ArrayList cpList = new ArrayList();
  ClassLoader loader = null;
  try {
  cpList.add((new  
File(enhancedIdDirName)).toURI().toURL());

  cpList.add((new File(fromDirName)).toURI().toURL());
  String[] jars = {"jar"};
  if (impl.equals("iut")) {
  fi = FileUtils.iterateFiles(new  
File(iutLibsDirectory), jars, true);

  while (fi.hasNext()) {
  cpList.add(fi.next().toURI().toURL());
  }
  }
  loader = new  
URLClassLoader(cpList.toArray(classPathURLs),

  getClass().getClassLoader());
  // Utilities.printClasspath(loader);
  } catch (MalformedURLException ex) {
   
Logger.getLogger(Enhance.class.getName()).log(Level.SEVERE, null,  
ex);

  }

Actually, I can't figure out where DataNucleus and log4j are  
being added to the class path of the loader.


Craig

[1] sources from log4j
/**
69
This method will search for resource in different
70
places. The search order is as follows:
71
72

73
74
Search for resource using the thread context
75
class loader under Java2. If that fails, search for
76
resource using the class loader that loaded this
77
class (Loader). Under JDK 1.1, only the the class
78
loader that loaded this class (Loader) is used.
79
80
Try one last time with
81
ClassLoader.getSystemResource(resource), that is is
82
using the system class loader in JDK 1.2 and virtual machine's
83
built-in class loader in JDK 1.1.
84
85

86
*/
87
static public URL getResource(String resource) {
88
ClassLoader classLoader = null;
89
URL url = null;
90
91
try {
92
if(!java1 && !ignoreTCL) {
93
classLoader = getTCL();
94
if(classLoader != null) {
95
LogLog.debug("Trying to find ["+resource+"] using context  
classloader "

96
+classLoader+".");
97
url = classLoader.getResource(resource);
98
if(url != null) {
99
return url;
100
}
101
}
102
}
103
104
// We could not find resource. Ler us now try with the
105
// classloader that loaded this class.
106
classLoader = Loader.class.getClassLoader();
107
if(classLoader != null) {
108
LogLog.debug("Trying to find ["+resource+"] using "+classLoader
109
+" class loader.");
110
url = classLoader.getResource(resource);
111
if(url != null) {
112
return url;
113
}
114
}
115
} catch(IllegalAccessException t) {
116
LogLog.warn(TSTR, t);
117
} catch(InvocationTargetException t) {
118
if (t.getTargetException() instanceof InterruptedException
119
||

Re: log4j class loader

2012-03-07 Thread Michelle Caisse
We already have resource paths set up in the tck project that include 
src/conf, which contains log4j.properties.  I tried adding the same 
lines to exectck, but still get the log4j warning. I looked at the 
jdo-tck-3.1-SNAPSHOT.jar file and both log4j-1.2.13.jar and 
log4j.properties are in the jar at the root level.


-- Michelle

On 3/7/2012 8:16 PM, Craig L Russell wrote:

Hi Michelle,

I think this problem is due to the maven setup.

If you have maven set up your classpath, and declare a dependency on 
log4j, then maven will put the log4j.jar file into the classpath.


But in order to have maven also put log4j.properties into the 
classpath, you need tell maven to add a dependency on a resources 
directory that has the log4j.properties.


For example,




src/main/resources



What the above snippet does is to add src/main/resources to the 
classpath when building the jar file. Something similar needs to be 
done for exectck or tck...


Craig

On Mar 7, 2012, at 6:28 PM, Michelle Caisse wrote:


Which classloader is the one used to load log4j?  -- Michelle

On 3/6/2012 7:36 PM, Craig L Russell wrote:

Hi Michelle,

On Mar 6, 2012, at 5:50 PM, Michelle Caisse wrote:


On 3/2/2012 11:25 AM, Craig L Russell wrote:
It looks like log4j looks in the class loader that loads the log4j 
classes [1], so putting the configuration file directory in the 
class loader used to load log4j should work.
Would it then also be the case that putting the configuration file 
in the directory from which the log4j jar file is loaded should 
work? I tried this and it did not work.


I looked in Enhance.java and couldn't quite figure out where the 
log4j jar file is being added to the class path.
Log4j is handled by maven's dependency management. The same is 
currently true for the DataNucleus jars, though I had worked on an 
alternative to remove DataNucleus from the classpath when the IUT 
was run.


If you're using maven for dependency management, then maven is only 
going to add the log4j.jar to the classpath, not the directory in 
which log4j.jar is located.


I'd suggest *not* using maven for dependencies for jdori, as it 
makes jdori not like iut.


How about creating a directory for the known jdori dependencies 
including the log4j.properties and all of DN dependencies and 
treating it just like an iut except that it's configured by exectck. 
Then as soon as jdori works, we can expect that a properly set up 
iut will also work.


I understand that there is then a bit of duplicate work to configure 
jdori if you use mvn dependency management for DN, but I think 
removing DN and its dependencies from mvn management is actually a 
good thing.


Craig


-- Michelle


  URL[] classPathURLs = new URL[2];
  ArrayList cpList = new ArrayList();
  ClassLoader loader = null;
  try {
  cpList.add((new 
File(enhancedIdDirName)).toURI().toURL());

  cpList.add((new File(fromDirName)).toURI().toURL());
  String[] jars = {"jar"};
  if (impl.equals("iut")) {
  fi = FileUtils.iterateFiles(new 
File(iutLibsDirectory), jars, true);

  while (fi.hasNext()) {
  cpList.add(fi.next().toURI().toURL());
  }
  }
  loader = new 
URLClassLoader(cpList.toArray(classPathURLs),

  getClass().getClassLoader());
  // Utilities.printClasspath(loader);
  } catch (MalformedURLException ex) {
  
Logger.getLogger(Enhance.class.getName()).log(Level.SEVERE, null, 
ex);

  }

Actually, I can't figure out where DataNucleus and log4j are being 
added to the class path of the loader.


Craig

[1] sources from log4j
/**
69
This method will search for resource in different
70
places. The search order is as follows:
71
72

73
74
Search for resource using the thread context
75
class loader under Java2. If that fails, search for
76
resource using the class loader that loaded this
77
class (Loader). Under JDK 1.1, only the the class
78
loader that loaded this class (Loader) is used.
79
80
Try one last time with
81
ClassLoader.getSystemResource(resource), that is is
82
using the system class loader in JDK 1.2 and virtual machine's
83
built-in class loader in JDK 1.1.
84
85

86
*/
87
static public URL getResource(String resource) {
88
ClassLoader classLoader = null;
89
URL url = null;
90
91
try {
92
if(!java1 && !ignoreTCL) {
93
classLoader = getTCL();
94
if(classLoader != null) {
95
LogLog.debug("Trying to find ["+resource+"] using context 
classloader "

96
+classLoader+".");
97
url = classLoader.getResource(resource);
98
if(url != null) {
99
return url;
100
}
101
}
102
}
103
104
// We could not find resource. Ler us now try with the
105
// classloader that loaded this class.
106
classLoader = Loader.class.getClassLoader();
107
if(classLoader != null) {
108
LogLog.debug("Trying to find ["+resource+"] using "+classLoader
109
+" class loader.")

[jira] [Created] (JDO-707) Refactor JDO parent & child poms

2012-03-07 Thread Matthew T. Adams (Created) (JIRA)
Refactor JDO parent & child poms


 Key: JDO-707
 URL: https://issues.apache.org/jira/browse/JDO-707
 Project: JDO
  Issue Type: Improvement
  Components: api, tck
Affects Versions: JDO 3 maintenance release 1 (3.1)
Reporter: Matthew T. Adams
Assignee: Matthew T. Adams
 Fix For: JDO 3 maintenance release 1 (3.1)


Create a parent-pom module, make modules api, exectck & tck inherit from it, 
then create a simple multimodule root pom which can be used to build all 
projects.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Updated] (JDO-707) Refactor JDO parent & child poms

2012-03-07 Thread Matthew T. Adams (Updated) (JIRA)

 [ 
https://issues.apache.org/jira/browse/JDO-707?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matthew T. Adams updated JDO-707:
-

Attachment: JDO-707-1.patch

This patch effectively changes the root pom to be a simple multimodule pom and 
creates a new module, parent-pom, to house a new, JDO parent pom and changes 
the api, exectck & tck modules to inherit it.

> Refactor JDO parent & child poms
> 
>
> Key: JDO-707
> URL: https://issues.apache.org/jira/browse/JDO-707
> Project: JDO
>  Issue Type: Improvement
>  Components: api, tck
>Affects Versions: JDO 3 maintenance release 1 (3.1)
>Reporter: Matthew T. Adams
>Assignee: Matthew T. Adams
>  Labels: parent, pom
> Fix For: JDO 3 maintenance release 1 (3.1)
>
> Attachments: JDO-707-1.patch
>
>
> Create a parent-pom module, make modules api, exectck & tck inherit from it, 
> then create a simple multimodule root pom which can be used to build all 
> projects.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (JDO-708) Create JIRA "component" entry for exectck & parent-pom modules

2012-03-07 Thread Matthew T. Adams (Created) (JIRA)
Create JIRA "component" entry for exectck & parent-pom modules
--

 Key: JDO-708
 URL: https://issues.apache.org/jira/browse/JDO-708
 Project: JDO
  Issue Type: Task
Affects Versions: JDO 3 maintenance release 1 (3.1)
Reporter: Matthew T. Adams
 Fix For: JDO 3 maintenance release 1 (3.1)


The exectck doesn't have a JIRA component entry, so it cannot be identified as 
a component when entering an issue.  If the parent-pom module that is created 
as part of JDO-707 is accepted, then we also need to create a JIRA component 
for that, too.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira