felix整合spring

xiaoxiao2023-03-19  25

 如题,整合两个框架的目的就是利用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,这就说明程序运行正确了)

转载请注明原文地址: https://www.6miu.com/read-4986689.html

最新回复(0)