在tomcat下对struts进行扩展,同时用到了usertransaction进行事务操作

Eclipse整合SSH框架(Struts2+Spring+Hibernate+MySQL+Tomcat) SSh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。 阅读详情

在tomcat下对struts进行扩展,同时用到了usertransaction进行事务操作。我用的是struts1.1。
一:使用usertransaction时要用到jotm-1.4.3.tar里的jotm包
1。关于tomcat下server.xml的配置
  <Context path="/mystruts" docBase="smap" debug="0" reloadable="true">
   <Resource name="jdbc/myDB" auth="Container"

type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/myDB">
      <parameter>
     <name>factory</name>
     <value>org.objectweb.jndi.DataSourceFactory</value>
      </parameter>
     <parameter>
    <name>driverClassName</name>
    <value>oracle.jdbc.driver.OracleDriver</value>
     </parameter>
     <parameter>
     <name>url</name> 
     <value>jdbc:oracle:thin:@1192.168.0.1:1521:myDB</value>
     </parameter>
     <parameter>
    <name>username</name>
    <value>mystruts</value>
     </parameter>
     <parameter>
    <name>password</name>
    <value>888888</value>
     </parameter>
     <parameter>
    <name>maxActive</name>
    <value>20</value>
     </parameter>
     <parameter>
    <name>maxIdle</name>
    <value>20</value>
     </parameter>
     <parameter>
    <name>maxWait</name>
    <value>-1</value>
     </parameter>
     </ResourceParams>
     <Resource name="UserTransaction" auth="Container"

type="javax.transaction.UserTransaction"/>
     <ResourceParams name="UserTransaction">
    <parameter>
      <name>factory</name>
      <value>org.objectweb.jotm.UserTransactionFactory</value>
    </parameter>
    <parameter>
      <name>jotm.timeout</name>
      <value>60</value>
    </parameter>
     </ResourceParams>
  </Context>
2。管理web.xml内的配置
 <resource-ref>
   <description>Datasource Connecton</description>
   <res-ref-name>jdbc/myDB</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
 </resource-ref>
3。扩展Action.java类,后边开发struts时,就直接继承MyAction类。
import org.apache.struts.action.Action;
import javax.naming.*;
import javax.transaction.UserTransaction;

public class MyAction extends Action{
    protected static UserTransaction userTran=null;
    static String utName;
    static{
        utName="java:comp/UserTransaction";
    }
    public SmapAction(){
        try{
            InitialContext initCtx = new InitialContext();
            userTran = (UserTransaction)initCtx.lookup(utName);
        }catch(Exception e){
            System.out.println("userTran error="+e.getMessage());
        }

    }
}
二:扩展ActionMapping.java类,在开发时就可以设置是否记录日志信息。
1。扩展ActionMapping.java类
import org.apache.struts.action.ActionMapping;

public class MyActionMapping extends ActionMapping{
    // add the new properties
    protected boolean logResults = false;

    //call the ActionMapping's default constructor
    public SmapActionMapping() {
        super();
    }

    public boolean isLogResults() {
        return logResults;
    }

    public void setLogResults(boolean logResults) {
        this.logResults = logResults;
    }
}
2。配置struts-config.xml,
其中<set-property property="logResults" value="false"/>这句话是设置是否进行日志记录的。
    <action    path="/logon"
               type="com.mystruts.LogonAction"
      name="userForm"
               scope="request"
      validate="false"
      input="/index.jsp"
     >
    <set-property property="logResults" value="false"/>
   <forward name="success"              path="/main.jsp"/>
    </action>
3。具体的操作类。
当struts-config.xml中的set-property 的value为false时,不打印,为true时进行打印操作
public class TestBean
    extends SmapAction {

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest

request, HttpServletResponse response) throws Exception {
 
        MyActionMapping myMapping = (MyActionMapping) mapping;

        if (myMapping.isLogResults()) {
            System.out.println("isLogResults====");
        }
 //进行事务操作
        try{
            userTran.begin();

            System.out.println("00000000");
            String sql1="insert into test values(21,'21',sysdate)";
            JDBC.executeUpdate(sql1);
            System.out.println("11111111");
            String sql2="insert into test values(33,'33',sysdate)";
            JDBC.executeUpdate(sql2);
            System.out.println("2222222");
            String sql3="insert into test values(51,'51',sysdate)";
            JDBC.executeUpdate(sql3);
            System.out.println("33333333");
            userTran.commit();
        }catch(Exception e){
            userTran.rollback();
            System.out.println("44444444");
        }
        return mapping.findForward("success");
    }
}

三:对struts平台的扩展,可以在平台上进行权限控制等操作,扩展RequestProcessor.java类。
在这个类中,只要对processPreprocess方法进行相对应的扩充,就可以了。
public class MyRequestProcessor extends RequestProcessor{
 /**
  * <p>Process an <code>HttpServletRequest</code> and create the
  * corresponding <code>HttpServletResponse</code>.</p>
  *
  * @param request The servlet request we are processing
  * @param response The servlet response we are creating
  *
  * @exception IOException if an input/output error occurs
  * @exception ServletException if a processing exception occurs
  */
 public void process(HttpServletRequest request,
      HttpServletResponse response)
  throws IOException, ServletException {

  // Wrap multipart requests with a special wrapper
  request = processMultipart(request);

  // Identify the path component we will use to select a mapping

  String path = processPath(request, response);
  System.out.println("33333333333333333333333="+path);
  if (path == null) {
   return;
  }
  if (log.isDebugEnabled()) {
   log.debug("Processing a '" + request.getMethod() +
       "' for path '" + path + "'");
  }

  // Select a Locale for the current user if requested
  processLocale(request, response);

  // Set the content type and no-caching headers if requested
  processContent(request, response);
  processNoCache(request, response);

  // General purpose preprocessing hook
  if (!processPreprocess(request, response)) {
   path="/fail";
   System.out.println("11111111111="+path);
   //return;
  }

  // Identify the mapping for this request
  ActionMapping mapping = processMapping(request, response, path);
  if (mapping == null) {
   return;
  }

  // Check for any role required to perform this action
  if (!processRoles(request, response, mapping)) {
   return;
  }

  // Process any ActionForm bean related to this request
  ActionForm form = processActionForm(request, response, mapping);
  processPopulate(request, response, form, mapping);
  if (!processValidate(request, response, form, mapping)) {
   return;
  }

  // Process a forward or include specified by this mapping
  if (!processForward(request, response, mapping)) {
   return;
  }
  if (!processInclude(request, response, mapping)) {
   return;
  }

  // Create or acquire the Action instance to process this request
  Action action = processActionCreate(request, response, mapping);
  if (action == null) {
   return;
  }

  // Call the Action instance itself
  ActionForward forward =
   processActionPerform(request, response,
         action, form, mapping);

  // Process the returned ActionForward instance
  processForwardConfig(request, response, forward);

 }


 /**
  * General-purpose preprocessing hook that can be overridden as required
  * by subclasses.  Return <code>true</code> if you want standard processing
  * to continue, or <code>false</code> if the response has already been
  * completed.  The default implementation does nothing.
  *
  * @param request The servlet request we are processing
  * @param response The servlet response we are creating
  */

 protected boolean processPreprocess(HttpServletRequest request,
          

HttpServletResponse response) {
  HttpSession session = request.getSession();
  //String ss = (String) session.getAttribute("ss");
  String ss="sdfds";
  System.out.println("---------------------processPreprocess=" + ss);
  if (ss != null) {
   return (true);
  }else {
   return false;
  }

 }

}

Vivado ChipScope Debugging: Overcoming Common DRC Errors in FPGA Design 本文深入解析Vivado ChipScope调试中常见的DRC错误,特别是AVAL-244和AVAL-245等时钟相关问题,提供实用的Tcl命令解决方案和最佳实践。通过将DRC错误降级为警告的技巧,帮助FPGA设计者高效完成调试流程,同时强调何时应保留DRC检查以确保设计可靠性。 阅读详情

相关推荐

微信聊天记录数据库解密实战:从WCDB到sqlcipher4的关键步骤解析

本文详细解析了微信桌面版聊天记录数据库的解密实战过程。通过逆向分析,定位了微信从WCDB框架到sqlcipher4加密的关键步骤,并成功提取了数据库密钥。文章重点介绍了如何通过动态调试、字符串定位等方法,追踪并验证sqlcipher4的加密密钥,最终实现对加密数据库文件的解密操作,为安全研究和数据恢复提供了技术参考。

weixin_29322553的博客 1071

数据库连接池的TOMCAT配置方法

数据库连接池的TOMCAT配置方法 一:新手方法 1.将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中; 2.在server.xml中设置数据源,以MySQL数据库为例,如下: 在 节点中加入, 属性说明:name,数据源名称,通常取”jdbc/XXX”的格式; type,”javax.sql.DataSou...

zhengyangfan的博客 388

阿里云大模型 ACP 认证教材内容突变?这些改动藏着通关密码,不看亏大!

【摘要】核心章节大换血,安全合规融入实战场景,大模型微调用数学深度解析,部署章节带来阿里云产品对比实战攻略,甚至整章内容被替换成藏满学习彩蛋的行业趋势指南。这些改动不仅重塑考试重点,更暗藏官方命题风向——安全合规考场景方案,微调原理考几何解析,部署设计考分析框架。无论你是数学小白还是部署新手,这篇攻略都将带你吃透变动逻辑,附赠急救包和考点清单,帮你抓住这些“隐形加分项”,速来解锁通关秘籍!

davidkorhenn的博客 1755

struts_Tomcat+Eclipse_jboss

1、Struts的安装比较简单,下面的以Tomcat 4.1.24为例,讲述安装过程。 首先请到 http://jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.1,下载后得到的是一个ZIP文件。  将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。 假设你的Tomcat装在c:/Tomcat下

人生可不可以停下来休息休息 1020

在Proteus中用80C51模拟4线SPI点亮OLED屏幕

在Proteus里用80C51模拟4线SPI控制OLED屏幕使其显示图案(汇编实现)。

Connor3093的博客 5003

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录

最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

Struts+Tomcat搭建

tomcat使用(服务器端开发): 如果要安装Tomcat需要进行的配置:tomcat安装在c: \Tomcat CATALINA_HOME变量值设为: H:\Program Files (x86)\tomcat\apache-tomcat-7.0.27 CATALINA_BASE变量值设为: H:\Program Files (x86)\tomcat\apache-tomca...

weixin_30549657的博客 186

青少年C/C++软件编程(四级)等级考试真题及答案解析目录

3. 带通配符的字符串匹配。1. 怪盗基德的滑翔翼。3.最长公共子上升序列。4.宠物小精灵之收服。

长春高老师编程 3032

Lua __index __newindex元表方法学习

在学习Lua语言的元表和元方法章节中,各种网上收例子,便于理解学习。 看到一篇很好的博客,讲到了 lua 的 rawset,rawget,index,newindex的使用,具体博客见下面链接: 作者:@qingqing-zhao 本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/archive/2018/11/28/10032249.h...

highmaple的博客 428

项目经理必看:如何建立高效的相关方沟通机制?

你是否遇到过这样的场景?客户突然说“这不是我要的”,开发团队抱怨“需求总变”,高层追问“进度滞后为什么不早说”?这些问题的根源往往是——相关方沟通机制失效。本文聚焦“如何建立高效沟通机制”,覆盖从识别相关方到持续优化的全流程,适用于IT、产品、工程等各类项目。本文将按“理解问题→拆解核心概念→掌握工具方法→实战落地→未来趋势”的逻辑展开,重点讲解“相关方分析矩阵”“沟通计划表”等实用工具,并用“组织生日派对”的案例贯穿全文,让抽象概念变得可感知。相关方识别:用“权力/利益矩阵”找对人(像派对邀请关键客人)

项目管理的博客 1295

【速通RAG实战:索引】4.RAG文档解析技术

通过本文技术方案,可构建高精准、高效率的文档解析流水线,为 RAG 应用提供坚实的知识底座。核心在于**格式解析的鲁棒性**和**语义分块的准确性**,后续通过持续的性能优化和质量监控,逐步提升索引质量和检索效率。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1545

java transaction使用_Java Transaction API   JAVA事务API

JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。概述JTA和JTSJava事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服...

weixin_35755823的博客 783

【数据分析八步法】将模糊需求转化为可验证的分析问题

国内访问Huggingface官方源常遇网络问题,可通过切换国内镜像提升下载速度。三种配置方式:1)设置HF_ENDPOINT环境变量;2)在from_pretrained中直接指定镜像参数;3)修改本地Huggingface配置文件。常用镜像包括hf-mirror.com、阿里云ModelScope和清华镜像源。注意镜像同步延迟、私有模型限制,建议配合huggingface-cli工具使用,必要时取消代理设置。合理配置镜像源可显著改善Huggingface生态使用体验。

Mr数据杨 858

在tomcat下对struts的扩展。用到了usertransaction

在tomcat下对struts进行扩展,同时用到了usertransaction进行事务操作。我用的是struts1.1。一:使用usertransaction时要用到jotm-1.4.3.tar里的jotm包1。关于tomcat下server.xml的配置                      factory     org.objectweb.jndi.DataSourceFactory 

1667

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

其中获得UserTransaction资源的方式有三种,除了用EJB资源的方式注入以外,还有以下两种方式: (1) JNDI查找 Context context = new InitialContex

其中获得UserTransaction资源的方式有三种,除了用EJB资源的方式注入以外,还有以下两种方式: (1) JNDI查找 Context context = new InitialContext(); UserTransaction userTransaction = (

用❤飞翔 2012

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java事务

一、java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。 二、java事务的四大属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。 三、具体例子: 1、JDBC事务 private Connection conn = null;   pr

lufazhi的专栏 330

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java五种分布式事务,Java 分布式事务解决方案

事务必须服从ISO/IEC所制定的ACID原则。·原子性(atomicity)·一致性(consistency)·隔离性(isolation)·持久性(durability)原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表...

weixin_39664774的博客 888

Java事务 API——JTA事务(学习分享)

文章目录JTA事务介绍什么是JTA事务什么是XA规范常见的JTA实现JTA的架构UserTransaction接口(面向开发人员的接口)Transaction 接口(面向提供商的接口)TransactionManager接口(面向提供商的接口)实例JTA事务处理过程本地事务处理实例JTA事务处理实例(分布式事务处理)补充JTA事务和JDBC事务的区别 JTA事务 介绍 什么是JTA事务 JTA:(Java Transaction API)Java事务API。是一个Java企业版的应用程序接口,在Java程

weixin_43839323的博客 3639

深入理解与实践Java事务管理技术

Java事务是Java应用程序在处理数据库操作时保证数据一致性和完整性的关键机制。在Java中,事务通常通过JDBC或更高级的框架如Spring等来实现管理。ACID(Atomicity, Consistency, Isolation, Durability)原则是事务的核心属性,确保了事务执行过程中的原子性、一致性、隔离性和持久性。

聚焦于深度解析最新的编程语言特性、框架升级、架构设计、开发工具和最佳实践,涵盖Web前端(如Vue3, React, Angular等)、后端开发(如Node.js, Java, Python等)、移动端开发(iOS, Android原生及跨平台开发) 3万+

在Tomcat中通过JOTM支持JTA

因为需要将项目从IBM WebSphere Application Server移植到Tomcat上开发,所以研究了一下在Tomcat中通过JNDI查找和使用JDBC及JTA的方法。Tomcat 是Servlet容器,但它也提供了一个JNDI InitialContext实现,因此用户可以像在J2EE应用程序服务器中一样在Tomcat中使用JNDI查找JDBC数据源。不过在事务处理方面,Tomca...

weixin_34153893的博客 227

oracle jta,JBoss+Oracle+JTA配置分布式事务

package myjta.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.naming.Context;import javax.naming.InitialContext;imp...

weixin_39829501的博客 217

JPA学习--JPA中的UserTransaction的理解

一、前言今天中午一小伙伴在进行JPA的相关配置时遇到一些疑惑点,自己思考了一下也没有搞明白,就查了一些资料,翻看了之前的一些代码,逐渐搞明白了几点。写一博客分享之。二、UserTransaction简析2.1 代码展示请看下面一段代码:1.注意看javax.transaction.UserTransaction import javax.transaction.UserTransaction;

高自强的博客 9156

JTA的事务管理由UserTransaction管理.

// 回滚处理开始 InitialContext context = new InitialContext(); // JTA的事务管理由UserTransaction管理. UserTransaction utx = (UserTransaction) context.lookup("UserTransaction"); try { // 开启事物 utx.begin

yanziit的博客 3782

关于UserTransaction

  public class UserTransaction { private static Map threadDbconnectionMap = new HashMap(); public void begin() { dataSource.getConnection().setAutoCommit(false); thr...

杨镇宇的博客 916
上一篇: 层遇到select框时
下一篇: 在tomcat下对struts的扩展。用到了usertransaction
d80
d80
博客等级 码龄24年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值