cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappClassLoader.java WebappLoader.java

2004-07-26 Thread remm
remm2004/07/26 08:52:17

  Modified:catalina/src/share/org/apache/catalina/loader
WebappClassLoader.java WebappLoader.java
  Log:
  - Update to use a flag for the anti JAR locking code. It isn't as foolproof as the 
other one, since you can't just delete a WAR or expanded
folder to undeploy (on Windows, of course).
  - I think the two flags together will cover all the needs.
  
  Revision  ChangesPath
  1.40  +37 -12
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- WebappClassLoader.java23 Jul 2004 22:40:11 -  1.39
  +++ WebappClassLoader.java26 Jul 2004 15:52:17 -  1.40
  @@ -160,6 +160,13 @@
   protected static final StringManager sm =
   StringManager.getManager(Constants.Package);
   
  +
  +/**
  + * Use anti JAR locking code, which does URL rerouting when accessing
  + * resources.
  + */
  +boolean antiJARLocking = false; 
  +
   
   // --- Constructors
   
  @@ -405,6 +412,22 @@
   
   
   /**
  + * @return Returns the antiJARLocking.
  + */
  +public boolean getAntiJARLocking() {
  +return antiJARLocking;
  +}
  +
  +
  +/**
  + * @param antiJARLocking The antiJARLocking to set.
  + */
  +public void setAntiJARLocking(boolean antiJARLocking) {
  +this.antiJARLocking = antiJARLocking;
  +}
  +
  +
  +/**
* If there is a Java SecurityManager create a read FilePermission
* or JndiPermission for the file directory path.
*
  @@ -1027,17 +1050,19 @@
   if (url != null) {
   // Locating the repository for special handling in the case 
   // of a JAR
  -ResourceEntry entry = (ResourceEntry) resourceEntries.get(name);
  -try {
  -String repository = entry.codeBase.toString();
  -if ((repository.endsWith(.jar)) 
  - (!(name.endsWith(.class {
  -// Copy binary content to the work directory if not present
  -File resourceFile = new File(loaderDir, name);
  -url = resourceFile.toURL();
  +if (antiJARLocking) {
  +ResourceEntry entry = (ResourceEntry) resourceEntries.get(name);
  +try {
  +String repository = entry.codeBase.toString();
  +if ((repository.endsWith(.jar)) 
  + (!(name.endsWith(.class {
  +// Copy binary content to the work directory if not present
  +File resourceFile = new File(loaderDir, name);
  +url = resourceFile.toURL();
  +}
  +} catch (Exception e) {
  +// Ignore
   }
  -} catch (Exception e) {
  -// Ignore
   }
   if (log.isDebugEnabled())
   log.debug(  -- Returning ' + url.toString() + ');
  @@ -1766,7 +1791,7 @@
   }
   
   // Extract resources contained in JAR to the workdir
  -if (!(path.endsWith(.class))) {
  +if (antiJARLocking  !(path.endsWith(.class))) {
   byte[] buf = new byte[1024];
   File resourceFile = new File
   (loaderDir, jarEntry.getName());
  
  
  
  1.31  +3 -1  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- WebappLoader.java 23 Jul 2004 22:40:11 -  1.30
  +++ WebappLoader.java 26 Jul 2004 15:52:17 -  1.31
  @@ -645,6 +645,8 @@
   classLoader = createClassLoader();
   classLoader.setResources(container.getResources());
   classLoader.setDelegate(this.delegate);
  +if (container instanceof StandardContext)
  +classLoader.setAntiJARLocking(((StandardContext) 
container).getAntiJARLocking());
   
   for (int i = 0; i  repositories.length; i++) {
   classLoader.addRepository(repositories[i]);
  
  
  


cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappClassLoader.java WebappLoader.java

2004-07-23 Thread remm
remm2004/07/23 15:40:11

  Modified:catalina/src/share/org/apache/catalina/loader
WebappClassLoader.java WebappLoader.java
  Log:
  - enum - enumeration (JDK 1.5 update).
  
  Revision  ChangesPath
  1.39  +7 -7  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- WebappClassLoader.java3 Jul 2004 19:51:14 -   1.38
  +++ WebappClassLoader.java23 Jul 2004 22:40:11 -  1.39
  @@ -703,10 +703,10 @@
   if (getJarPath() != null) {
   
   try {
  -NamingEnumeration enum = resources.listBindings(getJarPath());
  +NamingEnumeration enumeration = 
resources.listBindings(getJarPath());
   int i = 0;
  -while (enum.hasMoreElements()  (i  length)) {
  -NameClassPair ncPair = (NameClassPair) enum.nextElement();
  +while (enumeration.hasMoreElements()  (i  length)) {
  +NameClassPair ncPair = (NameClassPair) 
enumeration.nextElement();
   String name = ncPair.getName();
   // Ignore non JARs present in the lib folder
   if (!name.endsWith(.jar))
  @@ -719,10 +719,10 @@
   }
   i++;
   }
  -if (enum.hasMoreElements()) {
  -while (enum.hasMoreElements()) {
  +if (enumeration.hasMoreElements()) {
  +while (enumeration.hasMoreElements()) {
   NameClassPair ncPair = 
  -(NameClassPair) enum.nextElement();
  +(NameClassPair) enumeration.nextElement();
   String name = ncPair.getName();
   // Additional non-JAR files are allowed
   if (name.endsWith(.jar)) {
  
  
  
  1.30  +7 -7  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- WebappLoader.java 23 Jun 2004 16:59:41 -  1.29
  +++ WebappLoader.java 23 Jul 2004 22:40:11 -  1.30
  @@ -985,10 +985,10 @@
   
   // Looking up directory /WEB-INF/lib in the context
   try {
  -NamingEnumeration enum = resources.listBindings(libPath);
  -while (enum.hasMoreElements()) {
  +NamingEnumeration enumeration = resources.listBindings(libPath);
  +while (enumeration.hasMoreElements()) {
   
  -Binding binding = (Binding) enum.nextElement();
  +Binding binding = (Binding) enumeration.nextElement();
   String filename = libPath + / + binding.getName();
   if (!filename.endsWith(.jar))
   continue;
  @@ -1137,10 +1137,10 @@
   
   try {
   
  -NamingEnumeration enum = srcDir.list();
  -while (enum.hasMoreElements()) {
  +NamingEnumeration enumeration = srcDir.list();
  +while (enumeration.hasMoreElements()) {
   NameClassPair ncPair =
  -(NameClassPair) enum.nextElement();
  +(NameClassPair) enumeration.nextElement();
   String name = ncPair.getName();
   Object object = srcDir.lookup(name);
   File currentFile = new File(destDir, name);
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappClassLoader.java WebappLoader.java

2003-06-15 Thread remm
remm2003/06/15 00:22:16

  Modified:catalina/src/share/org/apache/catalina/loader
WebappClassLoader.java WebappLoader.java
  Log:
  - Add a machanism to release JAR objects periodically.
  - This should decrease classloading performance because of a big sync block
during JAR access, but lookup of previously loaded class will behave the same as 
before.
  - Add a workaround for JAR locking with XML processing and getResource.
If the resource was loaded from a JAR, it will be extracted as needed to the
work directory.
  
  Revision  ChangesPath
  1.17  +163 -59   
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- WebappClassLoader.java12 Jun 2003 22:02:12 -  1.16
  +++ WebappClassLoader.java15 Jun 2003 07:22:16 -  1.17
  @@ -61,6 +61,7 @@
   package org.apache.catalina.loader;
   
   import java.io.File;
  +import java.io.FileOutputStream;
   import java.io.FilePermission;
   import java.io.InputStream;
   import java.io.ByteArrayInputStream;
  @@ -285,6 +286,12 @@
   
   
   /**
  + * Last time a JAR was accessed.
  + */
  +protected long lastJarAccessed = 0L;
  +
  +
  +/**
* The list of local repositories, in the order they should be searched
* for locally loaded classes or resources.
*/
  @@ -348,6 +355,12 @@
   
   
   /**
  + * Path where resources loaded from JARs will be extracted.
  + */
  +private File loaderDir = null;
  +
  +
  +/**
* The PermissionCollection for each CodeSource for a web
* application context.
*/
  @@ -534,6 +547,14 @@
   }
   
   
  +/**
  + * Change the work directory.
  + */
  +public void setWorkDir(File workDir) {
  +this.loaderDir = new File(workDir, loader);
  +}
  +
  +
   // --- Reloader Methods
   
   
  @@ -977,15 +998,18 @@
   }
   
   // Looking at the JAR files
  -for (i = 0; i  jarFilesLength; i++) {
  -JarEntry jarEntry = jarFiles[i].getJarEntry(name);
  -if (jarEntry != null) {
  -try {
  -String jarFakeUrl = getURI(jarRealFiles[i]).toString();
  -jarFakeUrl = jar: + jarFakeUrl + !/ + name;
  -result.addElement(new URL(jarFakeUrl));
  -} catch (MalformedURLException e) {
  -// Ignore
  +synchronized (jarFiles) {
  +openJARs();
  +for (i = 0; i  jarFilesLength; i++) {
  +JarEntry jarEntry = jarFiles[i].getJarEntry(name);
  +if (jarEntry != null) {
  +try {
  +String jarFakeUrl = getURI(jarRealFiles[i]).toString();
  +jarFakeUrl = jar: + jarFakeUrl + !/ + name;
  +result.addElement(new URL(jarFakeUrl));
  +} catch (MalformedURLException e) {
  +// Ignore
  +}
   }
   }
   }
  @@ -1052,6 +1076,33 @@
   // (2) Search local repositories
   url = findResource(name);
   if (url != null) {
  +// Locating the repository for special handling in the case 
  +// of a JAR
  +ResourceEntry entry = (ResourceEntry) resourceEntries.get(name);
  +FileOutputStream os = null;
  +try {
  +String repository = entry.codeBase.toString();
  +if (repository.endsWith(.jar)) {
  +// Copy binary content to the work directory if not present
  +File resourceFile = new File(loaderDir, name);
  +if (entry.lastModified  resourceFile.lastModified()) {
  +resourceFile.getParentFile().mkdirs();
  +os = new FileOutputStream(resourceFile);
  +os.write(entry.binaryContent);
  +}
  +url = resourceFile.toURL();
  +}
  +} catch (Exception e) {
  +// Ignore
  +e.printStackTrace();
  +} finally {
  +if (os != null) {
  +try {
  +os.close();
  +} catch (IOException ex) {
  +}
  +}
  +}
   if (log.isDebugEnabled())
   log.debug(  -- Returning ' + url.toString() + ');
   return (url);
  

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappClassLoader.java WebappLoader.java

2003-03-08 Thread glenn
glenn   2003/03/08 09:01:20

  Modified:catalina/src/share/org/apache/catalina/loader
WebappClassLoader.java WebappLoader.java
  Log:
  Port bug #17775 patch from Tomcat 4
  
  Revision  ChangesPath
  1.15  +19 -4 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- WebappClassLoader.java4 Feb 2003 07:24:22 -   1.14
  +++ WebappClassLoader.java8 Mar 2003 17:01:20 -   1.15
  @@ -464,14 +464,27 @@
* @param path file directory path
*/
   public void addPermission(String path) {
  +if (path == null) {
  +return;
  +}
  +
   if (securityManager != null) {
   Permission permission = null;
   if( path.startsWith(jndi:) || path.startsWith(jar:jndi:) ) {
  +if (!path.endsWith(/)) {
  +path = path + /;
  +}
   permission = new JndiPermission(path + *);
  +addPermission(permission);
   } else {
  -permission = new FilePermission(path + -,read);
  +if (!path.endsWith(File.separator)) {
  +permission = new FilePermission(path, read);
  +addPermission(permission);
  +path = path + File.separator;
  +}
  +permission = new FilePermission(path + -, read);
  +addPermission(permission);
   }
  -addPermission(permission);
   }
   }
   
  @@ -483,7 +496,9 @@
* @param url URL for a file or directory on local system
*/
   public void addPermission(URL url) {
  -addPermission(url.toString());
  +if (url != null) {
  +addPermission(url.toString());
  +}
   }
   
   
  
  
  
  1.8   +15 -28
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- WebappLoader.java 26 Feb 2003 20:20:39 -  1.7
  +++ WebappLoader.java 8 Mar 2003 17:01:20 -   1.8
  @@ -898,37 +898,28 @@
   String contextRoot = servletContext.getRealPath(/);
   if (contextRoot != null) {
   try {
  -contextRoot = 
  -(new File(contextRoot)).getCanonicalPath() 
  -+ File.separator;
  +contextRoot = (new File(contextRoot)).getCanonicalPath();
   classLoader.addPermission(contextRoot);
   } catch (IOException e) {
   // Ignore
   }
   }
   
  -URL classesURL =
  -servletContext.getResource(/WEB-INF/classes/);
  -if (classesURL != null)
  -classLoader.addPermission(classesURL);
  -
  +URL classesURL = servletContext.getResource(/WEB-INF/classes/);
  +classLoader.addPermission(classesURL);
   URL libURL = servletContext.getResource(/WEB-INF/lib/);
  -if (libURL != null) {
  -classLoader.addPermission(libURL);
  -}
  +classLoader.addPermission(libURL);
   
   if (contextRoot != null) {
   
   if (libURL != null) {
   File rootDir = new File(contextRoot);
   File libDir = new File(rootDir, WEB-INF/lib/);
  -String path = null;
   try {
  -path = libDir.getCanonicalPath() + File.separator;
  +String path = libDir.getCanonicalPath();
  +classLoader.addPermission(path);
   } catch (IOException e) {
   }
  -if (path != null)
  -classLoader.addPermission(path);
   }
   
   } else {
  @@ -936,23 +927,19 @@
   if (workDir != null) {
   if (libURL != null) {
   File libDir = new File(workDir, WEB-INF/lib/);
  -String path = null;
   try {
  -path = libDir.getCanonicalPath() + File.separator;
  +String path =