`
txf2004
  • 浏览: 7042498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OpenJWeb快速开发平台自动创建基于事务的业务逻辑接口和实现类

阅读更多

OpenJweb快速开发平台在定义表的页面中增加了"是否创建业务逻辑类"的选项,当勾选这个选项后,平台自动生成针对此

表的业务逻辑接口和实现类,一般主明细表的主表应该勾选此选项,当然也可以所有表都生成对应的业务逻辑类.平台除了生成

java代码,还自动配置Spring的配置文件,并为新生成的类配置事务代理,下面是由平台生成的业务逻辑接口的源代码(接口默认提供一个删除多行的方法,如果需要别的接口,可在生成后的接口和实现类源文件中自己添加):

package org.openjweb.core.service;

import javax.servlet.http.HttpServletRequest;

public interface ICrmDistributionService
{
public String deleteByIds(String entityClass, String fieldName, String rowIds[], HttpServletRequest request) throws Exception;
public void setDbService(String serviceName);
public String getDbService();
}

下面是生成的业务逻辑实现类代码(渠道客户表的业务逻辑):

package org.openjweb.core.service.impl;

import org.apache.log4j.Logger;
import org.openjweb.core.service.BaseMasterDetailService;
import org.openjweb.core.service.ICrmDistributionService;

public class CrmDistributionServiceImpl extends BaseMasterDetailService implements ICrmDistributionService
{
private static final Logger logger = Logger.getLogger(CrmDistributionServiceImpl.class);
}

这个实现类很简单,deleteByIds方法的实现是写在抽象类BaseMasterDetailService里了,下面是抽象类的代码:

package org.openjweb.core.service;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.openjweb.core.entity.CommMasterDetailRel;

public abstract class BaseMasterDetailService
{
private static final Logger logger = Logger.getLogger( BaseMasterDetailService.class);
protected String dbService ="";

public String getDbService()
{
return this.dbService;
}

public void setDbService(String serviceName)
{
this.dbService = serviceName;
}

public String deleteByIds(String entityClass, String fieldName, String[] rowIds, HttpServletRequest request) throws Exception
{
String sMessage="";
//如果没有设置主外键,要分别删除主明细表
//如果设置了主外键,则只删除主表,如果数据库没设置级联,则需要开发者决定是否同时删除主明细表还是提示错误信息。
if(rowIds==null||rowIds.length==0)return "";
IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.dbService);
String masterTableName="";//主表表名
String masterColName="";//主表字段名
Object obj = service.getJdbcTemplate().queryForObject("select table_name from comm_table_def where cls_name='"+entityClass+"'", String.class);
if(obj!=null)masterTableName=obj.toString();

for(int i=0;i<rowIds.length;i++)//页面上选中多行,逐行删除
{
//删除明细,这里混合使用hibernate和jdbctemplate有问题,所以全部使用jdbcTemplate
//从主明细关系表中检索主表对应哪些明细表,遍历明细表进行删除
List list = service.findListByFieldValue("org.openjweb.core.entity.CommMasterDetailRel", "masterCol", fieldName, true, "masterCol");
CommMasterDetailRel relEnt = null;
if(list!=null&&list.size()>0)
{
for(int j=0;j<list.size();j++)
{

relEnt = (CommMasterDetailRel)list.get(j);
String detailTableName="";//子表表名
String detailColName="";//子表字段名
detailTableName = relEnt.getDetailTable();
detailColName = relEnt.getDetailCol();
service.getJdbcTemplate().execute("delete from "+detailTableName+" where "+detailColName+"='"+rowIds[i]+"'");
}
}

//if(true) throw new Exception("test trans"); //这里抛出异常,则整个事务回滚
//删除主表
//service.getJdbcTemplate().execute("delete from hr_resume where row_id='"+rowIds[i]+"'");
service.getJdbcTemplate().execute("delete from "+masterTableName+" where row_id='"+rowIds[i]+"'");

//测试事务,如果有异常,事务失败!
//if(true) throw new Exception("删除失败!");
}
return sMessage;
}

}

在上面的抽象类里,从主明细表关系表中获取此表是否有子表,如果有子表,则删除子表记录,删除后再删除主表记录,当然在实际应用中主子表有可能建立了主外键级联删除,如果没有建主外键,则上面的操作先删除子表,后删除主表,如果中间有异常,则整个事务回滚.在上面的代码中没有事务处理的代码,这是因为事务管理是由Spring容器控制的,下面是平台生成的spring配置文件:

<!-- OpenJWeb create Service,don't delete this row -->
<bean id="ICrmDistributionService" parent="txProxyTemplate1">
<property name="target">
<bean class="org.openjweb.core.service.impl.CrmDistributionServiceImpl">
<property name="dbService" value="IDBSupportService3"/>
</bean>
</property>
</bean>

其中 parent="txProxyTemplate1">指明了一个事务代理:

<bean id="txProxyTemplate1" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="demoTxManager" />
</property>
<property name="transactionAttributes">
<props>
<!-- 如果下面的被注释掉,则方法内部第一次写数据库成功后下一步抛异常,数据库数据回提交 -->
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>

</props>
</property>
</bean>

此事务代理指定update,insert,*等方法当出现Exception异常时回滚,*表示所有方法出现异常都回滚.

由于OpenJWeb实现了由平台生成业务逻辑类并自动配置 Spring配置文件,所以对于不是很熟悉Spring的朋友提供了很大的方便.在实际开发中如果需要实现更多的业务逻辑,可在生成的源文件中添加新的方法.

作者联系方式:

QQ:29803446

msn:baozhengw999@hotmail.com

分享到:
评论

相关推荐

    openjweb快速开发平台-在线考试与在线调查系统

    打开这个文件,可以获取更具体的指导,了解如何在OpenJWeb平台上创建和管理考试,以及如何利用源码进行开发。 总之,OpenJWeb快速开发平台为构建在线考试和调查系统提供了一站式解决方案,它的开源特性鼓励开发者...

    OpenJWeb快速开发平台快速生成增删改查功能指南

    此文件介绍如何利用OpenJweb快速开发平台快速生成增删改查功能页面,已实现由用户定义及创建数据库表,在平台中生成hibernate映射文件和POJO类,生成的增删改查页面包括跨数据库的分页,排序,条件查询,及下拉型字段根据...

    OpenJWeb快速开发平台简易工作流的实现-信息发布流程(一)

    《OpenJWeb快速开发平台简易工作流的实现——信息发布流程(一)》 在IT行业中,快速开发平台是提升效率、降低开发成本的关键工具。OpenJWeb是一个深受开发者喜爱的开源Java Web开发框架,它提供了丰富的功能和强大的...

    OpenJWeb1.6Java快速开发平台功能手册090315

    ### OpenJWeb 1.6 Java快速开发平台关键知识点 #### 第一章 OpenJWeb(v1.6)介绍 **1.1 开源技术集成** - **基础框架**:OpenJWeb 1.6 基于 Spring、Struts2、Hibernate3、Spring Security 和 DWR 这些成熟的技术...

    openjweb

    OpenJWeb平台快速开发快速开发指南(非工作流相关).doc" 可能是一份详尽的开发指南,为开发者提供了在`openjweb`平台上进行非工作流相关的开发指导,可能包括数据库连接、API调用、页面布局、自定义组件开发等内容,...

    OpenJWeb简易审批流

    "OpenJWeb简易审批流"是一个关于利用OpenJWeb快速开发平台构建事务处理和审批流程的应用教程。OpenJWeb是一个企业级的Java Web应用开发框架,它提供了丰富的组件和工具,帮助开发者快速构建业务系统,尤其在处理日常...

    OpenJWeb(1.6) Java Web应用快速开发平台技术白皮书

    首先,OpenJWeb基于Servlet和JSP技术,提供了一套灵活的MVC(Model-View-Controller)框架,支持自定义标签库,使得开发者能够轻松创建和管理视图层。此外,它还集成了数据访问层,通过DAO(Data Access Object)...

    OpenJWeb1.6 Java Web 应用快速开发平台技术白皮书

    本文介绍最新的开源产品Openjweb java快速应用开发平台,基于struts2+hibernate+spring+spring security,实现了单表,主明细表增删改查,完整的组织结构树和权限管理体系,支持多语设置和自动生成多语言文件,支持可配置...

    OpenJweb增删改查页面生成器之建表1

    总的来说,这个教程面向的是希望利用OpenJweb进行快速Web开发的Java程序员,通过学习,他们可以掌握如何利用平台快速构建数据库表并自动生成CRUD页面,从而提升开发效率,专注于更高级别的业务逻辑设计。对于初学者...

    OpenJWeb(v1.9) 企业级信息化应用平台开源版发布公告(基于Java语言开发)

    OpenJWeb(v1.9) 是一个基于Java语言开发的企业级信息化应用平台的开源版本,它的发布对于开发者和企业来说,提供了一个免费且强大的工具来构建和管理他们的信息系统。这个平台可能包含了各种功能模块,如内容管理...

    OpenJWeb工作流设计文档

    《OpenJWeb工作流设计文档》是阿宝先生为JWFD开源工作流引擎联盟成员——openjweb快速开发平台精心设计的一款工作流解决方案。在本文档中,我们将深入探讨OpenJWeb工作流的设计理念、核心功能以及如何利用它来构建...

    OpenJWeb工作流

    这部分通常是基于业务规则和工作流配置来实现的,需要确保逻辑的正确性和完整性。 综上所述,OpenJWeb平台提供了一个强大而灵活的工作流管理系统,通过上述步骤,我们可以快速地开发出满足特定业务需求的审批流程...

    OpenJWeb1.9Release开源版20110601

    **OpenJWeb**是一款面向Java Web应用开发的框架,其目标是提供一个易于使用且高度可扩展的平台,用于构建企业级应用。OpenJWeb 1.9 Release版本作为2011年6月1日发布的开源版本,旨在为广大开发者提供更加稳定、高效...

    OpenJWeb3.6业务开发平台支持分布式架构-附件资源

    OpenJWeb3.6业务开发平台支持分布式架构-附件资源

    oracle 技术

    - **OpenJWeb**是一个基于Java的Web应用快速开发平台,旨在提供高效、便捷的开发工具来加速企业级信息化应用的开发过程。 - 开发者可以通过该平台轻松地构建包括组织结构维护、用户角色管理、权限控制、邮件发送等...

    OpenJWeb_v1_6_增删改查页面代码生成器.PDF

    OpenJWeb V1.6采用的主框架...在平台中定义好一个数据库表结构后,可生成对应的数据库表,Java实体类代码,Hibernate配置文件,struts2的action配置,编辑页面和列表页面、Struts2 Action类等,并在线调用ant进行编译。

    JWFD工作流嵌入式公式解析模块

    推荐技术联盟 OpenJweb 群,作者:阿宝 作品 OpenJweb 快速开发平台 群号:33724089 网站 http://code.google.com/p/openjweb/downloads/list 推荐技术联盟 family168 www.family168.com 专业的JBPM解决方案...

Global site tag (gtag.js) - Google Analytics