The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

 

1、自动增长identity

适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识
使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用)
数据库中的语法如下:
MySQL:create table t_user(id int auto_increment primary key, name varchar(20));
SQL Server:create table t_user(id int identity(1,1) primary key, name varchar(20));

 

<id name="id" column="id" type="long">
    <generator class="identity" />
</id>
 
2、sequence

DB2、Oracle均支持的序列,用于为long、short或int生成唯一标识
数据库中的语法如下:
Oracle:create sequence seq_name increment by 1 start with 1;
需要主键值时可以调用seq_name.nextval或者seq_name.curval得到,数据库会帮助我们维护这个sequence序列,保证每次取到的值唯一,如:
insert into tbl_name(id, name) values(seq_name.nextval, ‘Jimliu’);

 

<id name="id" column="id" type="long">
    <generator class="sequence">
       <param name="sequence">seq_name</param>
   </generator>
</id>
 
如果我们没有指定sequence参数,则Hibernate会访问一个默认的sequence,是hibernate_sequence,我们也需要在数据库中建立这个sequence
此外,sequence还可以有另外一个参数是paramters,可以查看Hibernate的API了解它的用法,见org.hibernate.id.SequenceGenerator
调用数据库的sequence来生成主键,要设定序列名,不然hibernate无法找到:
<param name="sequence">NAME_SEQ</param>(Oracle中很常用)

 

 

3、hilo

使用一个高/低位算法生成的long、short或int类型的标识符,给定一个表和字段作为高位值的来源,默认的表是hibernate_unique_key,默认的字段是next_hi。它将id的产生源分成两部分,DB+内存,然后按照算法结合在一起产生id值,可以在很少的连接次数内产生多条记录,提高效率

MySQL:create table hi_value(next_hi integer not null);

 

insert into hi_value(next_hi) values(1);

 

 

<id name="id" column="id">
    <generator class="hilo">
       <param name="table">hi_value</param>
       <param name="column">next_hi</param>
       <param name="max_lo">100</param>
   </generator>
</id>
 
在hibernate持久化的时候,由hibernate负责生成低位值。hilo标识符生成器在生成标识符时需要从hi_value表中取出next_hi的当前值,然后修改该值,这个操作是在单独的事务中完成的。最大的低值在属性max_lo中配置,但在Hibernate内存中生成的低位值超过此值时,就有需要到数据库的hi_value表中再次读取高位值了
使用hilo生成策略,要在数据库中建立一张额外的表,默认表名为hibernate_unique_key,默认字段为integer类型,名称是next_hi(比较少用)
我们也可以自己设置自定义的表名和字段名
<id name="id" type="integer">
   <column name="id"/>
   <generator class="hilo">
      <param name="my_unique_key"/>
      <param column="next_hi"/>
   </generator>
</id>

 

 


4、native

 

会根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强,但此时,如果选择sequence或者hilo,则所有的表的主键都会从Hibernate默认的sequence或者hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是很高
     对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),native就是将主键的生成工作交由数据库完成,hibernate不管(很常用)

 

<id name="id" column="id">
    <generator class="native" />
</id>
 
5、seqhilo

sequence和hilo的结合,hilo的高位由sequence产生,所以也需要底层数据库的支持
通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持 Sequence 的数据库,如 Oracle(比较少用)

 

<id name="id" column="id">
   <generator class="seqhilo">
      <param name="sequence">seq_name</param>
      <param name="max_lo">100</param>
   </generator>
</id>
 
6、increment

这个是由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库,因此所有的数据库都可以使用,但问题也随之而来,由于是Hibernate生成的,所以只

 

 

能有一个Hibernate应用进程访问数据库,否则就会产生主键冲突,不能在集群情况下使用
插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法
<id name="id" column="id">
    <generator class="increment" />
</id>
 
7、

uuid.hex

 

 

使用一个128-bit的UUID算法生成字符串类型的标识符,UUID被编码成一个32位16进制数字的字符串。UUID包含:IP地址、JVM启动时间、系统时间(精确到1/4秒)和一个计数器值(JVM中唯一)
hibernate会算出一个128位的唯一值插入

<id name="id" column="id">
    <generator class="uuid.hex" />
</id>

 


uuid.string
       hibernate会算出一个16位的值插入

 


8、assigned

由应用程序负责生成主键标识符,往往使用在数据库中没有代理主键,使用的主键与业务相关的情况,如:

 

 

<id name="id" column="id" type="string">
    <generator class="assigned" />
</id>
 
这种主键的生成方式不建议使用,在数据库表设计时就应该使用代理主键(surrogate key),不应使用自然主键(natural key具有业务含义),在没有指定<generator>标签时,默认就是assigned主键的生成方式
在插入数据的时候主键由用户自己添加,hibernate也不管

 


9、foreign
使用外部表的字段作为主键

 

10、select
使用触发器生成主键(主要用于早期的数据库主键生成机制,少用)

ps:

代理主键是指与业务无关且能唯一标识数据库中记录,一般是数据库自动生成的,比如mysql可以使用auto_increment,Sql2000可以使用identity生成方式,oracle可以使用sequence生成方式自然主键指业务相关,由用户指定,且能唯一标识数据库中的任意一条记录


简介版:

increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。

identity:代理主键,适合于Mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护。

sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。

native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。

hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值

uuid.hex:代理主键,hibernate采用uuid 128位算法生成基于字符串的主键值

assign:适合于应用程序维护的自然主键。

posted @ 2012-08-31 13:29 Eric_jiang 阅读(393) | 评论 (0)编辑 收藏

 

Hibernate是用来操作数据库的,当然要结合数据库来使用。但是公司的电脑是不能随便安装软件的,即使是mysql的免安装版,也要把驱动文件放到windows下,没有权限是做不到的。因此推荐一个hsqldb数据库,是java语言写的。不需要安装。下面介绍如何结合hibernatehsqldb

1、 下载hsqldb

http://hsqldb.org/

将下载下来的文件解压,文件结构如图

 

打开demo文件夹

 

注意里面的几个文件runManager.batrunServer.batmy_server.batrunManagerSwing.bat

runServer.bat是来开启数据库服务,runManager.batrunManagerSwing.bat是数据库管理界面,可以在里面输入sql语句来执行。注意my_server.bat是自己加进去的,内容是:

cd ../data

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 hibernate

hibernate是数据库名,自己随便写,也可以写成mydb等等

2、 启动hsqldb

先执行my_server.bat,然后执行runServer.bat,最后执行runManager.bat或者runManagerSwing.bat,本例中以runManager.bat为例,启动界面,配置如图

 

注意url中不要忘记hibernate这个数据库名。

点击ok,如图,里面有个名字为user的表

 

Hsqldb就配置到这里。

3、 下面hibernate的配置,首先自己建一个user library,把hibernate所有的必须的jar包都添加进去,在hibernate文件夹中有,自己添加一下。

然后新建一个java项目hibernateDemo,将刚才自己定义的库加到工程里。配置到此结束。

4、 我们现在src文件下定义hibernate的配置文件hibernate.cfg.xml文件,内容如下

 

 

 

  1. <?xml version='1.0' encoding='UTF-8'?>  
  2.   
  3. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  4.   
  5. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  6.   
  7. <hibernate-configuration>  
  8.   
  9.     <session-factory>  
  10.   
  11.        <property name="myeclipse.connection.profile">hsql</property>  
  12.   
  13.        <property name="connection.url">jdbc:hsqldb:hsql://localhost/hibernate</property>  
  14.   
  15.        <property name="connection.username">sa</property>  
  16.   
  17.        <property name="connection.password"></property>  
  18.   
  19.        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>  
  20.   
  21.        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>  
  22.   
  23.        <property name="show_sql">true</property>  
  24.   
  25.        <property name="connection.autocommit">true</property>  
  26.   
  27.        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>  
  28.   
  29.    
  30.   
  31.          
  32.   
  33.        <mapping resource="com/zhoubo/hibernate/User.hbm.xml" />  
  34.   
  35.    
  36.   
  37.     </session-factory>  
  38.   
  39. </hibernate-configuration>  

 

5、 在文件夹src下定义一个package  com.zhoubo.hibernate 在里面新建一个User类,如下

 

  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. public class User {  
  6.   
  7.    
  8.   
  9.     private String id;  
  10.   
  11.     private String password;  
  12.   
  13.     private char sex;  
  14.   
  15.     private int age;  
  16.   
  17.       
  18.   
  19.     public String getId() {  
  20.   
  21.        return id;  
  22.   
  23.     }  
  24.   
  25.     public void setId(String id) {  
  26.   
  27.        this.id = id;  
  28.   
  29.     }  
  30.   
  31.     public String getPassword() {  
  32.   
  33.        return password;  
  34.   
  35.     }  
  36.   
  37.     public void setPassword(String password) {  
  38.   
  39.        this.password = password;  
  40.   
  41.     }  
  42.   
  43.     public char getSex() {  
  44.   
  45.        return sex;  
  46.   
  47.     }  
  48.   
  49.     public void setSex(char sex) {  
  50.   
  51.        this.sex = sex;  
  52.   
  53.     }  
  54.   
  55.     public int getAge() {  
  56.   
  57.        return age;  
  58.   
  59.     }  
  60.   
  61.     public void setAge(int age) {  
  62.   
  63.        this.age = age;  
  64.   
  65.     }  
  66.   
  67.       
  68.   
  69. }  

 

在里面定义一个User类的配置文件User.hbm.xml

 

  1. <?xml version='1.0' encoding='UTF-8'?>  
  2.   
  3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.   
  5.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  6.   
  7. <hibernate-mapping>  
  8.   
  9.     <class name="com.zhoubo.hibernate.User" table="User">  
  10.   
  11.          
  12.   
  13.         <id name="id" column="User_id">  
  14.   
  15.             <generator class="uuid"/>  
  16.   
  17.         </id>  
  18.   
  19.         <property name="password"/>  
  20.   
  21.         <property name="sex"/>  
  22.   
  23.         <property name="age"/>  
  24.   
  25.     </class>  
  26.   
  27. </hibernate-mapping>  

 

并且在hibernate.cfg.xml中来注册这个user.hbm.xml,也就是我们在hibernate.cfg.xml中看到的

<mapping resource="com/zhoubo/hibernate/User.hbm.xml" />

 

下面我们就来通过hibernate来在数据库生成user表,定义一个DBExport类,如下

 

  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. import org.hibernate.cfg.Configuration;  
  6.   
  7. import org.hibernate.tool.hbm2ddl.SchemaExport;  
  8.   
  9.    
  10.   
  11. public class DBExport {  
  12.   
  13.    
  14.   
  15.     public static void main(String ...arg){  
  16.   
  17.        Configuration cfg = new Configuration().configure();  
  18.   
  19.        SchemaExport export = new SchemaExport(cfg);  
  20.   
  21.        export.create(true, true);  
  22.   
  23.     }  
  24.   
  25.    
  26.   
  27. }  

 

可以通过desc user来查询表的属性,可以看到表已经生成了。

下面我们来在表中插入数据,定义一个hibernateUtil类和Client类,如下

 

  1. package com.zhoubo.hibernate;  
  2.   
  3. import org.hibernate.Session;  
  4. import org.hibernate.SessionFactory;  
  5. import org.hibernate.cfg.Configuration;  
  6.   
  7. public class HibernateUtils {  
  8.   
  9.     private static SessionFactory factory ;  
  10.       
  11.     static {  
  12.         try{  
  13.             Configuration cfg = new Configuration().configure();  
  14.             factory = cfg.buildSessionFactory();  
  15.         }catch(Exception e){  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19.       
  20.     public static Session getSession(){  
  21.         return factory.openSession();  
  22.     }  
  23.       
  24.     public static SessionFactory getSessionFactory(){  
  25.         return factory;  
  26.     }  
  27.       
  28.     public static void closeSession(Session session){  
  29.         session.close();  
  30.     }  
  31. }  

 

  1. package com.zhoubo.hibernate;  
  2.   
  3.    
  4.   
  5. import org.hibernate.Session;  
  6.   
  7. import org.hibernate.Transaction;  
  8.   
  9.    
  10.   
  11. public class Client {  
  12.   
  13.    
  14.   
  15.     public static void main(String ...args){  
  16.   
  17.        User user = new User();  
  18.   
  19.        Session session = null;  
  20.   
  21.        Transaction tx = null;  
  22.   
  23.        try{  
  24.   
  25.            session = HibernateUtils.getSession();  
  26.   
  27.            tx = session.beginTransaction();  
  28.   
  29.              
  30.   
  31.            user.setAge(18);  
  32.   
  33.            user.setPassword("hello");  
  34.   
  35.            user.setSex('m');  
  36.   
  37.              
  38.   
  39.            session.save(user);  
  40.   
  41.            tx.commit();  
  42.   
  43.              
  44.   
  45.        }catch(Exception e){  
  46.   
  47.            e.printStackTrace();  
  48.   
  49.            tx.rollback();  
  50.   
  51.        }finally{  
  52.   
  53.            HibernateUtils.closeSession(session);  
  54.   
  55.        }  
  56.   
  57.          
  58.   
  59.          
  60.   
  61.     }  
  62.   
  63. }  

 

通过查询,我们可以看到插入的值。

posted @ 2012-08-31 11:17 Eric_jiang 阅读(952) | 评论 (0)编辑 收藏

版本:struts2.1.6

此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面。

代码如下:

一、页面

login.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>    
  6.     <title>yuewei'Login</title>   
  7.     <!-- 
  8.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  9.     -->  
  10.   </head>  
  11.     
  12.   <body>  
  13.   <form action="login.action" method="post">  
  14.   User:<input type="text" name="username"><br>  
  15.   Passoword:<input type="password" name="password"><br>  
  16.   <input type="submit" value="submit">  
  17.   </form>  
  18.      
  19. </body>  
  20. </html>  

welcome.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.      
  6.     <title> yuewei's Welcome</title>  
  7.       
  8.  <!-- 
  9.  <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  10.  -->  
  11.   
  12.   </head>  
  13.     
  14.   <body>  
  15.   <h1>登录成功后显示此页面</h1>  
  16.   <a href="show.action" mce_href="show.action">show</a>  
  17.   </body>  
  18. </html>  

show.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.       
  7.     <title>yuewei's Show</title>  
  8.       
  9.     <!-- 
  10.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  11.     -->  
  12.   
  13.   </head>  
  14.     
  15.   <body>  
  16.     Show This Page   
  17.         登录后执行此页面<br>  
  18.   </body>  
  19. </html>  

 

二、Action

LoginFormAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class LoginFormAction extends ActionSupport {  
  6.     public String exexcute() {  
  7.         return "success";  
  8.     }  
  9. }  

LoginAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. import com.ywjava.utils.Constants;  
  6.   
  7. public class LoginAction extends  ActionSupport{  
  8. private String username;  
  9. private String password;  
  10. public String getPassword() {  
  11.     return password;  
  12. }  
  13. public void setPassword(String password) {  
  14.     this.password = password;  
  15. }  
  16. public String getUsername() {  
  17.     return username;  
  18. }  
  19. public void setUsername(String username) {  
  20.     this.username = username;  
  21. }  
  22.   
  23. private boolean isInvalid(String value) {     
  24.     return (value == null || value.length() == 0);     
  25. }     
  26. public String execute(){  
  27.         System.out.println(username);  
  28.         System.out.println(password);  
  29.           
  30.          if (isInvalid(getUsername()))     
  31.                 return INPUT;     
  32.         
  33.             if (isInvalid(getPassword()))     
  34.                 return INPUT;     
  35.         
  36.   
  37.     if(this.getUsername().equals("yuewei")&& this.getPassword().equals("yuewei")){  
  38.         ActionContext.getContext().getSession().put(Constants.USER_SESSION,getUsername());  
  39.         ActionContext.getContext().getSession().put(Constants.PASS,getPassword());  
  40.         return "success";  
  41.     }  
  42.     return "error";  
  43. }  
  44. }  

ShowAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class ShowAction extends ActionSupport {  
  6.  public String execute() {  
  7.   return "success";  
  8.  }  
  9. }  

三、拦截器

  1. package com.ywjava.interceptot;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.opensymphony.xwork2.Action;  
  6. import com.opensymphony.xwork2.ActionContext;  
  7. import com.opensymphony.xwork2.ActionInvocation;  
  8. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  9. import com.ywjava.utils.Constants;  
  10.   
  11. public class LoginInterceptor extends AbstractInterceptor {  
  12.   
  13.     @Override  
  14.     public String intercept(ActionInvocation invocation) throws Exception {  
  15.   
  16.         // 取得请求相关的ActionContext实例  
  17.         ActionContext ctx = invocation.getInvocationContext();  
  18.         Map session = ctx.getSession();  
  19.         String user = (String) session.get(Constants.USER_SESSION);  
  20.   
  21.         // 如果没有登陆,或者登陆所有的用户名不是yuewei,都返回重新登陆  
  22.   
  23.         if (user != null && user.equals("yuewei")) {  
  24.             System.out.println("test");  
  25.             return invocation.invoke();  
  26.         }  
  27.   
  28.         ctx.put("tip", "你还没有登录");  
  29.         return Action.LOGIN;  
  30.   
  31.     }  
  32.   
  33. }  

四 struts.xml

[c-sharp] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <package name="authority" extends="struts-default">  
  7.       
  8.         <!-- 定义一个拦截器 -->  
  9.         <interceptors>  
  10.             <interceptor name="authority"  
  11.                 class="com.ywjava.interceptot.LoginInterceptor">  
  12.             </interceptor>  
  13.             <!-- 拦截器栈 -->  
  14.             <interceptor-stack name="mydefault">  
  15.                 <interceptor-ref name="defaultStack" />  
  16.                 <interceptor-ref name="authority" />  
  17.             </interceptor-stack>  
  18.         </interceptors>  
  19.   
  20.         <!-- 定义全局Result -->  
  21.         <global-results>  
  22.             <!-- 当返回login视图名时,转入/login.jsp页面 -->  
  23.             <result name="login">/login.jsp</result>  
  24.         </global-results>  
  25.   
  26.         <action name="loginform"  
  27.             class="com.ywjava.action.LoginFormAction">  
  28.             <result name="success">/login.jsp</result>  
  29.         </action>  
  30.           
  31.         <action name="login" class="com.ywjava.action.LoginAction">  
  32.             <result name="success">/welcome.jsp</result>  
  33.             <result name="error">/login.jsp</result>  
  34.             <result name="input">/login.jsp</result>  
  35.         </action>  
  36.   
  37.         <action name="show" class="com.ywjava.action.ShowAction">  
  38.             <result name="success">/show.jsp</result>  
  39.             <!-- 使用此拦截器 -->  
  40.             <interceptor-ref name="mydefault" />  
  41.         </action>  
  42.           
  43.     </package>  
  44. </struts> 
posted @ 2012-08-29 14:31 Eric_jiang 阅读(512) | 评论 (0)编辑 收藏

<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>

<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>

<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>

<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>

<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>

<li>访问值栈中action的普通方法:<s:property value="m()" /></li>

<hr />

<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>

<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>

<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>

<hr />

<li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>

<hr />

<li>访问List:<s:property value="users"/></li>

<li>访问List中某个元素:<s:property value="users[1]"/></li>

<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>

<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>

<li>访问Set:<s:property value="dogs"/></li>

<li>访问Set中某个元素:<s:property value="dogs[1]"/></li>

<li>访问Map:<s:property value="dogMap"/></li>

<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>

<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>

<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>

<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>

<hr />

<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>

<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>

<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>

<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>

<hr />

<li>[]:<s:property value="[0].username"/></li>
posted @ 2012-08-29 14:18 Eric_jiang 阅读(396) | 评论 (0)编辑 收藏

     摘要: 前面一段时间学过一些Struts2的知识,感觉Struts2和1.x还是有很大的差别的,我还不好说1.x肯定会过时还是2.0会很快流行,这毕竟是需要作为导向的。     在Struts2中验证真的比较容易,可以在Action中直接写validate,也可以使用validate框架进行验证,这个我觉得比Struts1.x方便了很多,但是有个问题一直困扰了我,直到现在有...  阅读全文
posted @ 2012-08-28 22:17 Eric_jiang 阅读(5254) | 评论 (2)编辑 收藏

修改ADCD.Z110.PARMLIB(PROGD9),添加以下(注D9根据LOADPARM不同也不同):
APF ADD
DSNAME(DSN910.ADSNLOAD) VOLUME(ZADB92)

LNKLST ADD NAME(LNKLST00) DSN(DSN910.DB9G.SDSNEXIT) VOLUME(ZADB91)
LNKLST ADD NAME(LNKLST00) DSN(DSN910.SDSNLOAD) VOLUME(ZADB91)
LNKLST ADD NAME(LNKLST00) DSN(DSN910.SDXRRESL) VOLUME(ZADB91)
LNKLST ADD NAME(LNKLST00) DSN(DSN910.ADSNLOAD) VOLUME(ZADB92)
修改并运行ADB720.SADBSAMP(ADBBIND)

重新开机!
posted @ 2012-08-14 09:45 Eric_jiang 阅读(513) | 评论 (0)编辑 收藏

CICS


ASRA  - This abend occured beacuse of invalid non numeric data

AICA  - A looping task has been terminated with this abend
        code by CICS because it was executing without giving
        up control longer than the time period specified by
        the ICVR keyword in the CICS SIT.                           

AEY9  - Invalid EXEC CICS command issued

AE**  - Most of the abends starts with AE, occures because
        they are not handled in the cics program.

 

RESP
VALUE
CONDITION ABEND

00 NORMAL
01 ERROR
02 RDATT
03 WRBRK
04 EOF
05 EODS
06 EOC
07 INBFMH
08 ENDINPT
09 NONVAL
10 NOSTART
11 TERMIDERR AEIK
12 FILENOTFOUND AEIL
13 NOTFND AEIM
14 DUPREC AEIN
15 DUPKEY
16 INVREQ AEIP
17 IOERR AEIQ
18 NOSPACE AEIR
19 NOTOPEN
20 ENDFILE
21 ILLOGIC AEIU
22 LENGERR AEIV
23 QZERO
24 SIGNAL
25 QBUSY
26 ITEMERR
27 PGMIDERR AEIO
28 TRANSIDERR AEI1
29 ENDDATA
30 INVTSREQ
31 EXPIRED
32 RETPAGE
33 RTEFAIL
34 RTESOME
35 TSIOERR
36 MAPFAIL
37 INVERRTERM
38 INVMPSZ
39 IGREQID
40 OVERFLOW
41 INVLDC
42 NOSTG
43 JIDERR AEYG
44 QIDERR AEYH
45 NOJBUFSP
46 DSSTAT
47 SELNERR
48 FUNCERR
49 UNEXPIN
50 NOPASSBKRD
51 NOPASSBKWR
52 -
53 SYSIDERR AEYQ
54 ISCINVREQ
55 ENQBUSY
56 ENVDEFERR
57 IGREQCD
58 SESSIONERR
59 SYSBUSY
60 SESSBUSY
61 NOTALLOC
62 CBIDERR
63 INVEXITREQ
64 INVPARTNSET
65 INVPARTN
66 PARTNFAIL
67 -
68 -
69 USERIDERR AEYX
70 NOTAUTH AEY7
71 VOLIDERR AEXV
72 SUPPRESSED
73 -
74 -
75 RESIDERR
76 -
77 -
78 -
79 -
80 NOSPOOL
81 TERMERR
82 ROLLEDBACK
83 END AEXK
84 DISABLED
85 ALLOCERR
86 STRELERR
87 OPENERR
88 SPOLBUSY
89 SPOLERR
90 NODEIDERR
91 TASKIDERR AEXX
92 TCIDERR AEXO
93 DSNNOTFOUND AEX1
94 LOADING
95 MODELIDERR AEX3
96 OUTDESCRERR
97 PARTNERIDERR AEX5
98 PROFILEIDERR AEX6
99 NETNAMEIDERR
255 NOTPOSS


JCL


S0CB  -   Attempting to divide by 0 and not using ON SIZE ERROR

S002  -   Very large record length/ wrong record length

Sx22  -   Job has been cancelled.  The value of x will vary depending on the way the job was 
              cancelled. S222 means job was cancelled by a user or operator without a dump. 
             If a TSO session times out you will probably get an S522 abend code.

              S222  -   The job was cancelled (by subsystem or operator) because it violated
             some restriction

              S522  -   JOB or TSO session exceeded  maximum job wait time  OR
                    operator did not mount the require tape within allowed time limit  

S806  -   Load module not found

S837  -   Space problem, Alloted space is not enough for data set

S913  -   You are trying to access a dataset which you are not authorized to use.

SOC7  -   1. Moving non-numeric value to numeric field
              2. Not initilizing the numeric variables before first use

SOC4  -   1. Index exceeds the size of table
              2. Trying to use File Section variables without opening the file

S0C1 -    Operation Exception. Check for subscript errors, missing DD card, file not opened.

SE37  -  Insufficient disk space.

U1026 -  COBOL sort failed.

U1056 -  Program didn't close a file before ending


DB2 

+100  ->  End of cursor                                                            

-180  ->  String representation of DATE, TTIME, TIMESTAMP is invalid                

-204  ->  Object not defined to DB2

-205  ->  Column name not in specified DB22 table

-206  ->  Column does not exist in any tabble in the SELECT

-551  ->  Not authorized to access DB2

-803  ->  Unquie index voilation. Try to iinsert duplicate record.

-805  ->  DBRM or PACKAGE not found in PLAAN

-811  ->  Cursor should be used , when morre than one row returned as an result
          of an singleton SELECT query

-818  ->  Timestamp mismatch between plan  and load module

VSAM
00   -  SUCCESSFUL COMPLETION

   02   -  DUPLICATE KEY, NON UNIQUE ALT INDEX

   04   -  READ, WRONG LENGTH RECORD 

   05   -  OPEN, FILE NOT PRESENT
  
   10   -  END OF FILE

   20   -  INVALID KEY VSAM KSDS OR RRDS

   21   -  SEQUENCE ERROR, ON WRITE OR CHANGING KEY ON REWRITE

   22   -  DUPLICATE KEY

   23   -  RECORD NOT FOUND - (when we are trying to access a record with key)
                 or
           FILE NOT FOUND


   35   -  OPEN, FILE NOT PRESENT
          
           When we will use this code in our program?
           There are situations where file should be read if exists, write if it does not
           when you dont know whether file exists are not , first you will open
           file in I-O mode and check status code. if it is 35 then open that
           file for output file. other wise you will continue with your logic
 

   41   -  OPEN, FILE IS OPEN 

   42   -  CLOSE, FILE IS CLOSED 

   43   -  DELETE OR REWRITE & NO GOOD READ FIRST

   46   -  SEQUENTIAL READ WITHOUT POSITIONING

   47   -  READING FILE NOT OPEN AS INPUT/IO/EXTEND

   48   -  WRITE WITHOUT OPEN IN IO MODE

   49   -  DELETE OR REWRITE WITHOUT OPEN IN IO MODE

   92   -  LOGIC ERROR/OPENING AN OPEN FILE 
                 OR READING OUTPUT FILE 
                 OR WRITE INPUT FILE 
                 OR DEL/REW BUT NO PRIOR READ

   94   -  SEQUENTIAL READ AFTER END OF FILE 
           OR NO CURRENT REC POINTER FOR SEQ 

   96   -  MISSING DD STATEMENT IN JCL 

   97  -  OPEN OK, FILE INTEGRITY VERIFIED

          When we will use this in our programs?
          We use this code whenever we open the file, if status code is 00 or 97
          we will proceed with our logic, other wise, call error routine.
          Usaully, it may come when file was not closed.
          for example

          IF WS-FILE-STATUS NOT = '00' AND '97'
             PERFORM ERROR-ROUTINE
          END-IF.
           


posted @ 2012-08-05 13:38 Eric_jiang 阅读(926) | 评论 (2)编辑 收藏

Mainframe z/os1.9 虚拟机中,在进入系统之后系统不会自动启动CICS和DB2,需要手动启动。
为了验证一下是否启动,首先进入SDSF中,输入/D A,L命令,查看是否有DB2和CICS项,如果没有,证明确实没有启动。
然后输入以下命令:

启动cics  /s cicsa

停止cics /c cicsa

启动数据库/-db9g start db2

停止数据库/-db9g stop db2

然后再次输入/D A,L命令,这时,出现了DB2与CICS条目,说明启动成功。


系统关闭

主控台

s shutdown

$pjes2

setrrs shutdown

posted @ 2012-08-05 11:13 Eric_jiang 阅读(615) | 评论 (2)编辑 收藏

A load library contains programs ready to be executed.
一个加载库存里面包含着那些准备被调用的程序。

A load library can be any of the following:
加载库可以是下面几种类型
  • System library 系统库
  • Private library 私有库
  • Temporary library. 临时库

System library 系统库

Unless a job or step specifies a private library, the system searches for a program in the system libraries when you code:
假如你没有在编码的时候指明一个私有库, 系统默认在系统库里面寻找这个程序进行调用。
//stepname
EXEC PGM=program-name

The system looks in the libraries for a member with a name or alias that is the same as the specified program-name. The most-used system library is SYS1.LINKLIB, which contains executable programs that have been processed by the linkage editor.
系统会根据你提供的程序的名字或者是别名寻找所需要的程序,而最常用的系统库是SYS1.LINKLIB,他包含了那些已经被连接和编译的程序。

Private library 私有库

Each executable, user-written program is a member of a private library. To tell the system that a program is in a private library, the DD statement defining that library can be coded in one of the following ways:
每一个可执行,用户自己编写的程序都是私有库的一个成员,要告诉系统怎么调用这个私有库的程序,可以使用DD语句,方式有如下几种:
  • With a DD statement with the ddname JOBLIB after the JOB statement, and before the first EXEC statement in the job.
    在EXEC语句的之前,JOB语句之后,用DD语句加上ddname 来编码
  • If the library is going to be used in only one step, with a DD statement with the ddname STEPLIB in the step.
    假如这个库只在一个作业步中使用,那么可以使用在这个作业部上用 DD语句加上ddname STEPLI 进行编码
To execute a program from a private library, code: 调用一个私有库的程序,编码如下
//stepname  EXEC  PGM=program-name

When you code JOBLIB or STEPLIB, the system searches for the program to be executed in the library defined by the JOBLIB or STEPLIB DD statement before searching in the system libraries.
当你编写了JOBLIB 或者 STEPLIB,那么系统就会优先搜索那些定义在JOBLIB或者STEPLIB的DD语句的库的同名程序进行调用,假如找不到,系统就会在系统库里面去找

If an earlier DD statement in the job defines the program as a member of a private library, refer to that DD statement to execute the program:
假如用DD语句在JOB的之前的定义了一个私有库,那么就可以用下面的这种方式调用之前定义了的库的程序。

//stepname
EXEC PGM=*.stepname.ddname

Private libraries are particularly useful for programs used too seldom to be needed in a system library. For example, programs that prepare quarterly sales tax reports are good candidates for a private library.
私有库在实际使用上是非常有用的,而系统库是很少被使用,例如,用于季度销售税报告的程序就是一个很好的例子。

Temporary library 临时库

Temporary libraries are partitioned data sets created to store a program until it is used in a later step of the same job. A temporary library is created and deleted within a job.

临时库是一个用于存储程序的分区数据集,这个数据集直到同名作业完成后被销毁,一个临时库是由一个作业来创建或者被删除。

When testing a newly written program, a temporary library is particularly useful for storing the load module from the linkage editor until it is executed by a later job step. Because the module will not be needed by other jobs until it is fully tested, it should not be stored in a private library or a system library.

In Figure 1, the LKED step creates a temporary library called &&LOADMOD on the SYSLMOD DD statement. In the GO step, we refer back to the same temporary data set by coding:

当我们在测试一个新编写的程序的时候,临时数据集十分有用,它用于存储来自于连接编辑器的加载模块直至被后面的作业步执行,因为这个模块在其他作业被测试完成时候就不需要了,因此,它不应该被存为私有库或者是系统库,在下面的图1中吗,LKED作业步就创建了一个叫做&&LOADMOD的临时库在名为SYSLMOD的DD语句中,在GO作业步中,我们就引用了这个临时库,代码如下 
//GO EXEC PGM=*.LKED.SYSLMOD,....
Figure 1. Compile, link-edit, and execute JCL
//USUAL     JOB  A2317P,'COMPLGO'
//ASM       EXEC PGM=IEV90,REGION=256K,                   EXECUTES ASSEMBLER
//          PARM=(OBJECT,NODECK,'LINECOUNT=50')
//SYSPRINT  DD   SYSOUT=*,DCB=BLKSIZE=3509                PRINT THE ASSEMBLY LISTING
//SYSPUNCH  DD   SYSOUT=B                                 PUNCH THE ASSEMBLY LISTING
//SYSLIB    DD   DSNAME=SYS1.MACLIB,DISP=SHR THE MACRO LIBRARY
//SYSUT1    DD   DSNAME=&&SYSUT1,UNIT=SYSDA,              A WORK DATA SET
//          SPACE=(CYL,(10,1))
//SYSLIN    DD   DSNAME=&&OBJECT,UNIT=SYSDA,              THE OUTPUT OBJECT DECK
//          SPACE=(TRK,(10,2)),DCB=BLKSIZE=3120,DISP=(,PASS)
//SYSIN     DD    *                                       inline SOURCE CODE
                                           .
                                           .
                                           code
                                           .
/*
//LKED      EXEC PGM=HEWL,                                 EXECUTES LINKAGE EDITOR
//          PARM='XREF,LIST,LET',COND=(8,LE,ASM)
//SYSPRINT  DD   SYSOUT=*                                  LINKEDIT MAP PRINTOUT
//SYSLIN    DD   DSNAME=&&OBJECT,DISP=(OLD,DELETE)         INPUT OBJECT DECK
//SYSUT1    DD   DSNAME=&&SYSUT1,UNIT=SYSDA,               A WORK DATA SET
//          SPACE=(CYL,(10,1))
//SYSLMOD   DD   DSNAME=&&LOADMOD,UNIT=SYSDA,              THE OUTPUT LOAD MODULE
//          DISP=(MOD,PASS),SPACE=(1024,(50,20,1))
//GO        EXEC PGM=*.LKED.SYSLMOD,TIME=(,30),            EXECUTES THE PROGRAM
//          COND=((8,LE,ASM),(8,LE,LKED))
//SYSUDUMP  DD   SYSOUT=*                                  IF FAILS, DUMP LISTING
//SYSPRINT  DD   SYSOUT=*,                                 OUTPUT LISTING
//          DCB=(RECFM=FBA,LRECL=121)
//OUTPUT    DD   SYSOUT=A,                                 PROGRAM DATA OUTPUT
//          DCB=(LRECL=100,BLKSIZE=3000,RECFM=FBA)
//INPUT     DD    *                                        PROGRAM DATA INPUT
                 .
                 .
                 data
                 .
/*
//
posted @ 2012-08-04 15:38 Eric_jiang 阅读(258) | 评论 (0)编辑 收藏

Quick Start on IKJEFT01 Utility
1) Unload data using DB2 Utility IKJEFT01
2) DB2 BIND using IKJEFT01 Utility
3) Executing DB2 program using IKJEFT01 Utitlity.
1) IKJEFT01 can be used to extract data from db2 tables.
as shown below.
JCL to extract data from db2 tables using IKJEFT01 Utility.
//STEP002  EXEC PGM=IKJEFT01,
            //             DYNAMNBR=20,COND=(0,NE)
            //STEPLIB  DD  DISP=SHR,
            //             DSN=SYS.DB2.XXX.RUNXX.LOAD
            //         DD  DISP=SHR,
            //             DSN=SYS.DB2.XXX.SDSNEXIT
            //         DD  DISP=SHR,
            //             DSN=SYS.DB2.XXX.SDSNLOAD
            //SYSIN    DD  *
            SELECT  *
            FROM EMP_TABLE
            WITH UR;
            //*
            //SYSTSIN  DD  *
            DSN SYSTEM(XXX) RETRY(20)
            RUN PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARMS('SQL') -
            LIB ('SYS.DB2.XXX.RUNXX.LOAD')
            END
            /*
            //***UNLOAD FILE
            //SYSREC00 DD  DISP=(NEW,CATLG,DELETE),
            //             DSN=DEV.UNLOAD.FILE,
            //             UNIT=SYSDA,SPACE=(CYL,(50,50),RLSE)
            //*
            //***TABLE STRUCTURE
            //SYSPUNCH DD  DUMMY
            //*
            //SYSTSPRT DD  SYSOUT=*
            //SYSPRINT DD  SYSOUT=*
            //SYSUDUMP DD  SYSOUT=*
            
2) Using IKJEFT01 utility for DB2 BIND Sample JCL to DB2 BIND
//*  DB2 BIND JCL
            //*
            //BIND     EXEC PGM=IKJEFT01,
            //             COND=(4,LT),
            //             REGION=4096K
            //STEPLIB  DD  DISP=SHR,
            //             DSN=XXX4.DB2.XXXX.XXXXLOAD
            //DBRMLIB  DD  DISP=SHR,
            //             DSN=DEV.SURESH.DBRM(DB2PROG)    <---------------  (1)
            //SYSPRINT DD  SYSOUT=*
            //SYSTSPRT DD  SYSOUT=*
            //SYSUDUMP DD  SYSOUT=*
            //SYSTSIN  DD  *
            DSN SYSTEM (DEVDB )
            BIND  MEMBER    (DB2PROG) -
            PACKAGE   (PACKG11) -
            LIBRARY   ('DEV.SURESH.DBRM') -         <---------------- (2)
            ACTION    (REP) -
            ISOLATION (CS) -
            VALIDATE  (BIND)-
            RELEASE   (COMMIT) -
            OWNER     (SURESH) -
            QUALIFIER (DEVQUALI)
            END
            /*
            
(1) & (2) - specify the location of DBRM.
It is a part of cobol db2 compile jcl.. Refer below
***************************************


//DB2COMP (XXX,XXX),'COMPILE JCL',                           
//             CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID                     
//********************************************************************
//* COMPILATION, LINK EDIT AND THE BIND STEP FOR A COBOL DB2 PROGRAM *
//* WILL BE DONE BY SUBMITTING THIS JOB.                             *
//* THE DB2 REGIONS AND CORRESPONDING PARAMETERS NEEDS TO BE CHANGED *
//* WITH RESPECT TO THE PROGRAM                                      *
//********************************************************************
//*                 PRECOMPILE DB2 PROGRAM                           *
//*--------------  LOCATION OF DBRM LIBRARY -------------------------*
//********************************************************************
//PC       EXEC PGM=DSNHPC,                                          
//             PARM='HOST(COB2),APOST,SOURCE',                       
//             REGION=4096K                                          
//DBRMLIB  DD  DISP=SHR,                                             
//             DSN=DEV.SURESH.DBRM(DB2PROG)    <------------------------ (1)                   
//STEPLIB  DD  DISP=SHR,                                             
//             DSN=SYSX.DB2.XXX.XXXXX 
//******************************************************************** 
//*SYSIN -----------INPUT COBOL DB2 PROGRAM LOCATION-----------------* 
//******************************************************************** 
//SYSIN    DD  DISP=SHR,                                               
//             DSN=DEV.SURESH.SRC(DB2PROG)     <----------------------  (2)                     
//SYSCIN   DD  DISP=(MOD,PASS),                                        
//             DSN=&&TEMP,                                          
//             SPACE=(800,(500,500)),                                  
//             UNIT=SYSDA                                              
//******************************************************************** 
//*                          DCLGEN MEMBER LOCATION                  * 
//*SYSLIB-----------------INPUT SOURCE LIBRARY FOR SQL---------------* 
//******************************************************************** 
//SYSLIB   DD  DISP=SHR,                                               
//             DSN=DEV.SURESH.DCL               <---------------------- (3)                        
//         DD  DISP=SHR,                                              
//             DSN=DEV.SURESH.CPY                             
//SYSPRINT DD  SYSOUT=T                                               
//SYSTERM  DD  SYSOUT=T                                               
//SYSUDUMP DD  SYSOUT=*                                               
//SYSUT1   DD  SPACE=(800,(500,500),,,ROUND),                         
//             UNIT=SYSDA                                             
//SYSUT2   DD  SPACE=(800,(500,500),,,ROUND),                         
//             UNIT=SYSDA                                             
//*                                                                   
//********************************************************************
//*                         COMPILATION                              *
//********************************************************************
//*                                                                   
//COB      EXEC PGM=IGYCRCTL,                                         
//             COND=(4,LT,PC),                                        
//             PARM=('SIZE(4000K),BUFSIZE(32760),LIST,LIB,MAP,OBJECT',
//             'DATA(31),XREF,RENT'),                                 
//             REGION=4M
//STEPLIB  DD  DISP=SHR,                                              
//             DSN=XXXX.XXXXXX                                      
//SYSIN    DD  DISP=(OLD,DELETE),                                     
//             DSN=&&TEMP                                          
//SYSLIN   DD  DISP=(MOD,PASS),                                       
//             DSN=&&LOADTMP,                                         
//             SPACE=(800,(500,500)),                                 
//             UNIT=SYSDA                                             
//********************************************************************
//*--------------SOURCE LIBRARIES FOR COBOL DB2 CODE (COPY LIBRARIES)*
//********************************************************************
//SYSLIB   DD  DISP=SHR,                                              
//             DSN=DEV.SURESH.DCL              <-----------------  (4)
//         DD  DSN=DEV.SURESH.CPY,DISP=SHR
//SYSPRINT DD  SYSOUT=*                                              
//SYSUDUMP DD  SYSOUT=*                                              
//SYSUT1   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT2   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT3   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT4   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT5   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT6   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//SYSUT7   DD  SPACE=(800,(500,500),,,ROUND),                        
//             UNIT=SYSDA                                            
//*                                                                  
//*                                                                    
//******************************************************************** 
//*                         LINK EDIT                                * 
//******************************************************************** 
//*                                                                    
//LKED     EXEC PGM=IEWL,                                              
//             COND=((4,LT,COB),(4,LT,PC)),                            
//             PARM='XREF'                                             
//SYSLIB   DD  DISP=SHR,                                               
//             DSN=SXXX.SXXXXXXX                                       
//         DD  DISP=SHR,                                               
//             DSN=XXXX.DB2.XXX.XXXXLOAD                              
//         DD  DISP=SHR,                                               
//             DSN=SYS1.VSCLLIB                                        
//SYSLIN   DD  DISP=(OLD,DELETE),                                      
//             DSN=&&LOADTMP                                          
//*        DD  DDNAME=SYSIN                                            
//******************************************************************** 
//*----------------LOCATION OF LOAD LIBRARY--------------------------* 

//SYSLMOD  DD  DISP=SHR,                                               
//             DSN=DEV.SURESH.LOADLIB(DB2PROG)    <------------  (5)                  
//SYSPRINT DD  SYSOUT=*                                                
//SYSUDUMP DD  SYSOUT=*                                                
//SYSUT1   DD  SPACE=(1024,(50,50)),                                   
//             UNIT=SYSDA                                              
//*                                                                    
//******************************************************************** 
//*               BIND - BIND THE DB2 PACKAGE                        * 
//******************************************************************** 
//BIND     EXEC PGM=IKJEFT01,                                          
//             COND=(4,LT),                                            
//             REGION=4096K                                            
//STEPLIB  DD  DISP=SHR,                                               
//             DSN=XXX4.DB2.XXXX.XXXXLOAD                              
//DBRMLIB  DD  DISP=SHR,                                               
//             DSN=DEV.SURESH.DBRM(DB2PROG)    <---------------  (6)       
//SYSPRINT DD  SYSOUT=*                                                
//SYSTSPRT DD  SYSOUT=*                                                
//SYSUDUMP DD  SYSOUT=*                                                
//SYSTSIN  DD  *                                                       
DSN SYSTEM (DEVDB )                                                      
BIND  MEMBER    (DB2PROG) -                                            
      PACKAGE   (PACKG11) -                                           
      LIBRARY   ('DEV.SURESH.DBRM') -         <---------------- (7)                       
      ACTION    (REP) -                                                
      ISOLATION (CS) -                                                 
      VALIDATE  (BIND)-                                                
      RELEASE   (COMMIT) -    
      OWNER     (SURESH) -                                            
      QUALIFIER (DEVQUALI)                                              
END                                                                    
/*                                                                     
**************************** Bottom of Data ****************************


(1)  -  When we precompiled, precompiler will create the DBRM, it will
        be placed in the pds specified here.

(2)  -  Location of COBOL-DB2 program

(3)  -  Needs to speficiy DCLGEN member locations

(4)  -  Needs to specify DCLGEN and COPYBOOK locations here

(5)  -  Load module location, load module will be created here. this
        location needs to be given in run jcl.

(5) & (6) - specify the location of DBRM, ( same location used in step1 ).

 


***************************************




3) Using IKJEFT01 utility for executing cobol db2 program. Sample JCL to execute IKJEFT01 utility to run COBOL DB2 program.
//** COBOL DB2 RUN JCL
            //STEP01 EXEC PGM=IKJEFT01,
            //         DYNAMNBR=20
            //*
            //STEPLIB  DD  DISP=SHR,
            //             DSN=SYSL.DB2.DEV.XXXXLOAD
            //         DD  DISP=SHR,
            //             DSN=SYSL.DB2.DEV.XXXXYYYY
            //*
            //SYSTSPRT DD  SYSOUT=*
            //SYSTSIN  DD  *
            DSN SYSTEM(DEVDB)
            RUN PROGRAM(DB2PROG)              -
            PLAN(PLAN11111)                      -
            LIBRARY('DEV.SURESH.LOADLIB')
            END
            /*
            //SYSOUT   DD  SYSOUT=*
            //SYSIN    DD  *
            //*
            //* COBOL DB2 RUN JCL ENDS
            
posted @ 2012-07-23 10:28 Eric_jiang 阅读(847) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 27 28 29 30 31 32 33 34 35 下一页 Last