2011年5月18日 星期三

OSGI Tutorial (2) - How to create Spring-DM bundle Project in Eclipse(Maven project)

Eclipse Virgo 的文件裡面的
Creating an Application with Virgo 使用的Example 是greenpage, greenpage有簡單的WebApp , 建議可以抓下來follow 官方文件做一次練習,可以更容易了解。GreenPage 可以在這邊下載:
greenpages-2.3.0.RELEASE.zip

本篇文章主要是使用Eclipse Create Spring DM Bundle Project, 下列相關的文件建議可以先看一下, 必須先了解一下Maven 怎麼使用,還有一些Spring Framework相關的知識。
Maven Getting Started Guide : Link
Spring Dynamic Modules Reference Guide : Link
Spring Framework Reference Documentation 3.x : Link



建立一個Maven Project ,

Next


在Catelog 選All , 然後filter 輸入osgi , 選擇spring-osgi-bundle-archtype ,

輸入GroupID, Artifact ID, 還有Version 跟default pacakge, 然後按下finish

建立出來的Project 大概長這樣,可以先將ProjectRoot的META-INF folder砍掉,我們不會用到, log4j.porperties也砍掉。

然後在project 上按右鍵,選擇Run as > Maven build... ,

在Goals 下輸入 org.apache.felix:maven-bundle-plugin:manifest , 利用apache felix 的maven bundle plugin 去建立MANIFEST.mf檔,

然後f5重整project,在target/classes/META-INF/下能找到建出來的MANIFEST.MF檔

把它移到src/main/resource/META-INF/下

然後run maven clear

打開MANIFEST.mf檔,copy所有內容,然後再打開project root下的template.mf檔, 把MANIFEST.mf檔的內容copy到template.mf裡, 如下圖

然後在Project 上點滑鼠右鍵, Spring Tools > add OSGi Bundle Project Nature , 新增Spring OSGi Nature,

建出來的Maven Project 習慣上我都會把POM.xml 做些修改, 可依個人需求修改,

在com.my 下建立一個class, 叫Activator,

package com.my;

public class Activator {
 
 public void start(){
  System.out.println("Hello OSGI");
 }
 
 public void stop(){
  System.out.println("good bye OSGi");
 }
}

然後設定bundle-context.xml ,定義bean , 然後設定init & destory 的method
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- regular spring configuration file defining the beans for this
       bundle. The configuration of OSGi definitions is kept in a separate 
       configuration file so that this file can easily be used
       for integration testing outside of an OSGi environment -->
       <bean id="activator" class="com.my.Activator" init-method="start"
     destroy-method="stop"></bean>
       
</beans>

然後打開Package Explorer , 滑鼠左鍵把整個project 拖到Virg Web Server上,


然後Server Cnosole 能看到install bundle的訊息

telnet localhost 2401 , 輸入 ss, 能看到bundle 已安裝

然後可以到C:\Eclipse-Virgo-WebServer\serviceability\logs\log.log 查看log檔,
(記確認conf下的org.eclipse.virgo.medic.properties 裡面log.wrapSysOut=true )


在OSGI console 輸入stop 73, 把bundle stop ,

查看log,可以看到good bye osgi 的message

沒有留言:

張貼留言