- 浏览: 259615 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ynp:
有没有考虑过用spring去管理日志,这样就不配置两套数据库的 ...
log4j之重写JDBCAppender -
qinjingkai:
jinbridge 写道你好,我问一下,你的这个类继承以后怎么 ...
log4j之重写JDBCAppender -
jinbridge:
你好,我问一下,你的这个类继承以后怎么把它编译到原来的包中
log4j之重写JDBCAppender -
lizehao:
buc
spring定时任务之quartz -
王全V:
给新手写个全点的吧http://vieal.iteye.com ...
spring定时任务之quartz
如题,整合两个框架的目的就是利用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类
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,这就说明程序运行正确了)
相关推荐
Equinox、Apache Felix与Spring DM 工程创建工程发布
springDM+felix
最近一段时间有不少朋友发邮件给我要这个例子,有时候没有来得及回邮件,今天把代码上传到CSDN上,需要的下载吧,2个资源分,哈哈。 1、解压后,里面有5个工程,名字为abc的工程是个web工程,用来部署struts插件工程...
运行嵌入式Apache Felix OSGI容器的示例Spring Boot Web应用程序 这个想法是能够: 加载运行嵌入式Felix Framework的基本Spring Boot App。 使用标准的注解(例如Spring Web控制器和ServletFilter等),使用普通...
FELIX
spring与struts整合所需的jar包。 自己老项目中的jar,可以运行。 jar名称概要如下: struts2-spring-plugin-2.1.8.1.jar commons-****.jar org.apache.felix.****.jar spring-***.jar struts2-***.jar
felix 可以用jar包felix 可以用jar包felix 可以用jar包felix 可以用jar包felix 可以用jar包
华为Felix开发和运行包
osgi框架最新felix-framework-5.6.8,想找个felix插件版的,可惜404
felix文档 一个简单的helloworld
运用apache的felix,写的demo
OSGi In Practice作者的推荐OSGi框架的Felix 最新版本 2.0.4包括jar包,配置文件等等 学习OSGi必须的
Felix_OSGi实作,介绍最流行的OSGI framwork-Felix的好文档
Warhammer's Felix and Gotrek series. It contain eleven book.
使用 Felix 和 Struts2 开发 Web 应用 采用了struts 构建web ,feilx 构建bundle
org.apache.felix.main.distribution-4.2.1.zip
felix软件包 org.apache.felix.main.distribution-5.4.0.zip
PHP新手上路_Felix整理、修改,整理来自百度的一些信息,非常有用!
Felix 4.2.1 源码