Previous Topic Next topic Print topic


CICS Program Call with Channels and Containers

Sample EJB accessing the WebSphere 8.5 or JBoss 7.1 CICS resource adapter using Channel with extended LUW.
Note: To enable SSL, include the SSL code snippet shown in bold in the CICS Program Call with Commarea Using SSL sample.
File Container.java:
package com.mypackage.channelEJB ;

public class Container extends com.microfocus.cics.connector.cci.MFECICustomRecord {

    private static String EMPTY_STRING = "";
    private java.lang.String containerData = EMPTY_STRING;

    public Container() {
    }

    public java.lang.String getContainerData() {
        return containerData;
    }

    public void setContainerData(java.lang.String ___p) {
        containerData = ___p ;
    }


    public Object[] getParameters() {        Object[] objs = new Object[1];

        objs[0] = containerData;
        return objs;
    }

    public void setParameters(Object[] objs) {
        containerData = (java.lang.String) objs[0];
    }

}
File Channel.java:
package com.mypackage.channelEJB ;

public class Channel extends com.microfocus.cics.connector.cci.MFECICustomRecord {

    private static String EMPTY_STRING = "";
    private Container2 container2;
    private Container1 container1;

    public class Container2 extends com.microfocus.cics.connector.cci.MFECICustomRecord {

        private java.lang.String containerData = EMPTY_STRING;

        public Container2() {
        }

        public java.lang.String getContainerData() {
            return containerData;
        }

        public void setContainerData(java.lang.String ___p) {
            containerData = ___p ;
        }


        public Object[] getParameters() {
            Object[] objs = new Object[1];
            objs[0] = containerData;
            return objs;
        }

        public void setParameters(Object[] objs) {
            containerData = (java.lang.String) objs[0];
        }

    }
    public class Container1 extends com.microfocus.cics.connector.cci.MFECICustomRecord {

        private java.lang.String containerData = EMPTY_STRING;

        public Container1() {
        }

        public java.lang.String getContainerData() {
            return containerData;
        }

        public void setContainerData(java.lang.String ___p) {
            containerData = ___p ;
        }


        public Object[] getParameters() {
            Object[] objs = new Object[1];
            objs[0] = containerData;
            return objs;
        }

        public void setParameters(Object[] objs) {
            containerData = (java.lang.String) objs[0];
        }

    }
    public Channel() {
        container2 = new Container2();
        container1 = new Container1();
    }

    public Container2 getContainer2() {
        return container2;
    }

    public void setContainer2(Container2 ___p) {
        container2 = ___p ;
    }

    public Container1 getContainer1() {
        return container1;
    }

    public void setContainer1(Container1 ___p) {
        container1 = ___p ;
    }


    public Object[] getParameters() {        Object[] objs = new Object[2];

        objs[0] = container2;
        objs[1] = container1;
        return objs;
    }

    public void setParameters(Object[] objs) {
        container2.setParameters(((Container2)objs[0]).getParameters());
        container1.setParameters(((Container1)objs[1]).getParameters());
    }

}
File ChannelEJB.java:
package com.mypackage.channelEJB ;


import javax.ejb.Remote;
import javax.ejb.EJBException;

@Remote
public interface ChannelEJB {
    public com.mypackage.channelEJB.Channel First(com.mypackage.channelEJB.Channel channel);
    public int getCobolReturnCode();
    public void removeSF() throws EJBException;
    public void passivate() throws EJBException;
    public void activate() throws EJBException;
}
WebSphere 8.5 - File ChannelEJBBean.java:
package com.mypackage.channelEJB ;

import javax.ejb.Stateless;
import javax.ejb.Stateful;
import javax.ejb.EJB;
import javax.ejb.Init;
import javax.ejb.Remove;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.EJBException;
import javax.annotation.Resource;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.Remote;
import com.microfocus.cics.connector.ccl.CCLExtendMode;
import com.microfocus.cics.connector.ccl.CCLChannel;
import com.microfocus.cics.connector.ccl.CCLContainer;
import com.microfocus.cics.connector.ccl.ContainerData;
import com.microfocus.cics.connector.ccl.AbendException;
import com.microfocus.cics.connector.ccl.AbendCodeType;

import java.util.List;

@Stateful(name="channelEJB", mappedName="ejb/channelEJB")
@Remote(com.mypackage.channelEJB.ChannelEJB.class)

public class ChannelEJBBean implements ChannelEJB, java.io.Serializable {

     @Resource (name="CCIMFCICS_v1.5", authenticationType=Resource.AuthenticationType.CONTAINER, shareable=false)
    private transient javax.resource.cci.ConnectionFactory cf;
    private boolean disposed = false;
    private String sessionId = null;
    private transient javax.resource.cci.Connection lastConnectionHandle = null;
    private boolean doInitialize = true;
    public static final int DEFAULT_COBOL_RETURN_CODE = 2147483647;
    private int cobolReturnCode = DEFAULT_COBOL_RETURN_CODE;
    com.microfocus.cics.connector.cci.MFECIInteractionSpec interactionSpec = new com.microfocus.cics.connector.cci.MFECIInteractionSpec();

    public javax.resource.cci.ConnectionFactory getConnectionFactory() {
          return cf ;
    }

    @PostConstruct
    public void create() {           
	    disposed = false;
            sessionId = null;
	    interactionSpec.setFunctionName("CASA_ECI_Function");
            interactionSpec.setArgument(0, com.microfocus.cobol.lang.Pointer.class,
		        	 com.microfocus.cobol.RuntimeProperties.OUTPUT_ONLY);
            interactionSpec.setArgument(1, com.microfocus.cobol.lang.Pointer.class,
		        	com.microfocus.cobol.RuntimeProperties.BY_VALUE);
	    interactionSpec.setUserName("SYSAD");
            interactionSpec.setPassword("SYSAD");
	    interactionSpec.setProgramName("EC03");
    }


     @TransactionAttribute(TransactionAttributeType.NEVER)
    public com.mypackage.channelEJB.Channel First(com.mypackage.channelEJB.Channel channel) throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();

	    interactionSpec.setExtendMode(CCLExtendMode.CCL_EXTENDED);
            ix = con.createInteraction();
	    
            CCLChannel cclChannel = new CCLChannel("GenChannel");
	    CCLContainer cclContainer1 = new CCLContainer("GenCon1");
	    CCLContainer cclContainer2 = new CCLContainer("GenCon2");
	    byte[] cData1 = channel.getContainer1().getContainerData().getBytes();
	    byte[] cData2 = channel.getContainer2().getContainerData().getBytes();
	    ContainerData cd1 = new ContainerData(cData1);
            ContainerData cd2 = new ContainerData(cData2);
	    cclContainer1.setContainerData(cd1);
            cclContainer2.setContainerData(cd2);
            cclChannel.addContainer(cclContainer1);
            cclChannel.addContainer(cclContainer2);
	    interactionSpec.setChannel(cclChannel);
            rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();	    
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
            CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;
		    

        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        }
        finally {
            closeCobolConnection(con);
            ix = null; rf = null;
        }
    }

        @TransactionAttribute(TransactionAttributeType.NEVER)
    public  com.mypackage.channelEJB.Channel commit() throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();
	    interactionSpec.setExtendMode(CCLExtendMode.CCL_COMMIT);
	    rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();	    
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
            CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;
        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        }
        finally {
            closeCobolConnection(con);
            interactionSpec = null; ix = null; rf = null;
        }
    }

             @TransactionAttribute(TransactionAttributeType.NEVER)
    public  com.mypackage.channelEJB.Channel rollback() throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();
	    interactionSpec.setExtendMode(CCLExtendMode.CCL_BACKOUT);
            rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
             CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;

        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } 
        finally {
            closeCobolConnection(con);
            interactionSpec = null; ix = null; rf = null;
        }
    }

    @Remove
    public void removeSF() {
            cleanup();
    }

    void cleanup() throws javax.ejb.EJBException {
       try {
            if(!disposed) {
                if(lastConnectionHandle != null) {
                  com.microfocus.cics.connector.cci.MFECIConnection.dispose(sessionId);
                  closeCobolConnection(lastConnectionHandle);
                }
                else {
                  com.microfocus.cics.connector.cci.MFECIConnection.dispose(sessionId);
                }
              disposed = true ;
            }
       } catch(javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("Error disposing a Cobol Connection: ", ex);
       }
       finally {
           lastConnectionHandle = null;
           cf = null;
       }
    }

    public int getCobolReturnCode() throws javax.ejb.EJBException {
         return cobolReturnCode;
    }

    @PrePassivate
    public void passivate() throws javax.ejb.EJBException {
    }

    @PostActivate
    public void activate() throws javax.ejb.EJBException {
    }

    private void initialize(boolean isInitial, javax.resource.cci.Connection con) throws javax.ejb.EJBException {
        try {
            javax.resource.cci.Interaction ix = con.createInteraction();
            com.microfocus.cics.connector.cci.MFECIInteractionSpec interactionSpec = new com.microfocus.cics.connector.cci.MFECIInteractionSpec();
            interactionSpec.setFunctionName("initialize");
            javax.resource.cci.RecordFactory rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord irec = rf.createIndexedRecord("beanArgs");
            irec.add(new Boolean(isInitial));
            javax.resource.cci.Record orec = ix.execute(interactionSpec, irec);
            ix.close();
            rf = null ; ix = null ; interactionSpec = null ; irec = null ;
        } catch(javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("initialize threw ResourceException: ", ex);
        }
    }

    private javax.resource.cci.Connection getCobolConnection() throws javax.ejb.EJBException {


    //SSL
        try {
           con.setTrustStoreName("C:/test/estrustStore.jks");
           con.setTrustStorePassword("srvrootpwd");
        } catch (Exception e) {
            throw new javax.ejb.EJBException(e); 
        }  



            com.microfocus.cics.connector.cci.MFECIConnection con = null;
        try {
            con = (com.microfocus.cics.connector.cci.MFECIConnection) cf.getConnection(new com.microfocus.cics.connector.cci.MFECIConnectionSpec(true, true, sessionId));
            lastConnectionHandle = con; 

        } catch (javax.resource.ResourceException ex) {
             throw new javax.ejb.EJBException("Error getting a Cobol Connection: ", ex);
        }
        return con ;
    }

    private void closeCobolConnection(javax.resource.cci.Connection con) throws javax.ejb.EJBException {
        try {
            if(con != null) {
             if(sessionId == null) {
                 sessionId = ((com.microfocus.cics.connector.cci.MFECIConnection)con).getSessionId();
             }
              con.close();
            }
        } catch (javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("Error closing a Cobol Connection: ", ex);
        }
    }
}
JBoss 7.1 - File ChannelEJBBean.java:
package com.mypackage.channelEJB ;

import javax.ejb.Stateless;
import javax.ejb.Stateful;
import javax.ejb.EJB;
import javax.ejb.Init;
import javax.ejb.Remove;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.EJBException;
import javax.annotation.Resource;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.Remote;
import com.microfocus.cics.connector.ccl.CCLExtendMode;
import com.microfocus.cics.connector.ccl.CCLChannel;
import com.microfocus.cics.connector.ccl.CCLContainer;
import com.microfocus.cics.connector.ccl.ContainerData;
import com.microfocus.cics.connector.ccl.AbendException;
import com.microfocus.cics.connector.ccl.AbendCodeType;

import java.util.List;

@Stateful(name="channelEJB", mappedName="ejb/channelEJB")
@Remote(com.mypackage.channelEJB.ChannelEJB.class)

public class ChannelEJBBean implements ChannelEJB, java.io.Serializable {

     @Resource (name="CCIMFCICS_v1.5", authenticationType=Resource.AuthenticationType.CONTAINER, shareable=false, mappedName="java:/eis/MFCICS_v1.5")
    private transient javax.resource.cci.ConnectionFactory cf;
    private boolean disposed = false;
    private String sessionId = null;
    private transient javax.resource.cci.Connection lastConnectionHandle = null;
    private boolean doInitialize = true;
    public static final int DEFAULT_COBOL_RETURN_CODE = 2147483647;
    private int cobolReturnCode = DEFAULT_COBOL_RETURN_CODE;
    com.microfocus.cics.connector.cci.MFECIInteractionSpec interactionSpec = new com.microfocus.cics.connector.cci.MFECIInteractionSpec();

    public javax.resource.cci.ConnectionFactory getConnectionFactory() {
          return cf ;
    }

    @PostConstruct
    public void create() {           
	    disposed = false;
            sessionId = null;
	    interactionSpec.setFunctionName("CASA_ECI_Function");
            interactionSpec.setArgument(0, com.microfocus.cobol.lang.Pointer.class,
		        	 com.microfocus.cobol.RuntimeProperties.OUTPUT_ONLY);
            interactionSpec.setArgument(1, com.microfocus.cobol.lang.Pointer.class,
		        	com.microfocus.cobol.RuntimeProperties.BY_VALUE);
	    interactionSpec.setUserName("SYSAD");
            interactionSpec.setPassword("SYSAD");
	    interactionSpec.setProgramName("EC03");
    }


     @TransactionAttribute(TransactionAttributeType.NEVER)
    public com.mypackage.channelEJB.Channel First(com.mypackage.channelEJB.Channel channel) throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();

	    interactionSpec.setExtendMode(CCLExtendMode.CCL_EXTENDED);
            ix = con.createInteraction();
	    
            CCLChannel cclChannel = new CCLChannel("GenChannel");
	    CCLContainer cclContainer1 = new CCLContainer("GenCon1");
	    CCLContainer cclContainer2 = new CCLContainer("GenCon2");
	    byte[] cData1 = channel.getContainer1().getContainerData().getBytes();
	    byte[] cData2 = channel.getContainer2().getContainerData().getBytes();
	    ContainerData cd1 = new ContainerData(cData1);
            ContainerData cd2 = new ContainerData(cData2);
	    cclContainer1.setContainerData(cd1);
            cclContainer2.setContainerData(cd2);
            cclChannel.addContainer(cclContainer1);
            cclChannel.addContainer(cclContainer2);
	    interactionSpec.setChannel(cclChannel);
            rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();	    
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
            CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;
		    

        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        }
        finally {
            closeCobolConnection(con);
            ix = null; rf = null;
        }
    }

        @TransactionAttribute(TransactionAttributeType.NEVER)
    public  com.mypackage.channelEJB.Channel commit() throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();
	    interactionSpec.setExtendMode(CCLExtendMode.CCL_COMMIT);
	    rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();	    
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
            CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;
        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        }
        finally {
            closeCobolConnection(con);
            interactionSpec = null; ix = null; rf = null;
        }
    }

             @TransactionAttribute(TransactionAttributeType.NEVER)
    public  com.mypackage.channelEJB.Channel rollback() throws javax.ejb.EJBException {
        javax.resource.cci.Connection con = null;
        disposed = false;
        con = getCobolConnection();
        javax.resource.cci.RecordFactory rf = null;
        javax.resource.cci.Interaction ix = null;
        try {
            if(doInitialize) {
                initialize(false, con);
                doInitialize = false;
            }
            ix = con.createInteraction();
	    interactionSpec.setExtendMode(CCLExtendMode.CCL_BACKOUT);
            rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord iRec = interactionSpec.getInputRecord();
            javax.resource.cci.IndexedRecord oRec = rf.createIndexedRecord("FirstOut");
            ix.execute(interactionSpec, iRec, oRec);
            ix.close();
            cobolReturnCode = interactionSpec.getReturnCode();
             CCLChannel returnChannel = interactionSpec.getReturnChannel();
	    com.mypackage.channelEJB.Channel retFromEJBChannel = new com.mypackage.channelEJB.Channel();
	    if(returnChannel != null) {
		    List<CCLContainer> containers = returnChannel.getContainers();
		    int count = 0;
		    for(CCLContainer container: containers) {
                        if(count == 0) {
				retFromEJBChannel.getContainer1().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
			if(count == 1) {
				retFromEJBChannel.getContainer2().setContainerData(new String(container.getContainerData().getContainerData()));
				count++;
			}
	            }
	    }
	    return retFromEJBChannel;

        } catch(javax.resource.ResourceException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
	    Exception linkedEx = __ex.getLinkedException();
	    if(linkedEx instanceof AbendException) {
		AbendException aex = (AbendException) linkedEx;    
		System.out.println("AbendCode = " + aex.getAbendCode());
		System.out.println("Abend Code Type = " + aex.getAbendCodeType());
	    }
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } catch(java.io.UnsupportedEncodingException __ex) {
            cobolReturnCode = interactionSpec.getReturnCode();
            throw new javax.ejb.EJBException("First threw a resource Exception", __ex);
        } 
        finally {
            closeCobolConnection(con);
            interactionSpec = null; ix = null; rf = null;
        }
    }

    @Remove
    public void removeSF() {
            cleanup();
    }

    void cleanup() throws javax.ejb.EJBException {
       try {
            if(!disposed) {
                if(lastConnectionHandle != null) {
                  com.microfocus.cics.connector.cci.MFECIConnection.dispose(sessionId);
                  closeCobolConnection(lastConnectionHandle);
                }
                else {
                  com.microfocus.cics.connector.cci.MFECIConnection.dispose(sessionId);
                }
              disposed = true ;
            }
       } catch(javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("Error disposing a Cobol Connection: ", ex);
       }
       finally {
           lastConnectionHandle = null;
           cf = null;
       }
    }

    public int getCobolReturnCode() throws javax.ejb.EJBException {
         return cobolReturnCode;
    }

    @PrePassivate
    public void passivate() throws javax.ejb.EJBException {
    }

    @PostActivate
    public void activate() throws javax.ejb.EJBException {
    }

    private void initialize(boolean isInitial, javax.resource.cci.Connection con) throws javax.ejb.EJBException {
        try {
            javax.resource.cci.Interaction ix = con.createInteraction();
            com.microfocus.cics.connector.cci.MFECIInteractionSpec interactionSpec = new com.microfocus.cics.connector.cci.MFECIInteractionSpec();
            interactionSpec.setFunctionName("initialize");
            javax.resource.cci.RecordFactory rf = cf.getRecordFactory();
            javax.resource.cci.IndexedRecord irec = rf.createIndexedRecord("beanArgs");
            irec.add(new Boolean(isInitial));
            javax.resource.cci.Record orec = ix.execute(interactionSpec, irec);
            ix.close();
            rf = null ; ix = null ; interactionSpec = null ; irec = null ;
        } catch(javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("initialize threw ResourceException: ", ex);
        }
    }

    private javax.resource.cci.Connection getCobolConnection() throws javax.ejb.EJBException {


    //SSL
        try {
           con.setTrustStoreName("C:/test/estrustStore.jks");
           con.setTrustStorePassword("srvrootpwd");
        } catch (Exception e) {
            throw new javax.ejb.EJBException(e); 
        }  



            com.microfocus.cics.connector.cci.MFECIConnection con = null;
        try {
            con = (com.microfocus.cics.connector.cci.MFECIConnection) cf.getConnection(new com.microfocus.cics.connector.cci.MFECIConnectionSpec(true, true, sessionId));
            lastConnectionHandle = con; 

        } catch (javax.resource.ResourceException ex) {
             throw new javax.ejb.EJBException("Error getting a Cobol Connection: ", ex);
        }
        return con ;
    }

    private void closeCobolConnection(javax.resource.cci.Connection con) throws javax.ejb.EJBException {
        try {
            if(con != null) {
             if(sessionId == null) {
                 sessionId = ((com.microfocus.cics.connector.cci.MFECIConnection)con).getSessionId();
             }
              con.close();
            }
        } catch (javax.resource.ResourceException ex) {
            throw new javax.ejb.EJBException("Error closing a Cobol Connection: ", ex);
        }
    }
}
Previous Topic Next topic Print topic