`
georgezeng
  • 浏览: 103371 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OSGI下的web应用开发(6)

阅读更多

这一节进入Service Interface Bundle和Service Implementation Bundle的开发。

同样的,首先先来看看类图



 
 为了简化对service的操作,一样定义了一个基础服务接口。

 

 

  • Service Interface Bundle

 

(1)新建Bundle Project项目

当项目创建完后,我们需要先把项目间的关联关系设定好再开始编码。如图



 勾选上dao2和domain两个项目,因为我们会引用到这两个项目的类。

 

(2)代码

(2.1) IBaseService

 

 

package net.georgezeng.test.service;

import java.util.List;

public interface IBaseService<T> {
  void save(T t);
  T get(Long id);
  List<T> findList(T t);
}
 

 

(2.2)ContactService

 

 

package net.georgezeng.test.service;

import net.georgezeng.test.domain.Contact;

public interface ContactService extends IBaseService<Contact> {
  
}
 

 

(3)MANIFEST.MF的定义

 

(3.1)import


(3.2)export


这样Service Interface Bundle就开发完成了

 

 

  • Service Implementation Bundle
(1)创建Bundle Project项目
同样的,创建完后需要关联相关的项目。如图


 引入了3个关联的项目,分别是dao2,domain和service

(2)代码

(2.1)BaseService

package net.georgezeng.test.service.impl;

import java.util.List;

import net.georgezeng.test.dao.BaseDao;
import net.georgezeng.test.service.IBaseService;

public abstract class BaseService<T> implements IBaseService<T> {

  @Override
  public void save(T t) {
    getBaseDao().save(t);
  }

  @Override
  public T get(Long id) {
    return getBaseDao().get(id);
  }

  @Override
  public List<T> findList(T t) {
    return getBaseDao().findList(t);
  }
  
  protected abstract BaseDao<T> getBaseDao();

}
 

 

(2.2)ContactServiceImpl

 

 

package net.georgezeng.test.contact.service;

import net.georgezeng.test.dao.BaseDao;
import net.georgezeng.test.dao.ContactDao;
import net.georgezeng.test.domain.Contact;
import net.georgezeng.test.service.ContactService;
import net.georgezeng.test.service.impl.BaseService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("ContactService")
@Transactional
public class ContactServiceImpl extends BaseService<Contact> implements ContactService {

  @Autowired
  private ContactDao dao;

  @Override
  protected BaseDao<Contact> getBaseDao() {
    return dao;
  }

}

 

 

这里使用事务管理使用的是annotation的形式,并且需要在@Service中添加一个ContactService的值,同样也是用于通过spring来发布这个服务时作为引用的bean id。

 

在上一节中我们还曝露了一个ContactDao的服务,这个地方引用这个服务在代码里是不需要做任何的改变的,因为这个服务的引用注入是在配置文件里完成的(Spring dm提供了引用的annotation方式引入,但是不推荐使用),所以这里照常的Autowired就可以了。

 

(3)spring配置

(3.1)osgi-context.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/osgi
		http://www.springframework.org/schema/osgi/spring-osgi.xsd
		http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        

	<osgi:reference id="contactDao" interface="net.georgezeng.test.dao.ContactDao" />
	
	<osgi:reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
	
	<osgi:service ref="ContactService"
		interface="net.georgezeng.test.service.ContactService" ></osgi:service>


</beans>

 

 

这里声明了需要的OSGI服务的引用,我们看到上一节中定义的transactionManager也在这个地方被用到了,因为事务的入口通常就是在service里开始的。

 

然后这里还曝露了1个ContactService的服务,让web bundle可以使用到这个服务。

 

(3.2)appContext.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">


	<context:annotation-config />
	<context:component-scan base-package="net.georgezeng.test" />

	<tx:annotation-driven transaction-manager="transactionManager" />

	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="find*" read-only="true" />
			<tx:method name="*" rollback-for="Exception" />
		</tx:attributes>
	</tx:advice>
	
	<aop:config>
		<aop:pointcut id="serviceCut"
			expression="execution(* net.georgezeng.test..service..*.*(..))" />
		<aop:advisor pointcut-ref="serviceCut" advice-ref="txAdvice" />
	</aop:config>
</beans>

 

 

使用了annotation的方式来管理事务,所以定义了下面这个内容:

 

 

<tx:annotation-driven transaction-manager="transactionManager" />

 

虽然我们定义了使用annotation作为事务管理的方式,但是我们可以为整个事务定义一个默认的切面,用来处理默认的事务管理,比如哪些方法只读,或者遇到什么异常回滚等。所以上面定义了一个aop:config和txadvice来做这个事情,并将我们的transactionManager注入。

 

(4)MANIFEST.MF

 

(4.1)import


(4.2)export

没有需要export的内容

 

至此Service Interface Bundle 和 Service Implementation Bundle就开发完成了

 

附上源码

 

  • 大小: 55.8 KB
  • 大小: 109 KB
  • 大小: 22.4 KB
  • 大小: 18 KB
  • 大小: 104.4 KB
  • 大小: 150 KB
1
2
分享到:
评论

相关推荐

    基于OSGi和Spring开发Web应用.doc

    "基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...

    基于OSGi的Web应用开发系列(全).pdf

    **基于OSGi的Web应用开发**是现代软件开发中的一种技术实践,它允许开发者构建模块化、可扩展和可维护的Web应用。OSGi(Open Service Gateway Initiative)是一种开放的标准,提供了一种服务导向的、模块化的Java...

    基于OSGi和Spring开发Web应用

    综上所述,基于OSGi和Spring开发Web应用不仅能够充分利用OSGi的模块化优势和Spring的依赖注入机制,还能借助dmServer和SpringSource应用平台等工具,实现更加高效、灵活和可靠的企业级应用开发。

    基于OSGi和Spring开发Web应用教程

    总的来说,基于OSGi和Spring的Web应用开发结合了两者的优点:OSGi提供了模块化和动态部署的能力,而Spring则带来了方便的依赖管理和服务注册。通过Spring-DM,开发者可以在OSGi环境中享受到Spring的便利,构建更灵活...

    行业分类-设备装置-基于OSGi的Web应用开发平台权限管理自适应设计方法.zip

    在基于OSGi的Web应用开发平台中,权限管理涉及到用户、角色和资源的控制。传统的权限管理通常采用固定的角色-权限模型,但在自适应设计中,系统需要根据用户的行为、环境或者业务需求动态调整权限分配。这通常通过...

    OSGi与Web容器的整合

    将OSGi与Web容器整合,可以实现更加灵活和模块化的Web应用开发和部署。 **1. OSGi Bundle放入Web容器中运行** 这是通过像Equinox的Servlet Bridge这样的技术实现的,它充当了一个桥梁,让OSGi Bundle可以在传统的...

    基于OSGi和Spring开发Web应用的Demo

    在基于OSGi和Spring的Web应用开发中,通常会将业务逻辑、服务接口和Web层分别封装在不同的模块中。根据压缩包子文件的文件名称,我们可以推测这些文件可能代表了这样的模块结构: 1. `...

    开发一个简单的 OSGi Web 应用实例

    本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署特性。 #### 二、项目背景及目标 **背景:** OSGi (Open ...

    基于OSGI的Web开发例子

    在OSGi环境下开发Web应用的好处在于,我们可以独立更新和管理各个组件,避免了传统的Web应用中常见的类加载冲突问题,同时也简化了依赖管理。通过使用Equinox这样的强大框架,我们可以更好地利用OSGi的优势,实现...

    基于 OSGi 和 Spring 开发 Web 应用

    基于 OSGi 和 Spring 开发 Web 应用

    基于VirgoServer进行Spring Osgi Web开发

    在本文中,我们将深入探讨如何基于VirgoServer进行Spring Osgi Web开发,这是一个涉及OSGi容器、Spring框架和Web应用程序的集成技术。首先,我们需要确保拥有正确的开发环境和工具,包括Spring Tool Suite (STS),...

    osgi 在web容器中部署

    这些工具可以将OSGi环境集成到Tomcat中,允许OSGi bundles作为Web应用的一部分运行。 Apache Felix WebConsole是一个基于Web的管理界面,可以用来管理和控制OSGi环境。你可以将其作为一个OSGi bundle部署到Tomcat中...

    自己开发的OSGi Web Console

    1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。

    OSGI中包含web服务器配置需要的jar.zip

    6. **开发和部署**: 使用这些jar文件,开发者可以按照博客"OSGi环境下建立Web工程的Hello World"中的步骤,创建并部署OSGI兼容的Web应用。这通常涉及编写bundle的MANIFEST.MF文件来声明导出和导入的包,以及如何配置...

    OSGi Web示例工程

    Web示例工程是使用OSGi技术构建的一个具体应用,通常包括了如何在OSGi环境中部署和运行Web应用程序的实例。 在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端...

Global site tag (gtag.js) - Google Analytics