OSGi开发之Event:事件处理[原]
作者:coolflyr_reg 日期:2008-07-25 16:39:16
首先配置OSGi Framework的运行环境,我的Eclipse是3.3的,运行环境需要以下的Bundle:
? org.eclipse.osgi
? org.eclipse.equinox.ds
? org.eclipse.equinox.registry
? org.eclipse.equinox.common
? org.eclipse.equinox.log
? org.eclipse.osgi.services
? org.eclipse.equinox.event
? org.eclipse.osgi.util
操作步骤:点击菜单Run->Open Run Dialog…,在左侧的列表中,找到OSGi Framework,右键单击,New,修改Name为EventDemo,并在Bundles选项卡中,选中以上列举的Bundle,然后点击Apply,点Run。
在Console中输入ss来查看我们的环境是否成功运行:
OK,这样我们的Spring-OSGi的环境就启动好了,现在先关闭它。我们来建立一个Plug-in Project,命名为:EventPublisher。
首先新建一个类:com.demo.eventpublisher.Log,代码如下:
接下来创建一个循环发布事件的线程:com.demo.eventpublisher.TimerEvent,代码如下:
在Plug-in ManiFest Editor中打开META-INF/MANIFEST.MF,如果安装了PDE,将会默认使用Plug-in ManiFest Editor打开。将Activator设置为com.demo.eventpublisher.TimerEvent,此时MANIFEST.MF文件中的内容如下:
注意:手工写MANIFEST.MF文件时,最后一行一定要有一个回车。
接下来我们再来建立一个Plug-in Project,命名为EventHander。
我们建立一个类,名为:com.demo.eventhandler.CustomEventHandler,代码如下
我们再建立一个Activator,名为:com.demo.eventhandler.internal.Activator,代码如下
OK,我们将新建立的这两个Bundle加入到运行环境中,Run。
在Console中等待大约60秒后,输入log后可以在最后找到如下日志信息:
瞧,我们已经收到打印出来的事件接收信息了 Received event, EventTopic com/demo/timer
? org.eclipse.osgi
? org.eclipse.equinox.ds
? org.eclipse.equinox.registry
? org.eclipse.equinox.common
? org.eclipse.equinox.log
? org.eclipse.osgi.services
? org.eclipse.equinox.event
? org.eclipse.osgi.util
操作步骤:点击菜单Run->Open Run Dialog…,在左侧的列表中,找到OSGi Framework,右键单击,New,修改Name为EventDemo,并在Bundles选项卡中,选中以上列举的Bundle,然后点击Apply,点Run。
在Console中输入ss来查看我们的环境是否成功运行:
1 | osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.3.1.R33x_v20070828 1 ACTIVE org.eclipse.equinox.common_3.3.0.v20070426 2 ACTIVE org.eclipse.equinox.log_1.0.100.v20070226 3 ACTIVE org.eclipse.equinox.ds_1.0.0.qualifier 4 ACTIVE org.eclipse.equinox.registry_3.3.1.R33x_v20070802 5 ACTIVE org.eclipse.osgi.services_3.1.200.v20070605 6 ACTIVE org.eclipse.equinox.event_1.0.100.v20070516 7 ACTIVE org.eclipse.osgi.util_3.1.200.v20070605 osgi> |
OK,这样我们的Spring-OSGi的环境就启动好了,现在先关闭它。我们来建立一个Plug-in Project,命名为:EventPublisher。
首先新建一个类:com.demo.eventpublisher.Log,代码如下:
1 | package com.demo.eventpublisher;
import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
/**
* Utility class with static methods for logging to LogService, if available
*
* @version $Revision: 1.1 $
*/
public class Log {
static private ServiceTracker logTracker;
private Log() {
}
public static void init(BundleContext bc) {
logTracker = new ServiceTracker(bc, LogService.class.getName(), null);
logTracker.open();
}
static void dispose() {
if (logTracker != null) {
logTracker.close();
}
logTracker = null;
}
public static void log(int level, String message) {
log(level, message, null);、
}
public static void log(int level, String message, Throwable e) {
LogService logService = (LogService) logTracker.getService();
if (logService != null) {
logService.log(level, message, e);
}
}
public static void info(String message)
{
info(message, null);
}
public static void info(String message, Throwable e)
{
log(LogService.LOG_INFO, message, e);
}
}
|
接下来创建一个循环发布事件的线程:com.demo.eventpublisher.TimerEvent,代码如下:
1 | package com.demo.eventpublisher;
import java.util.Calendar;
import java.util.Hashtable;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.util.tracker.ServiceTracker;
public class TimerEvent extends Thread implements BundleActivator {
Hashtable time = new Hashtable();
ServiceTracker tracker;
public TimerEvent() {
super("TimerEvent");
}
public void start(BundleContext context) {
Log.init(context);
tracker = new ServiceTracker(context, EventAdmin.class.getName(), null);
tracker.open();
start();
}
public void stop(BundleContext context) {
interrupt();
tracker.close();
Log.dispose();
}
public void run() {
while (!Thread.interrupted())
try {
Log.info("Rasie Event");
Calendar c = Calendar.getInstance();
set(c, Calendar.MINUTE, "minutes");
set(c, Calendar.HOUR, "hours");
set(c, Calendar.DAY_OF_MONTH, "day");
set(c, Calendar.MONTH, "month");
set(c, Calendar.YEAR, "year");
EventAdmin ea = (EventAdmin) tracker.getService();
if (ea != null)
ea.sendEvent(new Event("com/demo/timer", time));
Thread.sleep(60000 - c.get(Calendar.SECOND) * 1000);
}
catch (InterruptedException e) {
// 忽略
}
}
void set(Calendar c, int field, String key) {
time.put(key, new Integer(c.get(field)));
}
}
|
在Plug-in ManiFest Editor中打开META-INF/MANIFEST.MF,如果安装了PDE,将会默认使用Plug-in ManiFest Editor打开。将Activator设置为com.demo.eventpublisher.TimerEvent,此时MANIFEST.MF文件中的内容如下:
1 | Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: EventPublisher Plug-in Bundle-SymbolicName: EventPublisher Bundle-Version: 1.0.0 Bundle-Activator: com.demo.eventpublisher.TimerEvent Import-Package: org.osgi.framework;version="1.3.0", org.osgi.service.event;version="1.1.0", org.osgi.service.log;version="1.3.0", org.osgi.util.tracker;version="1.3.2" |
注意:手工写MANIFEST.MF文件时,最后一行一定要有一个回车。
接下来我们再来建立一个Plug-in Project,命名为EventHander。
我们建立一个类,名为:com.demo.eventhandler.CustomEventHandler,代码如下
1 | package com.demo.eventhandler;
import java.util.Dictionary;
import java.util.Hashtable;
import org.osgi.framework.BundleContext;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;
import com.demo.internal.Log;
public class CustomEventHandler implements EventHandler
{
public final static String [] topics = new String[] {
// "org/osgi/service/log/LogEntry/LOG_INFO",
// "org/osgi/service/log/LogEntry/LOG_WARNING",
// "org/osgi/framework/ServiceEvent/REGISTERED",
// "org/osgi/framework/ServiceEvent/MODIFIED",
// "org/osgi/framework/ServiceEvent/UNREGISTERING",
// "org/osgi/framework/FrameworkEvent/STARTED",
// "org/osgi/service/log/LogEntry/LOG_ERROR",
"com/demo/timer"};
public void registry(BundleContext context)
{
Dictionary d = new Hashtable();
d.put(EventConstants.EVENT_TOPIC, topics );
context.registerService( EventHandler.class.getName(), this, d );
}
public void handleEvent(Event event)
{
if ("com/acme/timer".equals(event.getTopic()))
{
Log.info("Received event, EventTopic " + event.getTopic() + " " + event.getProperty("year") + "-" + event.getProperty("month") + "-" + event.getProperty("day"));
}
else
{
Log.info("Received event, EventTopic " + event.getTopic());
}
}
}
|
我们再建立一个Activator,名为:com.demo.eventhandler.internal.Activator,代码如下
1 | package com.demo.internal;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.demo.eventhandler.CustomEventHandler;
public class Activator implements BundleActivator
{
public void start(BundleContext context) throws Exception
{
Log.init(context);
CustomEventHandler eventhandler = new CustomEventHandler();
eventhandler.registry(context);
}
public void stop(BundleContext context) throws Exception
{
Log.dispose();
}
}
|
OK,我们将新建立的这两个Bundle加入到运行环境中,Run。
在Console中等待大约60秒后,输入log后可以在最后找到如下日志信息:
引用原文:
>Info [1] Rasie Event initial@reference:file:../../../../../../../../Documents/workspace/EventPublisher/
>Info [7] Received event, EventTopic com/demo/timer initial@reference:file:../../../../../../../../Documents/workspace/ConsumerServiceDemo/
瞧,我们已经收到打印出来的事件接收信息了 Received event, EventTopic com/demo/timer
平均得分
(0 次评分)
评论: 12 | 查看次数: 576
- 共有 12 条评论
- 共有 12 条评论
发表评论
订阅
上一篇
|

文章来自:
标签: 
EP1-OXMAN
wow gold
wow power leveling
oofay
oofay.com
oofay
buy warhammer online gold
buy warhammer online gold
buy warhammer online gold
真空泵
真空泵
真空泵
空调
空调
空调
隔膜泵
隔膜泵
隔膜泵
上海水泵
上海水泵
上海水泵
螺杆泵
螺杆泵
螺杆泵
新加坡留学
新加坡留学
新加坡留学
留学新加坡
留学新加坡
留学新加坡
上海新加坡留学
上海新加坡留学
上海新加坡留学
上海新加坡留学中介
上海新加坡留学中介
上海新加坡留学中介
留学新加坡
上海新加坡留学中介
空调
螺杆泵
Warhammer Gold
Warhammer Online Gold
Warhammer Accounts
Warhammer Power Leveling
Warhammer Online Key
Warhammer Gold
Warhammer Online Gold
Warhammer Time Card
Warhammer CD Key
WAR gold
warhammer online gold
Buy WAR gold
Buy warhammer gold
Buy warhammer online gold
warhammer gold
WAR Accounts
warhammer Accounts
warhammer online Accounts
Buy WAR Accounts
warhammer Accounts for sale
Warhammer Power Leveling
Warhammer Online Power Leveling
War Power Leveling
Buy Warhammer Power Leveling
Warhammer PowerLeveling
Cheap Warhammer Power Leveling
Cheap Warhammer Online Power Leveling
Buy War Power Leveling
Warhammer EU Power Leveling
Cheap Warhammer Gold
Cheap Warhammer online gold
Buy Cheap Warhammer Gold
Buy WAR Gold
Warhammer EU Gold
Warhammer EU Power Leveling
Warhammer EU CD Key
Warhammer EU Accounts
Warhammer CD Key
Warhammer online CD Key
Warhammer Timecard
Buy Warhammer Time Card
Warhammer 60 days Time Card
Cheap WAR Accounts
Cheap warhammer Accounts
Cheap warhammer online Accounts
Buy Cheap WAR Accounts
buy Warhammer CD Key
buy Warhammer online CD Key
cheap Warhammer CD key
warhammer time card
Warhammer prepaid time card
Buy Lotro Gold | Lord Of The Rings Online Gold
Lotro Accounts
| Buy Lotro Accounts
Lord Of The Rings Online Power Leveling | Lord Of The Rings Online PowerLeveling
Lotro Cd Key | Lord Time Card
Lotro Gold | Lotro Gold Instant Delivery
lord of the rings online accounts | lord of the rings online accounts for sale
Lotro Power Leveling | Lotro Powerleveling
Lord Of The Rings Online Cd Key | Lord Of The Rings Online Time Card
Lord of the Rings Online Gold
Buy Lotro Gold
Sell LoTRO Gold
LoTRO CD Key
LoTRO Europe Gold
Cheap LoTRO Accounts
Lord of the Rings Online Power Leveling
Lord of the Rings online CD Key
Cheap Lotro Gold
wow power leveling
wow power leveling
wow power leveling
Buy Lotro Gold | Lord Of The Rings Online Gold
Lotro Accounts
| Buy Lotro Accounts
Lord Of The Rings Online Power Leveling | Lord Of The Rings Online PowerLeveling
Lotro Cd Key | Lord Time Card
Lotro Gold | Lotro Gold Instant Delivery
lord of the rings online accounts | lord of the rings online accounts for sale
Lotro Power Leveling | Lotro Powerleveling
Lord Of The Rings Online Cd Key | Lord Of The Rings Online Time Card
Lord of the Rings Online Gold
Buy Lotro Gold
Sell LoTRO Gold
LoTRO CD Key
LoTRO Europe Gold
Cheap LoTRO Accounts
Lord of the Rings Online Power Leveling
Lord of the Rings online CD Key
Cheap Lotro Gold
Air Jordan Shoes
Warhammer Gold
Warhammer Online Gold
Warhammer Accounts
Warhammer Power Leveling
Warhammer Online Key
Warhammer Gold
Warhammer Online Gold
Warhammer Time Card
Warhammer CD Key
WAR gold
warhammer online gold
Buy WAR gold
Buy warhammer gold
Buy warhammer online gold
warhammer gold
WAR Accounts
warhammer Accounts
warhammer online Accounts
Buy WAR Accounts
warhammer Accounts for sale
Warhammer Power Leveling
Warhammer Online Power Leveling
War Power Leveling
Buy Warhammer Power Leveling
Warhammer PowerLeveling
Cheap Warhammer Power Leveling
Cheap Warhammer Online Power Leveling
Buy War Power Leveling
Warhammer EU Power Leveling
Cheap Warhammer Gold
Cheap Warhammer online gold
Buy Cheap Warhammer Gold
Buy WAR Gold
Warhammer EU Gold
Warhammer EU Power Leveling
Warhammer EU CD Key
Warhammer EU Accounts
Warhammer CD Key
Warhammer online CD Key
Warhammer Timecard
Buy Warhammer Time Card
Warhammer 60 days Time Card
Cheap WAR Accounts
Cheap warhammer Accounts
Cheap warhammer online Accounts
Buy Cheap WAR Accounts
buy Warhammer CD Key
buy Warhammer online CD Key
cheap Warhammer CD key
warhammer time card
Warhammer prepaid time card
wow gold
powerleveling
wow power leveling
runescape gold
runescape money
buy runescape gold
cheap runescape gold
ドロップシッピング
くりっく365 比較
裏DVD
逆援助
アダルト
風俗
大人のおもちゃ
ハウスクリーニング
会社設立
人材派遣会社
転職
FX
合宿免許
浮気調査
台湾旅行
英会話 銀座
歯科 インプラント
東京都 会計事務所
9ha2ppy9
wow gold
wow gold
wow gold
wow gold
oofay.us
warhammer power leveling
warhammer online power leveling
美的空调
美的空调
美的中央空调
美的中央空调
新加坡留学
新加坡留学
留学新加坡
留学新加坡
隔膜泵
隔膜泵
磁力泵
磁力泵
东方医院
东方医院
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
wow gold
美的空调
美的中央空调
wow gold
wow gold
Lotro Accounts
| Buy Lotro Accounts
Lord Of The Rings Online Power Leveling | Lord Of The Rings Online PowerLeveling
Lotro Cd Key | Lord Time Card
Lotro Gold | Lotro Gold Instant Delivery
lord of the rings online accounts | lord of the rings online accounts for sale
Lotro Power Leveling | Lotro Powerleveling
Lord Of The Rings Online Cd Key | Lord Of The Rings Online Time Card
LoTRO Gold
Lord of the Rings Online Gold
Buy Lotro Gold
Sell LoTRO Gold
LoTRO CD Key
LoTRO Europe Gold
Cheap LoTRO Accounts
Lord of the Rings Online Power Leveling
Lord of the Rings online CD Key
Cheap Lotro Gold
不过我是从更新Eclipse的更新里面更新下来得PDE,如果缺少包的话,完全可以去Eclipse的CVS上Checkout一个出来,或者使用maven来使其自动下载依赖的包,但是依赖于apache。