document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-55763\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"kn\">package<\/span> <span class=\"n\">com<\/span><span class=\"o\">.<\/span><span class=\"na\">theoryinpractise<\/span><span class=\"o\">.<\/span><span class=\"na\">clojure<\/span><span class=\"o\">;<\/span><\/div><div class=\"line\" id=\"LC2\">&nbsp;<\/div><div class=\"line\" id=\"LC3\"><span class=\"kn\">import<\/span> <span class=\"nn\">org.osgi.framework.ServiceReference<\/span><span class=\"o\">;<\/span><\/div><div class=\"line\" id=\"LC4\"><span class=\"kn\">import<\/span> <span class=\"nn\">org.osgi.service.component.ComponentContext<\/span><span class=\"o\">;<\/span><\/div><div class=\"line\" id=\"LC5\">&nbsp;<\/div><div class=\"line\" id=\"LC6\"><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Properties<\/span><span class=\"o\">;<\/span><\/div><div class=\"line\" id=\"LC7\">&nbsp;<\/div><div class=\"line\" id=\"LC8\"><span class=\"cm\">/**<\/span><\/div><div class=\"line\" id=\"LC9\"><span class=\"cm\"> * @scr.component<\/span><\/div><div class=\"line\" id=\"LC10\"><span class=\"cm\"> */<\/span><\/div><div class=\"line\" id=\"LC11\">&nbsp;<\/div><div class=\"line\" id=\"LC12\"><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">ClojureProvidingComponent<\/span> <span class=\"o\">{<\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;<\/div><div class=\"line\" id=\"LC14\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"kd\">protected<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">activate<\/span><span class=\"o\">(<\/span><span class=\"n\">ComponentContext<\/span> <span class=\"n\">context<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span><\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">&quot;Java OSGi activator!&quot;<\/span> <span class=\"o\">);<\/span><\/div><div class=\"line\" id=\"LC16\">&nbsp;<\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">ClassLoader<\/span> <span class=\"n\">oldClassLoader<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Thread<\/span><span class=\"o\">.<\/span><span class=\"na\">currentThread<\/span><span class=\"o\">().<\/span><span class=\"na\">getContextClassLoader<\/span><span class=\"o\">();<\/span><\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">try<\/span> <span class=\"o\">{<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Thread<\/span><span class=\"o\">.<\/span><span class=\"na\">currentThread<\/span><span class=\"o\">().<\/span><span class=\"na\">setContextClassLoader<\/span><span class=\"o\">(<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">ClojureProvidingComponent<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">.<\/span><span class=\"na\">getClassLoader<\/span><span class=\"o\">());<\/span><\/div><div class=\"line\" id=\"LC21\">&nbsp;<\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Runnable<\/span> <span class=\"n\">run<\/span> <span class=\"o\">=<\/span> <span class=\"o\">(<\/span><span class=\"n\">Runnable<\/span><span class=\"o\">)<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"na\">getBundleContext<\/span><span class=\"o\">().<\/span><span class=\"na\">getBundle<\/span><span class=\"o\">().<\/span><span class=\"na\">loadClass<\/span><span class=\"o\">(<\/span><\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"s\">&quot;com.theoryinpractise.clojure.runnable&quot;<\/span><span class=\"o\">).<\/span><span class=\"na\">newInstance<\/span><span class=\"o\">();<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;<\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"na\">getBundleContext<\/span><span class=\"o\">().<\/span><span class=\"na\">registerService<\/span><span class=\"o\">(<\/span><\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Runnable<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">.<\/span><span class=\"na\">getName<\/span><span class=\"o\">(),<\/span> <span class=\"n\">run<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Properties<\/span><span class=\"o\">());<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;<\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">}<\/span> <span class=\"k\">catch<\/span><span class=\"o\">(<\/span><span class=\"n\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">printStackTrace<\/span><span class=\"o\">();<\/span><\/div><div class=\"line\" id=\"LC30\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">}<\/span> <span class=\"k\">finally<\/span> <span class=\"o\">{<\/span><\/div><div class=\"line\" id=\"LC31\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Thread<\/span><span class=\"o\">.<\/span><span class=\"na\">currentThread<\/span><span class=\"o\">().<\/span><span class=\"na\">setContextClassLoader<\/span><span class=\"o\">(<\/span><span class=\"n\">oldClassLoader<\/span><span class=\"o\">);<\/span><\/div><div class=\"line\" id=\"LC32\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">}<\/span><\/div><div class=\"line\" id=\"LC33\">&nbsp;<\/div><div class=\"line\" id=\"LC34\">&nbsp;<\/div><div class=\"line\" id=\"LC35\">&nbsp;<\/div><div class=\"line\" id=\"LC36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">// Now look up the service<\/span><\/div><div class=\"line\" id=\"LC37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">ServiceReference<\/span> <span class=\"n\">runReference<\/span> <span class=\"o\">=<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"na\">getBundleContext<\/span><span class=\"o\">()<\/span><\/div><div class=\"line\" id=\"LC38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">.<\/span><span class=\"na\">getServiceReference<\/span><span class=\"o\">(<\/span><span class=\"n\">Runnable<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">.<\/span><span class=\"na\">getName<\/span><span class=\"o\">());<\/span><\/div><div class=\"line\" id=\"LC39\">&nbsp;<\/div><div class=\"line\" id=\"LC40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Runnable<\/span> <span class=\"n\">theRunnable<\/span> <span class=\"o\">=<\/span> <span class=\"o\">(<\/span><span class=\"n\">Runnable<\/span><span class=\"o\">)<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"na\">getBundleContext<\/span><span class=\"o\">()<\/span><\/div><div class=\"line\" id=\"LC41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">.<\/span><span class=\"na\">getService<\/span><span class=\"o\">(<\/span><span class=\"n\">runReference<\/span><span class=\"o\">);<\/span><\/div><div class=\"line\" id=\"LC42\">&nbsp;<\/div><div class=\"line\" id=\"LC43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">theRunnable<\/span><span class=\"o\">.<\/span><span class=\"na\">run<\/span><span class=\"o\">();<\/span><\/div><div class=\"line\" id=\"LC44\">&nbsp;<\/div><div class=\"line\" id=\"LC45\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"o\">}<\/span><\/div><div class=\"line\" id=\"LC46\">&nbsp;<\/div><div class=\"line\" id=\"LC47\"><span class=\"o\">}<\/span><\/div><div class=\"line\" id=\"LC48\">&nbsp;<\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/55763/3c9b338e7da2dea3d24013a0256812fb0c40815e/ClojureProvidingComponent.java\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/55763#file_clojure_providing_component.java\" style=\"float:right;margin-right:10px;color:#666\">ClojureProvidingComponent.java<\/a>\n          <a href=\"http://gist.github.com/55763\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
