- 浏览: 262123 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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,这就说明程序运行正确了)
相关推荐
3. **Spring DM (Spring OSGi)**:SpringSource(现在是VMware的一部分)开发的OSGi整合框架,使得Spring框架可以无缝集成到OSGi环境中。Spring DM提供了在OSGi环境中管理和配置服务的能力,使得开发者能使用Spring...
在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来实现一个登录应用。这个教程旨在帮助开发者理解如何在OSGI环境中集成这些流行的Java技术,以构建灵活且可扩展的应用程序。 首先,我们需要...
整合Spring和OSGi可以利用OSGi的模块化特性,使得Spring应用更加灵活和可扩展。 首先,我们需要了解Spring在OSGi环境中的工作方式。Spring的组件(如Bean)可以在OSGi服务中注册和发现,这样就可以实现服务之间的...
学习OSGI入门和整合Spring,对于开发复杂的企业级应用,或者想要提升系统灵活性和可维护性的开发者来说,是非常有价值的。通过理解OSGI的模块化机制和Spring的依赖注入原理,可以构建出更加高效和可扩展的Java应用。
《OSGI入门和整合Spring》则关注OSGI与Spring框架的结合,主要讨论: 1. **Spring与OSGI集成原理**:Spring的bean管理如何与OSGI服务机制相结合,实现更灵活的依赖注入。 2. **Declarative Services(DS)**:利用...
整合Spring DM和OSGi的过程通常包括以下步骤: 1. **配置OSGi容器**:设置OSGi容器(如Equinox或Felix),并确保其正确运行。 2. **创建OSGi服务**:定义服务接口和实现,并将它们打包为OSGi bundle。 3. **配置...
在本文中,我们将深入探讨如何在OSGi环境中整合Spring-DM和Hibernate,以实现一个动态的、可扩展的持久化解决方案。Spring-DM(现在被称为Spring OSGi)是Spring框架在OSGi容器中的扩展,它允许我们充分利用OSGi的...
spring与struts整合所需的jar包。 自己老项目中的jar,可以运行。 jar名称概要如下: struts2-spring-plugin-2.1.8.1.jar commons-****.jar org.apache.felix.****.jar spring-***.jar struts2-***.jar
至于压缩包内的"整合代码原版",这可能是一个完整的项目源码,包括了OSGi和Spring的配置文件、服务定义、bundle实现、启动脚本等。开发者可以通过分析这些代码,了解如何在OSGi环境下配置和管理Spring应用,以及如何...
Spring DM是Spring框架的一个扩展,它为在OSGi容器(如Apache Felix或Equinox)中运行的Java应用程序提供了服务管理和生命周期管理。OSGi是一种模块化系统,可以动态地部署、启动、更新和卸载Java模块,使得应用程序...
Spring DM在Spring 3.0版本之后被Spring OSGi Integration取代,后者进一步整合了Spring框架与OSGi的集成。随着时间的推移,Spring社区推荐使用Spring Boot和Spring Framework的模块化特性来构建和管理现代的微服务...
Eclipse本身就基于OSGi框架构建,因此在Eclipse中整合Spring和OSGi相对容易。为了构建这样的项目,我们需要: 1. 安装相关插件:首先确保Eclipse安装了Spring和OSGi相关的插件,如Spring Tools Suite (STS) 和...
Spring OSGi 与 Spring 框架的整合 - **Bean 容器**: Spring OSGi 使用 OSGi 服务作为 Spring Bean,实现服务的动态发现和依赖注入。 - **配置管理**: OSGi 服务注册表可以被 Spring 配置,允许 Spring 配置动态...
标题 "spring dm cxf" 暗示了我们要探讨的是Spring Dynamic Modules (Spring DM) 和Apache CXF在OSGi环境中的整合与应用。Spring DM是Spring框架在OSGi服务环境中运行的一个扩展,它允许开发者利用Spring的优势来...
同时,需要使用支持OSGi的Spring DM(Dependency Manager)或Apache Felix等工具来管理和部署SSM捆绑。 **6. 注解开发** 在SSM框架中,注解可以显著减少XML配置,提高开发效率。例如,SpringMVC的`@Controller`、`...
本教程将探讨如何在OSGi环境中利用Blueprint整合Spring框架进行企业级应用开发。 首先,我们需要了解OSGi的核心概念。OSGi的核心是其模块系统,它将Java类库划分为独立的模块,称为"bundle"。每个bundle都包含自己...