﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-飞云小侠之风儿吹过-随笔分类-OSGI</title><link>http://www.blogjava.net/scud/category/45644.html</link><description>山谷里鸟语花香,溪水潺潺</description><language>zh-cn</language><lastBuildDate>Mon, 19 Jul 2010 16:48:18 GMT</lastBuildDate><pubDate>Mon, 19 Jul 2010 16:48:18 GMT</pubDate><ttl>60</ttl><item><title>OSGi原理与最佳实践  读书备注</title><link>http://www.blogjava.net/scud/archive/2010/07/18/326462.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sun, 18 Jul 2010 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/07/18/326462.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/326462.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/07/18/326462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/326462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/326462.html</trackback:ping><description><![CDATA[<br />
1. 页面乱码问题是输出方式造成的:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">ServletOutputStream&nbsp;output=response.getOutputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">output.println(sb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">output.close();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;writer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;response.getWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.print(sb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.close();<br />
</span></div>
<br />
OutputStream没有考虑编码, 用于二进制.<br />
<br />
2. 有些文件缺少, 自己复制就行了.<br />
<br />
&nbsp;&nbsp; 具体自己找吧.<br />
<br />
3. Spring-Bundle可以用 Spring 2.5.6的 spring.jar &nbsp; 代替. 或者下载Spring IDE也可以.<br />
<br />
&nbsp;&nbsp; 其他很多依赖包随着版本变化 也发生了很多, 注意更新吧, 老对着书解决不了的<br />
<br />
<br />
4. OSGI 目前干活还得用Eclipse, 其他IDE的支持还有待完善. 不过Eclipse的智能化确实....<br />
<br />
<br />
<br />
<br />
待续...<br />
<br />
<br />
从书中可以看出作者水平很棒, 不过有的地方讲的很突然, 会把把读者弄得很迷糊, 需要读者具有一定的钻研水平才能搞懂, 这也是研究OSGI的人需要具备的.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/scud/aggbug/326462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-07-18 20:07 <a href="http://www.blogjava.net/scud/archive/2010/07/18/326462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI的依赖关系真郁闷</title><link>http://www.blogjava.net/scud/archive/2010/07/16/326315.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Fri, 16 Jul 2010 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/07/16/326315.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/326315.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/07/16/326315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/326315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/326315.html</trackback:ping><description><![CDATA[它不说, 你稀里糊涂 导致服务没启动.......<br />
<br />
org.eclipse.equinox.ds_1.2.0.v20100507 需要依赖 org.eclipse.osgi.util_3.2.100.v20100503 <br />
<br />
搞了半天, 才发现啊....<br />
<br />
以至于Declarative Service不成功.<br />
<br />
当然Eclipse比较好,他可以自动帮你查找需要依赖的bundle, Intellij Idea没这功能.......<br />
<br />
<img src ="http://www.blogjava.net/scud/aggbug/326315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-07-16 15:20 <a href="http://www.blogjava.net/scud/archive/2010/07/16/326315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在IntelliJ Idea 9 里面使用OSGI</title><link>http://www.blogjava.net/scud/archive/2010/07/10/325689.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Fri, 09 Jul 2010 16:29:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/07/10/325689.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/325689.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/07/10/325689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/325689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/325689.html</trackback:ping><description><![CDATA[Intellij Idea 9是个原生支持OSGI的IDE, 不需要在额外安装插件. <br />
<br />
最简约的步骤:(以Apache Felix为例)<br />
<br />
1. 下载Felix 发布包<br />
&nbsp;http://felix.apache.org/site/downloads.cgi 中 下载&nbsp; Felix Framework Distribution
3.0.x ,解压到一个目录中<br />
<br />
2. 在Intellij 中添加 Felix目录<br />
<br />
&nbsp; Settings --&gt; OSGI --&gt; IDE Settings --&gt; Framework Defininations: 选择 类型为 Felix, 然后浏览选中Felix 的解压目录, 就添加成功了.<br />
<br />
&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/scud/45548/o_add_lib.jpg" height="523" width="774" /><br />
<br />
3. 创建一个Project, 当然也创建一个Module<br />
<br />
&nbsp;&nbsp; 在module属性右键添加 OSGI支持 <br />
&nbsp;&nbsp; 在module依赖设置中添加 Osmorc自动生成的Felix库 作为本模块的依赖.<br />
<br />
4. 创建一个类<br />
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.selftest.osgi;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.osgi.framework.BundleActivator;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;org.osgi.framework.BundleContext;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;HelloWorldActivator&nbsp;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&nbsp;BundleActivator<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;start(BundleContext&nbsp;bundleContext)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello&nbsp;World&nbsp;Bundle&nbsp;started!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;stop(BundleContext&nbsp;bundleContext)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello&nbsp;World&nbsp;Bundle&nbsp;stop!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">}<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;</div>
<br />
4. 在module 的属性OSGI中, 设置 Bundle Activator为 <span style="color: rgb(0, 0, 0);">HelloWorldActivator </span><span style="color: rgb(0, 0, 255);">, 名字自己随意填写一个.<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/scud/45548/osgi_set.jpg" alt="" border="0" /><br />
<br />
5. 新建一个 Configuration来测试 OSGI Bundle<br />
</span>
<ul>
    <li><span style="color: rgb(0, 0, 255);">&nbsp; "ADD" 刚刚创建的模块, </span></li>
    <li><span style="color: rgb(0, 0, 255);">&nbsp; 选中 "Start OSGI Console"</span></li>
    <li><span style="color: rgb(0, 0, 255);">&nbsp; Run time directory: recreate each time 最简单</span></li>
    <li><span style="color: rgb(0, 0, 255);">&nbsp; 自动启动 随意选择</span></li>
</ul>
<img src="http://www.blogjava.net/images/blogjava_net/scud/45548/o_configuration.jpg" alt="" border="0" /><br />
<br />
<br />
6. 启动测试<br />
<br />
&nbsp;&nbsp; 启动, 经过"漫长"的等待, 界面出来了. 如果你选择了"Start OSGI Console" 则可以命令行交互.<br />
<br />
&nbsp;&nbsp; 输入help可以查看所有命令, 输入ps可以查看所有启动的bundle.<br />
&nbsp;&nbsp; start, stop 加上相应id即可 启动/停止一个组件.<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/scud/45548/o_console.jpg" alt="" border="0" /><br />
&nbsp;&nbsp; <br />
<span style="color: rgb(0, 0, 255);"><br />
<br />
</span>
<img src ="http://www.blogjava.net/scud/aggbug/325689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-07-10 00:29 <a href="http://www.blogjava.net/scud/archive/2010/07/10/325689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>