<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="https://wiki.apidesign.org/skins/common/feed.css?116"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=BootstrappingEquinox</id>
		<title>BootstrappingEquinox - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=BootstrappingEquinox"/>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;action=history"/>
		<updated>2026-05-14T02:55:59Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.12.0rc1</generator>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=4469&amp;oldid=prev</id>
		<title>JaroslavTulach at 14:54, 29 January 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=4469&amp;oldid=prev"/>
				<updated>2011-01-29T14:54:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 14:54, 29 January 2011&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment! &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Unless you combine it with additional [[NetbinoxHook]]s.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example one can weave the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other [[ClassLoader]] than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[NetbinoxHook|&lt;/ins&gt;hooks&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;for various extensions. For example one can weave the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other [[ClassLoader]] than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=4243&amp;oldid=prev</id>
		<title>JaroslavTulach at 08:21, 8 November 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=4243&amp;oldid=prev"/>
				<updated>2010-11-08T08:21:59Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 08:21, 8 November 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example one can weave the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader &lt;/del&gt;than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example one can weave the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[ClassLoader]] &lt;/ins&gt;than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The use of Class.forName is the main blocker. It means only classes directly visible by the ''equinox.jar'' are accessible. This is not really suitable for [[modular system]] and implies that you basically need to load ''equinox.jar'' and [[AspectJ]] weaving [[JAR]] by the same &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader&lt;/del&gt;. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The use of Class.forName is the main blocker. It means only classes directly visible by the ''equinox.jar'' are accessible. This is not really suitable for [[modular system]] and implies that you basically need to load ''equinox.jar'' and [[AspectJ]] weaving [[JAR]] by the same &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[ClassLoader]]&lt;/ins&gt;. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If the above code used classical&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If the above code used classical&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;clazz = Class.forName(hookName, true, l);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;clazz = Class.forName(hookName, true, l);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving code would be in its own &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader &lt;/del&gt;just with a [[dependency]] on the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader &lt;/del&gt;providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving code would be in its own &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[ClassLoader]] &lt;/ins&gt;just with a [[dependency]] on the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[ClassLoader]] &lt;/ins&gt;providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem the code can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem the code can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3696&amp;oldid=prev</id>
		<title>JaroslavTulach at 08:13, 7 May 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3696&amp;oldid=prev"/>
				<updated>2010-05-07T08:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 08:13, 7 May 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving code would be in its own classloader just with a [[dependency]] on the classloader providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving code would be in its own classloader just with a [[dependency]] on the classloader providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;they &lt;/del&gt;can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;were &lt;/del&gt;used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the code &lt;/ins&gt;can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;I know the [[Equinox]] guys are well aware of the problem of adopting plain [[Java]] libraries to modular environment (I've noticed their [http://wiki.eclipse.org/Context_Class_Loader_Enhancements buddy classloading policy]). Such [[Java]] libraries usually assume flat classpath - e.g. they believe it is possible to load any class just by knowing its name. Only later, when somebody tries to use such libraries in a [[modular system]], the flaws of this approach appear. The fix is as simple as shown above. But the organizational issues! Someone has to apply the patch, then everyone has to wait for new release of the broken library. To make things even worse, sometimes one gets into long and useless discussions with authors of the libraries in question. They usually don't experienced modularity yet and don't understand what is wrong with their code. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;I know the [[Equinox]] guys are well aware of the problem of adopting plain [[Java]] libraries to modular environment (I've noticed their [http://wiki.eclipse.org/Context_Class_Loader_Enhancements buddy classloading policy]). Such [[Java]] libraries usually assume flat classpath - e.g. they believe it is possible to load any class just by knowing its name. Only later, when somebody tries to use such libraries in a [[modular system]], the flaws of this approach appear. The fix is as simple as shown above. But the organizational issues! Someone has to apply the patch, then everyone has to wait for new release of the broken library. To make things even worse, sometimes one gets into long and useless discussions with authors of the libraries in question. They usually don't experienced modularity yet and don't understand what is wrong with their code. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3694&amp;oldid=prev</id>
		<title>JaroslavTulach at 08:10, 7 May 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3694&amp;oldid=prev"/>
				<updated>2010-05-07T08:10:34Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 08:10, 7 May 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;clazz = Class.forName(hookName, true, l);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;clazz = Class.forName(hookName, true, l);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;module &lt;/del&gt;would be in its own [[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;JAR&lt;/del&gt;]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;with dependency &lt;/del&gt;on the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;module &lt;/del&gt;providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code &lt;/ins&gt;would be in its own &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader just with a &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;dependency&lt;/ins&gt;]] on the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloader &lt;/ins&gt;providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem they can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you were used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Oh those [[BootstrappingEquinox|boostraping problems]]! Some core part of the system just can't be modular! At least it might seem they can't be modular, until somebody puts another bootstrapping code (in this case [[Netbinox]]) around your bootstrapping code (old good [[Equinox]]). Then all the modularity rules that you were used to apply to libraries loaded by your framework are suddenly being applied to your framework as well.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3693&amp;oldid=prev</id>
		<title>JaroslavTulach at 08:08, 7 May 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3693&amp;oldid=prev"/>
				<updated>2010-05-07T08:08:54Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 08:08, 7 May 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fastest [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;for weaving &lt;/del&gt;the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other classloader than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself], but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;one can weave &lt;/ins&gt;the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] being designed in modular way - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other classloader than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3692&amp;oldid=prev</id>
		<title>JaroslavTulach at 08:08, 7 May 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3692&amp;oldid=prev"/>
				<updated>2010-05-07T08:08:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 08:08, 7 May 2010&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fasted &lt;/del&gt;[[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fastest &lt;/ins&gt;[[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue itself&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/ins&gt;, but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example for weaving the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;being &lt;/ins&gt;designed &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;in &lt;/ins&gt;modular &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;way &lt;/ins&gt;- e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other classloader than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/del&gt;itself, but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example for weaving the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] designed &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;to be &lt;/del&gt;modular - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other classloader than own! The problem seems to be in ''HookRegistry.java'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving module would be in its own [[JAR]] with dependency on the module providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;then the loading succeeded even in case the [[AspectJ]] weaving module would be in its own [[JAR]] with dependency on the module providing ''equinox.jar''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;I understand the &lt;/del&gt;[[BootstrappingEquinox|boostraping problems]]&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. I even know that there is  [http://wiki.eclipse.org/Context_Class_Loader_Enhancements buddy classloading policy] - so &lt;/del&gt;it &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is clear the &lt;/del&gt;[[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Equinox&lt;/del&gt;]] &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;guys already faced problem of using plain &lt;/del&gt;[[&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Java&lt;/del&gt;]] libraries &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;in modular [[environment]]&lt;/del&gt;. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Oh those &lt;/ins&gt;[[BootstrappingEquinox|boostraping problems]]&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;! Some core part of the system just can't be modular! At least &lt;/ins&gt;it &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;might seem they can't be modular, until somebody puts another bootstrapping code (in this case &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Netbinox&lt;/ins&gt;]]&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;) around your bootstrapping code (old good &lt;/ins&gt;[[&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Equinox&lt;/ins&gt;]]&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;). Then all the modularity rules that you were used to apply to &lt;/ins&gt;libraries &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;loaded by your framework are suddenly being applied to your framework as well&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Such [[Java]] libraries usually assume flat &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classloaders &lt;/del&gt;- e.g. they believe it is possible to load any class just by knowing its name. Only later, when somebody tries to use such libraries in a [[modular system]], the flaws of this approach appear. The fix is as simple as shown above, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;but someone &lt;/del&gt;has to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;do it and &lt;/del&gt;wait for new release of the broken library. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Sometimes this involves &lt;/del&gt;long and useless discussions with authors of the libraries in question &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;as they &lt;/del&gt;usually don't understand what is wrong with their code. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;I know the [[Equinox]] guys are well aware of the problem of adopting plain [[Java]] libraries to modular environment (I've noticed their [http://wiki.eclipse.org/Context_Class_Loader_Enhancements buddy classloading policy]). &lt;/ins&gt;Such [[Java]] libraries usually assume flat &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;classpath &lt;/ins&gt;- e.g. they believe it is possible to load any class just by knowing its name. Only later, when somebody tries to use such libraries in a [[modular system]], the flaws of this approach appear. The fix is as simple as shown above&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. But the organizational issues! Someone has to apply the patch&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;then everyone &lt;/ins&gt;has to wait for new release of the broken library. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;To make things even worse, sometimes one gets into &lt;/ins&gt;long and useless discussions with authors of the libraries in question&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. They &lt;/ins&gt;usually &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;don't experienced modularity yet and &lt;/ins&gt;don't understand what is wrong with their code. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;I hope that &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;nothing outlined above &lt;/del&gt;will happen in case of [[Equinox]]. I am sure [[Equinox]] maintainers understand modularity and will be willing to fix their code soon. The only thing surprises me: how could a modular framework make such mistake and be so unsuitable for modular &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;development&lt;/del&gt;?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;I hope that &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;no such ''social'' issues &lt;/ins&gt;will happen in case of [[Equinox]]. I am sure [[Equinox]] maintainers understand modularity and will be willing to fix their code soon. The only thing surprises me: how could a modular framework make such mistake and be so &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[BootstrappingEquinox|&lt;/ins&gt;unsuitable for modular &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;execution]]&lt;/ins&gt;?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;comments/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;comments/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3691&amp;oldid=prev</id>
		<title>JaroslavTulach: New page: Those of you who watch my experiments with OSGi, know that I tweaked Equinox to create the fasted OSGi container - Netbinox. Thi...</title>
		<link rel="alternate" type="text/html" href="https://wiki.apidesign.org/index.php?title=BootstrappingEquinox&amp;diff=3691&amp;oldid=prev"/>
				<updated>2010-05-07T07:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;New page: Those of you who watch &lt;a href=&quot;/wiki/User:JaroslavTulach&quot; title=&quot;User:JaroslavTulach&quot;&gt;my&lt;/a&gt; experiments with &lt;a href=&quot;/wiki/OSGi&quot; title=&quot;OSGi&quot;&gt;OSGi&lt;/a&gt;, know that I &lt;a href=&quot;/wiki/NetbinoxPerformance&quot; title=&quot;NetbinoxPerformance&quot;&gt;tweaked Equinox&lt;/a&gt; to create the fasted &lt;a href=&quot;/wiki/OSGi&quot; title=&quot;OSGi&quot;&gt;OSGi&lt;/a&gt; container - &lt;a href=&quot;/wiki/Netbinox&quot; title=&quot;Netbinox&quot;&gt;Netbinox&lt;/a&gt;. Thi...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Those of you who watch [[User:JaroslavTulach|my]] experiments with [[OSGi]], know that I [[NetbinoxPerformance|tweaked Equinox]] to create the fasted [[OSGi]] container - [[Netbinox]]. Things are looking good and [[Netbinox]] will work smoothly with [[NetBeans]] 6.9.&lt;br /&gt;
&lt;br /&gt;
There is however [https://netbeans.org/bugzilla/show_bug.cgi?id=180819 one issue] which revealed surprising truth: [[Equinox]] is not ready for modular environment!&lt;br /&gt;
&lt;br /&gt;
The full story is available in [https://netbeans.org/bugzilla/show_bug.cgi?id=180819  the issue] itself, but to make the long story short, here is a summary: The [[Equinox]] offers hooks for various extensions. For example for weaving the loaded classes via [[AspectJ]]. However (in spite [[OSGi]] designed to be modular - e.g. everything loaded by separate class loaders), [[Equinox]] does not seem to be able to load the hook classes from other classloader than own! The problem seems to be in ''HookRegistry.java'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private void loadConfigurators(ArrayList configurators, ArrayList errors) {&lt;br /&gt;
  for (Iterator iHooks = configurators.iterator();iHooks.hasNext();) {&lt;br /&gt;
    String hookName = (String) iHooks.next();&lt;br /&gt;
    Class clazz = Class.forName(hookName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The use of Class.forName is the main blocker. It means only classes directly visible by the ''equinox.jar'' are accessible. This is not really suitable for [[modular system]] and implies that you basically need to load ''equinox.jar'' and [[AspectJ]] weaving [[JAR]] by the same classloader. &lt;br /&gt;
&lt;br /&gt;
If the above code used classical&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
ClassLoader l = Thread.currentThread().getContextClassLoader();&lt;br /&gt;
clazz = Class.forName(hookName, true, l);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
then the loading succeeded even in case the [[AspectJ]] weaving module would be in its own [[JAR]] with dependency on the module providing ''equinox.jar''.&lt;br /&gt;
&lt;br /&gt;
I understand the [[BootstrappingEquinox|boostraping problems]]. I even know that there is  [http://wiki.eclipse.org/Context_Class_Loader_Enhancements buddy classloading policy] - so it is clear the [[Equinox]] guys already faced problem of using plain [[Java]] libraries in modular [[environment]]. &lt;br /&gt;
&lt;br /&gt;
Such [[Java]] libraries usually assume flat classloaders - e.g. they believe it is possible to load any class just by knowing its name. Only later, when somebody tries to use such libraries in a [[modular system]], the flaws of this approach appear. The fix is as simple as shown above, but someone has to do it and wait for new release of the broken library. Sometimes this involves long and useless discussions with authors of the libraries in question as they usually don't understand what is wrong with their code. &lt;br /&gt;
&lt;br /&gt;
I hope that nothing outlined above will happen in case of [[Equinox]]. I am sure [[Equinox]] maintainers understand modularity and will be willing to fix their code soon. The only thing surprises me: how could a modular framework make such mistake and be so unsuitable for modular development?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;comments/&amp;gt;&lt;/div&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	</feed>