<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Deployer ordering question (JBoss OSGi)
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="http://community.jboss.org/people/bosschaert">David Bosschaert</a> in <i>JBoss Microcontainer</i> - <a href="http://community.jboss.org/message/549421#549421">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><blockquote class="jive-quote"><p>Ales Justin wrote:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><blockquote class="jive-quote">In the JBoss OSGi project I have <a class="jive-link-external-small" href="http://github.com/jbosgi/jbosgi-framework/blob/master/core/src/main/java/org/jboss/osgi/framework/deployers/OSGiStartLevelMetaDataDeployer.java">a deployer</a> that adds some metadata to the deployment unit.</blockquote><p>I only see you reading from deployment unit, but not writing.</p></blockquote><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><pre class="jive-pre"><code class="jive-code">&#160;&#160; protected void internalDeploy(DeploymentUnit unit) throws DeploymentException
&#160;&#160; {
&#160;&#160;&#160;&#160;&#160; StartLevelPlugin slp = bundleManager.getOptionalPlugin(StartLevelPlugin.class);
&#160;&#160;&#160;&#160;&#160; if (slp == null)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;

&#160;&#160;&#160;&#160;&#160; OSGiMetaData md = unit.getAttachment(OSGiMetaData.class);
&#160;&#160;&#160;&#160;&#160; if (md instanceof AbstractOSGiMetaData)
&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AbstractOSGiMetaData amd = (AbstractOSGiMetaData)md;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int bsl = slp.getInitialBundleStartLevel(
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; md.getBundleSymbolicName(),
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Version.parseVersion(md.getBundleVersion()));

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (bsl != StartLevelPlugin.INITIAL_BUNDLE_STARTLEVEL_UNSPECIFIED)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; amd.setInitialStartLevel(bsl);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160; }
&#160;&#160; }</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In the very last line I'm writing to the deployment metadata that is already in the deployment unit.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><blockquote class="jive-quote">In the <a class="jive-link-external-small" href="http://github.com/jbosgi/jbosgi-framework/blob/master/core/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleState.java">OSGiBundleState</a> I want to read that metadata out again after the bundle is installed. Currently in the code it initialises that metadata at the beginning of the start() method but that's really too late because you also want to be able to read out the start level of bundles that are just installed.<blockquote class="jive-quote"><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Is there a callback I can add to OSGiBundleState that gets called after my OSGiStartLevelMetaDataDeployer has run but still as part of the bundle install?</p></blockquote><p>I don't understand what exactly do you mean / need.</p></blockquote><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I need to access this OSGiMetaData in the OSGiBundleState after the bundle was installed but before someone calls start(). I tried overriding changeState() with reacting to the Bundle.INSTALLED change state but that's always called back before my deployer was called (too early).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So I need a callback in the OSGiBundleState that calls me back at the right time so I can initialize the state based on what's in the OSGiMetaData. I couldn't find the right callback for that. Maybe we need to somehow get the OSGiStartLevelMetaDataDeployer to run a bit earlier as well to achieve this, I'm not sure...</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/549421#549421">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Microcontainer at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2114">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>