felix整合spring

 如题,整合两个框架的目的就是利用spring来管理Bean的生命周期和进行一些依赖注入!参考了http://www.ibm.com/developerworks/cn/webservices/ws-osgi-spring2/了一文;但是该文还是有很多问题,经过长时间的摸索和尝试,终于成功的把两个框架整和了;以下是主要的步骤

 

一 下载Spring DM必须的包

     下载的url为http://sourceforge.net/projects/springframework/files/spring-osgi/1.0.3/spring-osgi-1.0.3-with-dependencies.zip/download 和 http://nchc.dl.sourceforge.net/project/springframework/spring-osgi/1.0.3/spring-osgi-1.0.3.zip

 

二 解压第一步下载所得文件,把spring DM启动时候必要的Bundle对应的jar包放到Fleix安装目录/bunld目录下,这里所说 

     的必要jar包为  aopalliance.osgi-1.0-SNAPSHOT.jar
                          jcl104-over-slf4j-1.4.3.jar
                          log4j.osgi-1.2.15-SNAPSHOT.jar
                          org.apache.felix.main-1.0.1.jar
                          slf4j-api-1.4.3.jar
                          lf4j-log4j12-1.4.3.jar
                         spring-aop-2.5.1.jar
                         spring-beans-2.5.1.jar
                        spring-context-2.5.1.jar
                        spring-core-2.5.1.jar
                        spring-osgi-core-1.0.3.jar
                       spring-osgi-io-1.0.3.jar
                       spring-osgi-extender-1.0.3.jar

三  修改felix安装目录/conf/config.properties文件,主要目的是使得spring DM必要的Bundle随Felix启动而启动,以

      以下为修改后的文件内容,红色部分为和默认配置不同的地方

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#
# Framework config properties.
#
org.osgi.framework.system.packages=org.osgi.framework; version=1.3.0, \
 org.osgi.service.packageadmin; version=1.2.0, \
 org.osgi.service.startlevel; version=1.0.0, \
 org.osgi.service.url; version=1.0.0, \
 org.osgi.util.tracker; version=1.3.2 \
 ${jre-${java.specification.version}}

#org.osgi.framework.bootdelegation=sun.*,com.sun.*
#felix.cache.profile=foo
felix.auto.start.1= \
 file:bundle/org.apache.felix.bundlerepository-1.0.3.jar \
 file:bundle/org.apache.felix.shell.tui-1.0.1.jar \
 file:bundle/org.apache.felix.shell-1.0.1.jar  \
  file:bundle/aopalliance.osgi-1.0-SNAPSHOT.jar \
 file:bundle/jcl104-over-slf4j-1.4.3.jar \
 file:bundle/log4j.osgi-1.2.15-SNAPSHOT.jar \
 file:bundle/org.apache.felix.main-1.0.1.jar \
 file:bundle/slf4j-api-1.4.3.jar \
 file:bundle/slf4j-log4j12-1.4.3.jar \
 file:bundle/spring-aop-2.5.1.jar \
 file:bundle/spring-beans-2.5.1.jar \
 file:bundle/spring-context-2.5.1.jar \
 file:bundle/spring-core-2.5.1.jar \
 file:bundle/spring-osgi-core-1.0.3.jar \
 file:bundle/spring-osgi-io-1.0.3.jar \

 file:bundle/spring-osgi-extender-1.0.3.jar

felix.log.level=4
felix.startlevel.framework=1
felix.startlevel.bundle=1
#felix.service.urlhandlers=false

#
# Bundle config properties.
#
org.osgi.service.http.port=8080
osgi.shell.telnet=on
#obr.repository.url=http://bundles.osgi.org/obr/browse?_xml=1&cmd=repository


#
# Java platform package export properties.
#
jre-1.3=, \
 javax.accessibility; \
 javax.naming; \
 javax.naming.directory; \
 javax.naming.event; \
 javax.naming.ldap; \
 javax.naming.spi; \
 javax.rmi; \
 javax.rmi.CORBA; \
 javax.sound.midi; \
 javax.sound.midi.spi; \
 javax.sound.sampled; \
 javax.sound.sampled.spi; \
 javax.swing; \
 javax.swing.border; \
 javax.swing.colorchooser; \
 javax.swing.event; \
 javax.swing.filechooser; \
 javax.swing.plaf; \
 javax.swing.plaf.basic; \
 javax.swing.plaf.metal; \
 javax.swing.plaf.multi; \
 javax.swing.table; \
 javax.swing.text; \
 javax.swing.text.html; \
 javax.swing.text.html.parser; \
 javax.swing.text.rtf; \
 javax.swing.tree; \
 javax.swing.undo; \
 javax.transaction; \
 org.omg.CORBA; \
 org.omg.CORBA_2_3; \
 org.omg.CORBA_2_3.portable; \
 org.omg.CORBA.DynAnyPackage; \
 org.omg.CORBA.ORBPackage; \
 org.omg.CORBA.portable; \
 org.omg.CORBA.TypeCodePackage; \
 org.omg.CosNaming; \
 org.omg.CosNaming.NamingContextPackage; \
 org.omg.SendingContext; \
 org.omg.stub.java.rmi; \
 version="1.3.0"

jre-1.4=, \
 javax.accessibility; \
 javax.crypto; \
 javax.crypto.interfaces; \
 javax.crypto.spec; \
 javax.imageio; \
 javax.imageio.event; \
 javax.imageio.metadata; \
 javax.imageio.plugins.jpeg; \
 javax.imageio.spi; \
 javax.imageio.stream; \
 javax.naming; \
 javax.naming.directory; \
 javax.naming.event; \
 javax.naming.ldap; \
 javax.naming.spi; \
 javax.net; \
 javax.net.ssl; \
 javax.print; \
 javax.print.attribute; \
 javax.print.attribute.standard; \
 javax.print.event; \
 javax.rmi; \
 javax.rmi.CORBA; \
 javax.security.auth; \
 javax.security.auth.callback; \
 javax.security.auth.kerberos; \
 javax.security.auth.login; \
 javax.security.auth.spi; \
 javax.security.auth.x500; \
 javax.sound.midi; \
 javax.sound.midi.spi; \
 javax.sound.sampled; \
 javax.sound.sampled.spi; \
 javax.sql; \
 javax.swing; \
 javax.swing.border; \
 javax.swing.colorchooser; \
 javax.swing.event; \
 javax.swing.filechooser; \
 javax.swing.plaf; \
 javax.swing.plaf.basic; \
 javax.swing.plaf.metal; \
 javax.swing.plaf.multi; \
 javax.swing.table; \
 javax.swing.text; \
 javax.swing.text.html; \
 javax.swing.text.html.parser; \
 javax.swing.text.rtf; \
 javax.swing.tree; \
 javax.swing.undo; \
 javax.transaction; \
 javax.transaction.xa; \
 javax.xml.parsers; \
 javax.xml.transform; \
 javax.xml.transform.dom; \
 javax.xml.transform.sax; \
 javax.xml.transform.stream; \
 org.ietf.jgss; \
 org.omg.CORBA; \
 org.omg.CORBA_2_3; \
 org.omg.CORBA_2_3.portable; \
 org.omg.CORBA.DynAnyPackage; \
 org.omg.CORBA.ORBPackage; \
 org.omg.CORBA.portable; \
 org.omg.CORBA.TypeCodePackage; \
 org.omg.CosNaming; \
 org.omg.CosNaming.NamingContextExtPackage; \
 org.omg.CosNaming.NamingContextPackage; \
 org.omg.Dynamic; \
 org.omg.DynamicAny; \
 org.omg.DynamicAny.DynAnyFactoryPackage; \
 org.omg.DynamicAny.DynAnyPackage; \
 org.omg.IOP; \
 org.omg.IOP.CodecFactoryPackage; \
 org.omg.IOP.CodecPackage; \
 org.omg.Messaging; \
 org.omg.PortableInterceptor; \
 org.omg.PortableInterceptor.ORBInitInfoPackage; \
 org.omg.PortableServer; \
 org.omg.PortableServer.CurrentPackage; \
 org.omg.PortableServer.POAManagerPackage; \
 org.omg.PortableServer.POAPackage; \
 org.omg.PortableServer.portable; \
 org.omg.PortableServer.ServantLocatorPackage; \
 org.omg.SendingContext; \
 org.omg.stub.java.rmi; \
 org.w3c.dom; \
 org.w3c.dom.css; \
 org.w3c.dom.events; \
 org.w3c.dom.html; \
 org.w3c.dom.stylesheets; \
 org.w3c.dom.traversal; \
 org.w3c.dom.views; \
 org.xml.sax; \
 org.xml.sax.ext; \
 org.xml.sax.helpers; \
 version="1.4.0"

jre-1.5=, \
 javax.accessibility; \
 javax.activity; \
 javax.crypto; \
 javax.crypto.interfaces; \
 javax.crypto.spec; \
 javax.imageio; \
 javax.imageio.event; \
 javax.imageio.metadata; \
 javax.imageio.plugins.bmp; \
 javax.imageio.plugins.jpeg; \
 javax.imageio.spi; \
 javax.imageio.stream; \
 javax.management; \
 javax.management.loading; \
 javax.management.modelmbean; \
 javax.management.monitor; \
 javax.management.openmbean; \
 javax.management.relation; \
 javax.management.remote; \
 javax.management.remote.rmi; \
 javax.management.timer; \
 javax.naming; \
 javax.naming.directory; \
 javax.naming.event; \
 javax.naming.ldap; \
 javax.naming.spi; \
 javax.net; \
 javax.net.ssl; \
 javax.print; \
 javax.print.attribute; \
 javax.print.attribute.standard; \
 javax.print.event; \
 javax.rmi; \
 javax.rmi.CORBA; \
 javax.rmi.ssl; \
 javax.security.auth; \
 javax.security.auth.callback; \
 javax.security.auth.kerberos; \
 javax.security.auth.login; \
 javax.security.auth.spi; \
 javax.security.auth.x500; \
 javax.security.sasl; \
 javax.sound.midi; \
 javax.sound.midi.spi; \
 javax.sound.sampled; \
 javax.sound.sampled.spi; \
 javax.sql; \
 javax.sql.rowset; \
 javax.sql.rowset.serial; \
 javax.sql.rowset.spi; \
 javax.swing; \
 javax.swing.border; \
 javax.swing.colorchooser; \
 javax.swing.event; \
 javax.swing.filechooser; \
 javax.swing.plaf; \
 javax.swing.plaf.basic; \
 javax.swing.plaf.metal; \
 javax.swing.plaf.multi; \
 javax.swing.plaf.synth; \
 javax.swing.table; \
 javax.swing.text; \
 javax.swing.text.html; \
 javax.swing.text.html.parser; \
 javax.swing.text.rtf; \
 javax.swing.tree; \
 javax.swing.undo; \
 javax.transaction; \
 javax.transaction.xa; \
 javax.xml; \
 javax.xml.datatype; \
 javax.xml.namespace; \
 javax.xml.parsers; \
 javax.xml.transform; \
 javax.xml.transform.dom; \
 javax.xml.transform.sax; \
 javax.xml.transform.stream; \
 javax.xml.validation; \
 javax.xml.xpath; \
 org.ietf.jgss; \
 org.omg.CORBA; \
 org.omg.CORBA_2_3; \
 org.omg.CORBA_2_3.portable; \
 org.omg.CORBA.DynAnyPackage; \
 org.omg.CORBA.ORBPackage; \
 org.omg.CORBA.portable; \
 org.omg.CORBA.TypeCodePackage; \
 org.omg.CosNaming; \
 org.omg.CosNaming.NamingContextExtPackage; \
 org.omg.CosNaming.NamingContextPackage; \
 org.omg.Dynamic; \
 org.omg.DynamicAny; \
 org.omg.DynamicAny.DynAnyFactoryPackage; \
 org.omg.DynamicAny.DynAnyPackage; \
 org.omg.IOP; \
 org.omg.IOP.CodecFactoryPackage; \
 org.omg.IOP.CodecPackage; \
 org.omg.Messaging; \
 org.omg.PortableInterceptor; \
 org.omg.PortableInterceptor.ORBInitInfoPackage; \
 org.omg.PortableServer; \
 org.omg.PortableServer.CurrentPackage; \
 org.omg.PortableServer.POAManagerPackage; \
 org.omg.PortableServer.POAPackage; \
 org.omg.PortableServer.portable; \
 org.omg.PortableServer.ServantLocatorPackage; \
 org.omg.SendingContext; \
 org.omg.stub.java.rmi; \
 org.omg.stub.javax.management.remote.rmi; \
 org.w3c.dom; \
 org.w3c.dom.bootstrap; \
 org.w3c.dom.css; \
 org.w3c.dom.events; \
 org.w3c.dom.html; \
 org.w3c.dom.ls; \
 org.w3c.dom.ranges; \
 org.w3c.dom.stylesheets; \
 org.w3c.dom.traversal; \
 org.w3c.dom.views; \
 org.xml.sax; \
 org.xml.sax.ext; \
 org.xml.sax.helpers; \
 version="1.5.0"

jre-1.6=, \
 javax.accessibility; \
 javax.activation; \
 javax.activity; \
 javax.annotation; \
 javax.annotation.processing; \
 javax.crypto; \
 javax.crypto.interfaces; \
 javax.crypto.spec; \
 javax.imageio; \
 javax.imageio.event; \
 javax.imageio.metadata; \
 javax.imageio.plugins.bmp; \
 javax.imageio.plugins.jpeg; \
 javax.imageio.spi; \
 javax.imageio.stream; \
 javax.jws; \
 javax.jws.soap; \
 javax.lang.model; \
 javax.lang.model.element; \
 javax.lang.model.type; \
 javax.lang.model.util; \
 javax.management; \
 javax.management.loading; \
 javax.management.modelmbean; \
 javax.management.monitor; \
 javax.management.openmbean; \
 javax.management.relation; \
 javax.management.remote; \
 javax.management.remote.rmi; \
 javax.management.timer; \
 javax.naming; \
 javax.naming.directory; \
 javax.naming.event; \
 javax.naming.ldap; \
 javax.naming.spi; \
 javax.net; \
 javax.net.ssl; \
 javax.print; \
 javax.print.attribute; \
 javax.print.attribute.standard; \
 javax.print.event; \
 javax.rmi; \
 javax.rmi.CORBA; \
 javax.rmi.ssl; \
 javax.script; \
 javax.security.auth; \
 javax.security.auth.callback; \
 javax.security.auth.kerberos; \
 javax.security.auth.login; \
 javax.security.auth.spi; \
 javax.security.auth.x500; \
 javax.security.cert; \
 javax.security.sasl; \
 javax.sound.midi; \
 javax.sound.midi.spi; \
 javax.sound.sampled; \
 javax.sound.sampled.spi; \
 javax.sql; \
 javax.sql.rowset; \
 javax.sql.rowset.serial; \
 javax.sql.rowset.spi; \
 javax.swing; \
 javax.swing.border; \
 javax.swing.colorchooser; \
 javax.swing.event; \
 javax.swing.filechooser; \
 javax.swing.plaf; \
 javax.swing.plaf.basic; \
 javax.swing.plaf.metal; \
 javax.swing.plaf.multi; \
 javax.swing.plaf.synth; \
 javax.swing.table; \
 javax.swing.text; \
 javax.swing.text.html; \
 javax.swing.text.html.parser; \
 javax.swing.text.rtf; \
 javax.swing.tree; \
 javax.swing.undo; \
 javax.tools; \
 javax.transaction; \
 javax.transaction.xa; \
 javax.xml; \
 javax.xml.bind; \
 javax.xml.bind.annotation; \
 javax.xml.bind.annotation.adapters; \
 javax.xml.bind.attachment; \
 javax.xml.bind.helpers; \
 javax.xml.bind.util; \
 javax.xml.crypto; \
 javax.xml.crypto.dom; \
 javax.xml.crypto.dsig; \
 javax.xml.crypto.dsig.dom; \
 javax.xml.crypto.dsig.keyinfo; \
 javax.xml.crypto.dsig.spec; \
 javax.xml.datatype; \
 javax.xml.namespace; \
 javax.xml.parsers; \
 javax.xml.soap; \
 javax.xml.stream; \
 javax.xml.stream.events; \
 javax.xml.stream.util; \
 javax.xml.transform; \
 javax.xml.transform.dom; \
 javax.xml.transform.sax; \
 javax.xml.transform.stax; \
 javax.xml.transform.stream; \
 javax.xml.validation; \
 javax.xml.ws; \
 javax.xml.ws.handler; \
 javax.xml.ws.handler.soap; \
 javax.xml.ws.http; \
 javax.xml.ws.soap; \
 javax.xml.ws.spi; \
 javax.xml.xpath; \
 org.ietf.jgss; \
 org.omg.CORBA; \
 org.omg.CORBA_2_3; \
 org.omg.CORBA_2_3.portable; \
 org.omg.CORBA.DynAnyPackage; \
 org.omg.CORBA.ORBPackage; \
 org.omg.CORBA.portable; \
 org.omg.CORBA.TypeCodePackage; \
 org.omg.CosNaming; \
 org.omg.CosNaming.NamingContextExtPackage; \
 org.omg.CosNaming.NamingContextPackage; \
 org.omg.Dynamic; \
 org.omg.DynamicAny; \
 org.omg.DynamicAny.DynAnyFactoryPackage; \
 org.omg.DynamicAny.DynAnyPackage; \
 org.omg.IOP; \
 org.omg.IOP.CodecFactoryPackage; \
 org.omg.IOP.CodecPackage; \
 org.omg.Messaging; \
 org.omg.PortableInterceptor; \
 org.omg.PortableInterceptor.ORBInitInfoPackage; \
 org.omg.PortableServer; \
 org.omg.PortableServer.CurrentPackage; \
 org.omg.PortableServer.POAManagerPackage; \
 org.omg.PortableServer.POAPackage; \
 org.omg.PortableServer.portable; \
 org.omg.PortableServer.ServantLocatorPackage; \
 org.omg.SendingContext; \
 org.omg.stub.java.rmi; \
 org.omg.stub.javax.management.remote.rmi; \
 org.w3c.dom; \
 org.w3c.dom.bootstrap; \
 org.w3c.dom.css; \
 org.w3c.dom.events; \
 org.w3c.dom.html; \
 org.w3c.dom.ls; \
 org.w3c.dom.ranges; \
 org.w3c.dom.stylesheets; \
 org.w3c.dom.traversal; \
 org.w3c.dom.views; \
 org.w3c.dom.xpath; \
 org.xml.sax; \
 org.xml.sax.ext; \
 org.xml.sax.helpers; \
 version=\"1.6.0\"

 

四 编写服务端和客户端代码,需要留意的是代码和felix没有任何依赖,就和普通的java类一样

    服务端代码

OrderService类

package order;

public interface OrderService {

	public void processOrder();

}

 OrderServiceImpl类

写道
package order.impl;

import order.OrderService;

public class OrderServiceImpl implements OrderService {

public void start() {
System.out.println("Order Service registered");
}

public void stop() {
System.out.println("Order Service stopped");
}

public void processOrder() {
System.out.println("第二版本发布了 id: ORD123") ;
}
}

 客户端代码:

OrderClient类

package order.client;

import order.OrderService;

public class OrderClient {

	private OrderService orderService;

	public void setOrderService(OrderService orderService) {
		this.orderService = orderService;
	}

	public void removeService() {
		this.orderService = null;
	}

	public void start() {
		System.out.println("客户端启动了---");
		orderService.processOrder();
	}

	public void stop() {
		System.out.println("第二版本我想顶人啊---Bundle dds ----dddsstopped");
    }

}

 五 运行两个工程(服务端和客户端)目录下的buildxxx.xml文件打包,文件已经在附件中,在这里不再赘述

 六 把第五步打包所得的jar发布到felix,和发布普通的bundle没有任何区别,在在这里不再赘述!

七 启动第六步安装的两个bundle就可以看到效果了 (felix控制台输入为:第二版本发布了 id: ORD123,这就说明程序运行正确了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值