From: Robert D. <rdi...@tr...> - 2003-10-20 08:50:49
|
Thanks Oti. Btw, can you tell me the difference between addJarToPackages( j, true ) versus addJarToPackages( j, false )? TIA, R. -----Original Message----- From: Oti [mailto:oh...@ya...]=20 Sent: Monday, October 20, 2003 12:10 AM To: Robert DiFalco; jyt...@li...; jyt...@li... Subject: Re: [Jython-dev] Jython, URLClassLoader, and Packages [ Robert DiFalco ] > So, I have jar (let's call it scripting.jar) whose manifest includes=20 > jython.jar and one of my jars, let's say it is called foo.jar. The=20 > manifest of foo.jar includes bar.jar. >=20 > Now, I load classes from this jar using an URLClassLoader. Mainly, it=20 > is a wrapper around the PythonInterpreter. So, I do something like=20 > this: >=20 > URL[] urls =3D new URL[]{ new URL( scriptingJarURL ) }; > URLClassLoader loader =3D new URLClassLoader( urls, > getClass().getClassLoader() ); >=20 > Class class =3D loader.loadClass( "my.com.InterpreterWrapperImp" ); >=20 > Interpreter interp =3D (Interpreter)class.newInstance(); >=20 >=20 > Now I can "interp" and if my scripts change, create a new instance of=20 > the class with a new class loader. Everything is great EXCEPT that in=20 > the constructor of my wrapper, when creating the PythonInterpreter=20 > instance I am wrapper, I have to connect to the scripting.jar file,=20 > read it's manifest, connect to those jars, read their manifests and > called: >=20 > CachedJarsPackageManager#addJarToPackages >=20 > ..for each one. If I don't, I get import errors in my scripts. Any=20 > thoughts? Is this normal? >=20 > Basically, I do this: >=20 > CachedJarsPackageManager pm =3D (CachedJarsPackageManager) > Py.getSystemState().packageManager; >=20 > // get the urls for this class loader > URL[] urls =3D=20 > ((URLClassLoader)getClass().getClassLoader()).getURLs(); >=20 > // collect all urls from the manifests > Set urlSet =3D new HashSet(); > for ( int at =3D 0, count =3D urls.length; at < count; ++at ) > { > final URL url =3D urls[ at ]; > getAllUrls( url, urlSet ); // recursively load all urls from > jar manifests > } >=20 > // add it jar to the system state packages > for ( Iterator i =3D urlSet.iterator(); i.hasNext(); ) > { > URL url =3D (URL)i.next(); > pm.addJarToPackages( url, false ); > } >=20 > Now, everything works great. My question is, why do I have to do this? Hello Robert, the PackageManager currently cannot handle jars indicated in a manifest of another jar.=20 Good workaround of yours, IMHO ! Best wishes, Oti. |
From: Robert D. <rdi...@tr...> - 2003-10-22 03:14:23
|
Does anyone here have any experience with this? When would one want to send "true" versus "false" to addJarToPackages? -----Original Message----- From: Oti [mailto:oh...@ya...]=20 Sent: Tuesday, October 21, 2003 9:47 AM To: Robert DiFalco; jyt...@li... Subject: RE: [Jython-dev] Jython, URLClassLoader, and Packages Hello Robert, sorry to have not much experience with the caching process itself. From the javadoc: /** Gathers classes info from jar specified by jarurl URL. * Eventually just using previously cached info. * Eventually updated info is (re-)cached if param cache is true. * Persistent cache storage access goes through * inOpenCacheFile() and outCreateCacheFile(). */ public void addJarToPackages(URL jarurl,boolean cache) { Best wishes, Oti. [Robert DiFalco ] > Thanks Oti. Btw, can you tell me the difference between=20 > addJarToPackages( j, true ) versus addJarToPackages( j, false )? ------------------------------------------------------- This SF.net email is sponsored by OSDN developer relations Here's your chance to show off your extensive product knowledge We want to know what you know. Tell us and you have a chance to win $100 http://www.zoomerang.com/survey.zgi?HRPT1X3RYQNC5V4MLNSV3E54 _______________________________________________ Jython-dev mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-dev |
From: Oti <oh...@ya...> - 2003-10-21 20:15:51
|
Hello Robert, sorry to have not much experience with the caching process itself. From the javadoc: /** Gathers classes info from jar specified by jarurl URL. * Eventually just using previously cached info. * Eventually updated info is (re-)cached if param cache is true. * Persistent cache storage access goes through * inOpenCacheFile() and outCreateCacheFile(). */ public void addJarToPackages(URL jarurl,boolean cache) { Best wishes, Oti. [Robert DiFalco ] > Thanks Oti. Btw, can you tell me the difference between > addJarToPackages( j, true ) versus addJarToPackages( j, false )? |