I am not sure if your assertion that runtime generated classes are fundamentally a problem for OSGi - if that is indeed true - OSGi will have deep problems in practical use. Lots of modern tools or frameworks now generates bytecode at runtime - it is very very very common, and it only getting more common. Java getting anonymous classloaders and the JVM eliminating permspace as a separate memory space point to even more usage of runtime code generation - it is here to stay. <br>
<br><div class="gmail_quote">On Thu, Oct 28, 2010 at 6:39 PM, Guillaume Sauthier <span dir="ltr">&lt;<a href="mailto:guillaume.sauthier@ow2.org">guillaume.sauthier@ow2.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Edison<br>
<br>
To be more concrete, I would like to create first a maven plugin that<br>
precompiles the rule discovered in the module and simply place the<br>
compiled classes in a given directory.<br>
<br>
Currently, I may use the reflection trick to access what I want (the<br>
PackageStore), but if it could be part of an API, that would be better :)<br>
<br>
Does it seems weird ? Is a patch welcome for this problem ?<br>
<br>
--G<br>
<br>
Le 26/10/2010 09:49, Guillaume Sauthier a écrit :<br>
<div><div></div><div class="h5">&gt; Thanks for your answer Edson.<br>
&gt;<br>
&gt; The reason I have is that runtime generated stuff usually don&#39;t fit well<br>
&gt; in an OSGi model.<br>
&gt;<br>
&gt; When you take a bundle, it has a statically defined set of &quot;imported<br>
&gt; packages&quot;. that means that when the bundle has been compiled, a list of<br>
&gt; packages to be wired in at deployment time has been computed. This list<br>
&gt; of packages if inferred from what the .class files (in the bundle)<br>
&gt; requires to be executed (think of them as external dependencies).<br>
&gt;<br>
&gt; Now if we generate some classes at runtime in an OSGi environment, we<br>
&gt; can see that generated classes can have different (or additional)<br>
&gt; requirements in terms of java packages. So usually, with OSGi, that ends<br>
&gt; up by adding a special header called DynamicImport-Package into the<br>
&gt; MANIFEST, with the side effects of breaking modularity :-(<br>
&gt;<br>
&gt; This is what I want to avoid by having access to the generated classes<br>
&gt; at the compilation phase: I can then use this bytecode (IOW giving it to<br>
&gt; Bnd [1]) to complete the Import-Package MANIFEST header with the right<br>
&gt; set of imported java packages.<br>
&gt;<br>
&gt; As a second issue, less important for the moment and more runtime<br>
&gt; oriented this time, I would like to know if/how we can add a new kind of<br>
&gt; Resource.<br>
&gt; Once we have generated the bytecode in the compilation phase, we can<br>
&gt; assume that all the stuff is already here in the bundle. Why can&#39;t we<br>
&gt; use it ?<br>
&gt; I&#39;ve seen the PKG Resource type, but it&#39;s some kind of serialization of<br>
&gt; a whole Package, couldn&#39;t it be possible to have a new Package type (or<br>
&gt; way to create a Package) that can use the ClassLoader to get access to<br>
&gt; the already present bundle&#39;s resources instead of using the byte[] from<br>
&gt; the serialized Package ?<br>
&gt;<br>
&gt; WDYT?<br>
&gt;<br>
&gt; Thanks<br>
&gt; --G<br>
&gt;<br>
&gt; [1]. <a href="http://www.aqute.biz/Code/Bnd" target="_blank">http://www.aqute.biz/Code/Bnd</a><br>
&gt;<br>
&gt; Le 25/10/2010 21:26, Edson Tirelli a écrit :<br>
&gt;<br>
&gt;&gt;      Not exactly sure how helpful would it be to store the generated<br>
&gt;&gt; bytecodes in an osgi bundle. Anyway, there is no API right now to do<br>
&gt;&gt; that, but you can use reflection to achieve the same:<br>
&gt;&gt;<br>
&gt;&gt;           PackageCompilationData data = pkg.getPackageCompilationData();<br>
&gt;&gt;           Field field = PackageCompilationData.class.getDeclaredField( &quot;store&quot; );<br>
&gt;&gt;           field.setAccessible( true );<br>
&gt;&gt;           Map&lt;String, byte[]&gt;   store = (Map&lt;String, byte[]&gt;) field.get( data );<br>
&gt;&gt;<br>
&gt;&gt;      If you can justify the need for such an API, I guess we could be<br>
&gt;&gt; convinced to add one.<br>
&gt;&gt;<br>
&gt;&gt;      Edson<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2010/10/25 Guillaume Sauthier&lt;<a href="mailto:guillaume.sauthier@ow2.org">guillaume.sauthier@ow2.org</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hi team<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;ve tried the IRC (without much success I admit), maybe here someone will<br>
&gt;&gt;&gt; have some thoughts to share :)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m looking for a way to &quot;intercept&quot; the classes being generated by the<br>
&gt;&gt;&gt; drools compiler.<br>
&gt;&gt;&gt; I&#39;ve seen that the classes bytecode is stored deep in<br>
&gt;&gt;&gt; PackageStore/JavaDialectRuntimeData, so deep that I cannot easily access it<br>
&gt;&gt;&gt; :)<br>
&gt;&gt;&gt; The objective is to be able to give theses classes to Bnd (I want to store<br>
&gt;&gt;&gt; all of that in an OSGi bundle) so that appropriate Import-Packages can be<br>
&gt;&gt;&gt; computed. That will avoid to have DynamicImport-Packages all around my<br>
&gt;&gt;&gt; bundles :)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Currently, what I get from the drools compiler is a<br>
&gt;&gt;&gt; Collection&lt;KnowledgePackage&gt;   but I have no API (or didn&#39;t find any) to<br>
&gt;&gt;&gt; access (or know) the classes generated by the compiler.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Any ideas ?<br>
&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt; --Guillaume<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; rules-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-dev mailing list<br>
&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Michael D Neale<br>home: <a href="http://www.michaelneale.net">www.michaelneale.net</a><br>blog: <a href="http://michaelneale.blogspot.com">michaelneale.blogspot.com</a><br>