EJB异步提交和存取过程的使用

1.EJB 异步类Event.class

package org.jboss.seam.core;

import static org.jboss.seam.annotations.Install.BUILT_IN;

import java.util.List;

import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.async.AbstractDispatcher;
import org.jboss.seam.async.CronSchedule;
import org.jboss.seam.async.Dispatcher;
import org.jboss.seam.async.Schedule;
import org.jboss.seam.async.TimerSchedule;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.Expressions.MethodExpression;
import org.jboss.seam.core.Init.ObserverMethod;
import org.jboss.seam.core.Init.ObserverMethodExpression;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;

/**
 * Support for Seam component-driven events
 * 
 * @author Gavin King
 *
 */
@Scope(ScopeType.EVENT)
@BypassInterceptors
@Name("org.jboss.seam.core.events")
@Install(precedence=BUILT_IN)
public class Events 
{
   
   private static final LogProvider log = Logging.getLogProvider(Events.class);
   
   /**
    * Add a new listener for a given event type
    * 
    * @param type the event type
    * @param methodBindingExpression a method binding, expressed in EL
    * @param argTypes the argument types of the method binding
    */
   public void addListener(String type, String methodBindingExpression, Class... argTypes)
   {
      MethodExpression methodBinding = Expressions.instance().createMethodExpression(methodBindingExpression, Object.class, argTypes);
      Init.instance().addObserverMethodExpression(type, methodBinding);
   }
   
   /**
    * Raise an event that is to be processed synchronously
    * 
    * @param type the event type
    * @param parameters parameters to be passes to the listener method
    */
   public void raiseEvent(String type, Object... parameters)
   {
      //TODO: find a way to map event parameters to params in an EL-defined listener
      log.trace("Processing event:" + type);
      List
  
  
   
    list = Init.instance().getObserverMethodExpressions(type);
      if (list!=null)
      {
         for (ObserverMethodExpression listener: list )
         {
            listener.getMethodBinding().invoke(parameters);
         }
      }
      List
   
   
    
     observers = Init.instance().getObserverMethods(type);
      if (observers!=null)
      {
         for (ObserverMethod observer: observers)
         {
            String name = observer.getComponent().getName();
            Object listener = Component.getInstance( name, observer.isCreate(), false );
            if ( observer.getComponent().hasUnwrapMethod() )
            {
               listener = observer.getComponent().getScope().getContext().get(name);
            }
            
            if (listener!=null)
            {
               observer.getComponent().callComponentMethod(listener, observer.getMethod(), parameters);
            }
         }
      }
   }
   
   /**
    * Raise an event that is to be processed asynchronously
    * 
    * @param type the event type
    * @param parameters parameters to be passes to the listener method
    */
   public void raiseAsynchronousEvent(String type, Object... parameters)
   {
      getDispatcher().scheduleAsynchronousEvent(type, parameters);
   }

   /**
    * Raise an event that is to be processed according to a "schedule"
    * 
    * @see TimerSchedule (EJB, quartz or JDK timer service)
    * @see CronSchedule (quartz timer service only)
    * 
    * @param type the event type
    * @param schedule the schedule object, specific to the dispatcher strategy
    * @param parameters parameters to be passes to the listener method
    */
   public void raiseTimedEvent(String type, Schedule schedule, Object... parameters)
   {
      getDispatcher().scheduleTimedEvent(type, schedule, parameters);
   }
   
   /**
    * Raise an event that is to be processed after successful completion of 
    * the current transaction
    * 
    * @param type the event type
    * @param parameters parameters to be passes to the listener method
    */
   public void raiseTransactionSuccessEvent(String type, Object... parameters)
   {
      getDispatcher().scheduleTransactionSuccessEvent(type, parameters);
   }
   
   /**
    * Raise an event that is to be processed after the current transaction
    * ends
    * 
    * @param type the event type
    * @param parameters parameters to be passes to the listener method
    */
   public void raiseTransactionCompletionEvent(String type, Object... parameters)
   {
      getDispatcher().scheduleTransactionCompletionEvent(type, parameters);
   }
   
   /**
    * @return the Dispatcher object to use for dispatching asynchronous
    * and timed events
    */
   protected Dispatcher getDispatcher()
   {
      return AbstractDispatcher.instance();
   }
   
   public static boolean exists()
   {
      return Contexts.isEventContextActive() && instance()!=null;
   }

   public static Events instance()
   {
      return (Events) Component.getInstance(Events.class, ScopeType.EVENT);
   }
   
}

   
   
  
  
2.调用异步代码,定义全局变量:public static final String BACKUP_MONTHLY_STOCK = "BACKUP_MONTHLY_STOCK";传入参数:BACKUP_MONTHLY_STOCK 字符串Events.instance().raiseAsynchronousEvent(BACKUP_MONTHLY_STOCK, endPeriod, company, getUsername());注入Observer(String type),这样可以达到异步监听的事件,取得connection,然后调用存取过程BACKUP_MONTHLY_STOCK_PKG,获得传递的参数,并执行

 @Observer("BACKUP_MONTHLY_STOCK")
    public void backUpMonthlyStock(String endPeriod, String companyAid, String userName) throws SQLException {
    Session session = (Session) entityManager.getDelegate();
    @SuppressWarnings("deprecation")
    Connection connection = session.connection();
    CallableStatement callableStatement = null;
    try {
        callableStatement = connection.prepareCall(BACKUP_MONTHLY_STOCK_PKG);
        callableStatement.setString(1, endPeriod); // endPeriod
        callableStatement.setString(2, companyAid); // companyAid
        callableStatement.setString(3, userName); // Month-End user name
        callableStatement.registerOutParameter(4, java.sql.Types.VARCHAR); // Error Message
        callableStatement.registerOutParameter(5, java.sql.Types.VARCHAR); // retcode
        // execute BACKUP_MONTHLY_STOCK_PKG.fn_main
        callableStatement.executeUpdate();
        String errbuf = callableStatement.getString(4); // return Error Message
        String retcode = callableStatement.getString(5);// return retcode
        // retcode : 0 --> fail 1 --> success
        // errbuf : when retcode = 0, shows error message.
        // when retcode = 1, value is null.
        System.out.println("UserName" + userName);
        System.out.println("retcode" + retcode);
        System.out.println("errbuf" + errbuf);
        // if (retcode != null && retcode.equals(1)) {
        // return;
        // } else {
        // throw new Exception(errbuf);
        // }
    } catch (SQLException e) {
        throw e;
    } finally {
        if (callableStatement != null) {
        callableStatement.close();
        }
        if (connection != null) {
        connection.close();
        }
        if (session != null) {
        session.disconnect();
        }
    }
    }
3:存取过程:BACKUP_MONTHLY_STOCK_PKG

create or replace
PACKAGE BODY      BACKUP_MONTHLY_STOCK_PKG is

-----------------------------------------------------------------------------------
-- 主程式 Main Program
-----------------------------------------------------------------------------------

procedure fn_main (x_p_end_period     in  varchar2,
                   x_p_aid_company    in  varchar2,
                   x_p_backup_user    in  varchar2,
                   errbuf             out varchar2,
                   retcode            out varchar2)is
    
    --x_ln_end_period        varchar2(10);
    x_ln_ret_code          number := 1;
    
    begin
    
         --x_ln_end_period := to_char(sysdate,'yyyy-MM');
         
         delete_IM_ITEM_STOCK_PERIOD(x_p_end_period,x_p_aid_company);
         
         INSERT INTO AGBS.IM_ITEM_STOCK_PERIOD (
                                                 AID,
                                                 AID_ITEM_STOCK, 
                                                 AID_COMPANY, 
                                                 AID_ITEM, 
                                                 AID_WAREHOUSE, 
                                                 END_PERIOD, 
                                                 IN_MIT_QUANTITY, 
                                                 QUANTITY, 
                                                 ASSIGNED_QUANTITY, 
                                                 RESERVED_QUANTITY, 
                                                 DO_IN_PROGRESS_QUANTITY, 
                                                 QC_QUANTITY, 
                                                 OUT_MIT_QUANTITY, 
                                                 DAILY_BEGIN_QUANTITY, 
                                                 MONTH_BEGIN_QUANTITY, 
                                                 LAST_MONTH_BEGIN_QUANTITY, 
                                                 USER_CREATED, 
                                                 DATE_CREATED, 
                                                 USER_LAST_MODIFIED, 
                                                 DATE_LAST_MODIFIED,
                                                 USER_BACKUP) 
                                          SELECT 
                                                 fn_get_new_aid('IM_ITEM_STOCK_PERIOD'),
                                                 AID, 
                                                 AID_COMPANY, 
                                                 AID_ITEM, 
                                                 AID_WAREHOUSE,
                                                 x_p_end_period, 
                                                 IN_MIT_QUANTITY, 
                                                 QUANTITY,    
                                                 ASSIGNED_QUANTITY, 
                                                 RESERVED_QUANTITY, 
                                                 DO_IN_PROGRESS_QUANTITY,    
                                                 QC_QUANTITY, 
                                                 OUT_MIT_QUANTITY, 
                                                 DAILY_BEGIN_QUANTITY,    
                                                 MONTH_BEGIN_QUANTITY, 
                                                 LAST_MONTH_BEGIN_QUANTITY, 
                                                 USER_CREATED,    
                                                 DATE_CREATED, 
                                                 USER_LAST_MODIFIED, 
                                                 DATE_LAST_MODIFIED,
                                                 x_p_backup_user
                                            FROM AGBS.IM_ITEM_STOCK
                                            WHERE AID_COMPANY = x_p_aid_company ;
           
               retcode := x_ln_ret_code;
               
           exception
                when others then
                  x_ln_ret_code := 0;
                  errbuf :=  'System Failure:  ' ||SQLCODE||' -ERROR- '||SQLERRM;
           
           
    end fn_main;  




-----------------------------------------------------------------------------------
-- delete period record
-----------------------------------------------------------------------------------

    procedure delete_IM_ITEM_STOCK_PERIOD(x_p_end_period     in  varchar2,
                                          x_p_aid_company    in  varchar2)
    is
         
    BEGIN

        delete from AGBS.IM_ITEM_STOCK_PERIOD
          where END_PERIOD = x_p_end_period
            and AID_COMPANY = x_p_aid_company;
    
    END delete_IM_ITEM_STOCK_PERIOD;
    
    



-----------------------------------------------------------------------------------
-- 取得 New AID
-----------------------------------------------------------------------------------

    FUNCTION fn_get_new_aid(x_in_table_name varchar2) return varchar2
    is
         x_ln_aid varchar2(16);
    BEGIN

        select ADDI.GENERATE_AID('AGBS', x_in_table_name) into x_ln_aid
          FROM DUAL;
          
        RETURN x_ln_aid;
    
    END fn_get_new_aid;
    
end BACKUP_MONTHLY_STOCK_PKG;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值