解决osgi spring 事务配置问题

前久看了一篇文章,
http://www.iteye.com/topic/315257
里面说

由于目前还无法解决 osgi 环境下的 aspectj 问题 , 所以 , 处理事务无法使用 tx:advice 和 aop:config, 改用 DataSourceTransactionManager.

后又看了一篇文章页是他的,说Equinox Aspects可以解决这个问题。

于是去看了看,现在问题已经解决了。
以下我把我的例子的整个流程写一下。

一.jar包的准备,我用的是eclipse环境
1).首先去 http://download.eclipse.org/equinox/ 下载
equinox-SDK     这里我用的3.4的  配置事务的 3.5好像有问题。

2).去 http://www.springsource.org/osgi 下载
spring-osgi-1.2.0-rc1.zip
spring-osgi-1.2.0-rc1-with-dependencies.zip

3).去 http://www.springsource.org/download 下载
spring-framework-2.5.6.zip
spring-framework-2.5.6-with-dependencies.zip

4).去 http://www.eclipse.org/aspectj/downloads.php 下载
aspectj-1.6.1.jar

5).去 http://www.eclipse.org/equinox/incubator/aspects/equinox-aspects-quick-start.php 下载
org.eclipse.equinox.weaving-incubation-1.0.0.200807082136-archive.zip

下载好了就先解压吧。

二.配置eclipse的环境
首先,我们建一个环境项目,里面放jar包就可以了。
File->NewProject  选general->project 起个名字,我的是myTargetPlatform2。在这个项目里面建立一个目录,目录名是 target

在target里放入用到的包:
spring-osgi要用到的包
spring-osgi-annotation-1.2.0-rc1.jar
spring-osgi-core-1.2.0-rc1.jar
spring-osgi-extender-1.2.0-rc1.jar
spring-osgi-io-1.2.0-rc1.jar

spring-osgi依赖包里的
com.springsource.net.sf.cglib-2.1.3.jar
com.springsource.org.aopalliance-1.0.0.jar

spring的包
spring.jar

这里是运行要用到的包
org.eclipse.osgi_3.4.0.v20080605-1900.jar

这个是Equinox Aspects的
org.eclipse.equinox.weaving.aspectj_1.0.0.200807082136.jar
org.eclipse.equinox.weaving.caching_1.0.0.200807082136.jar
org.eclipse.equinox.weaving.caching.j9_1.0.0.200807082136.jar
org.eclipse.equinox.weaving.hook_1.0.0.200807082136.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

放好后,window->preferences   plug-in Development->Target Platform 点一下。
这时旁边有add点一下,直接点next,点add,这时可以选路径,选择前边项目的里的target目录,同时设置一下Name。选定你建立好的平台(黑体是选定)。可以了。

三.建立项目。这里不说了,我把项目上传,自己导入一下吧。
org.aspectj.runtime
org.aspectj.weaver
分别是aspectj-1.6.1.jar包里的2个jar。

我没用ibatis,读取配置好像有问题,
我的spring是bundle的方式加载的,ibatis包是在dao实现的项目里classpath加载的,是读取不到ibatis的配置,看网上说是classloader的问题,希望高手能给解决一下。

这里事务用的标签式的事务。在实现类里配置的。

启动,下边有图是用到的包。


com.myTest.service.daoJdbcImpl 项目下有数据库配置要改一下。

数据库测试表结构
DROP TABLE IF EXISTS `mytest_user`;
CREATE TABLE `mytest_user` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `sex` tinyint(1) default 0,
  `address` varchar(255) default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在实现类的事务标签那里修改一下,改为
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
忘记加事务回滚的,不过我测试不加也回滚了。下边有个文章介绍事务的
http://www.ibm.com/developerworks/cn/java/j-ts1.html?ca=drs-tp4608



跨bundle的事务的测试代码也写好了,有兴趣的可以下载跑一下。spring-osgiTest2.rar


做了一个简单quartz的bundle,使整体不依赖quartz包,bundle的启动,停止都会启动停止任务。spring-osgiTest3.rar



解决osgi spring 事务配置问题

做了一个简单的拦截器测试,不知道为什么在spring dm中 <aop:aspectj-autoproxy proxy-target-class="true"/>老是报错,又是classloader的问题,就改了一下方法。看官方的例子在osgi中他用的aj文件,aop.xml的配置文件,加vm参数做的。还看了文章用spring管理,在配置bean加factory-method="aspectOf" 属性。于是写了一个测试,大家可以下载测试一些。

还加入了service相互依赖调用的例子。配置文件有注释。可以看一下。 文件  20100202.rar

你可能感兴趣的:(eclipse,spring,ibatis,配置管理,osgi)