1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pessimistic lock on NW ABAP from Java via JCo

Posted at

I've checked SAP NetWeaver ABAP's pessimistic lock using stateful/stateless call from Java via JCo(SAP Java Connector). When

Development Environment

  • IDE: Eclipse(Oxygen.2 Release (4.7.2))
  • JDK: Oracle JDK 1.8.0_152(not SAP JDK)
  • JCo: SAP Java Connector 3.0.17

A lock object on NW ABAP AS

Copied a SAP lock object "EBU_PARTNER". Just changed "Allow RFC".

20.LockObject.JPG

Stateful Call

After calling lock module, there is a sleep time on java and I checked the lock is active.

StatefulLock.java
package test00;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
 
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoContext;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.JCoFunction;
 
public class StatefulLock {

    static String ABAP_AS = "ABAP_AS_WITHOUT_POOL_RSM";

//  SAP system information
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "XXX"); //host name
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "100");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "fukuhara");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXX"); //password
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
        createDataFile(ABAP_AS, "jcoDestination", connectProperties);
    }    

//  Create SAP system property file
    static void createDataFile(String name, String suffix, Properties properties)
    {
        File cfg = new File(name+"."+suffix);
        if(!cfg.exists())
        {
            try
            {
                FileOutputStream fos = new FileOutputStream(cfg, false);
                properties.store(fos, "for tests only !");
                fos.close();
            }
            catch (Exception e)
            {
                throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
            }
        }
    }
    
    public static void step3SimpleCall() throws JCoException
    {
    	// Set Destination
        JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);
        
        // Set lock function module
        JCoFunction function = destination.getRepository().getFunction("ENQUEUE_EYBU_PARTNR");
        if(function == null)
            throw new RuntimeException("ENQUEUE_EYBU_PARTNR not found in SAP.");
        
        // Set Import Parameters
        function.getImportParameterList().setValue("PARTNER", "0000000101"); // Partner Number
        function.getImportParameterList().setValue("_SCOPE", "3");           // Lock scope
        
		try {
			
			// Begin Stateful Session
			JCoContext.begin(destination);
			try {
				
				// Call function module
				function.execute(destination);
		        try {
		        	
		        	// sleep for checking the lock
					System.out.println("Stop 15 senconds");
					Thread.sleep(15000);
					System.out.println("Restarted");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			} catch (AbapException e) {
				System.out.println(e.toString());
				return;
			}
		} catch (JCoException ex) {
			
		} finally {
			
			// Finish stateful session
			JCoContext.end(destination);
		}
        
        System.out.println("ENQUEUE_EYBU_PARTNR finished:");
        System.out.println();


    }
    
	public static void main(String[] args) throws JCoException {
		step3SimpleCall();
	}

}

Stateless call

After calling lock module, lock disappears, since SAP server doesn't have any states.

StatelessLock.java
package test00;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
 
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.JCoFunction;
 
public class StatelessLock {

    static String ABAP_AS = "ABAP_AS_WITHOUT_POOL_RSM";

//  SAP system information
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "XXX"); //host
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "100");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "fukuhara");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "XXX"); 
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
        createDataFile(ABAP_AS, "jcoDestination", connectProperties);
    }    

//  Create SAP system property file
    static void createDataFile(String name, String suffix, Properties properties)
    {
        File cfg = new File(name+"."+suffix);
        if(!cfg.exists())
        {
            try
            {
                FileOutputStream fos = new FileOutputStream(cfg, false);
                properties.store(fos, "for tests only !");
                fos.close();
            }
            catch (Exception e)
            {
                throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
            }
        }
    }
    
    public static void step3SimpleCall() throws JCoException
    {
    	// Set Destination
        JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);
        
        // Set lock function module
        JCoFunction function = destination.getRepository().getFunction("ENQUEUE_EYBU_PARTNR");
        if(function == null)
            throw new RuntimeException("ENQUEUE_EYBU_PARTNR not found in SAP.");
        
        // Set Import Parameters
        function.getImportParameterList().setValue("PARTNER", "0000000101");
        function.getImportParameterList().setValue("_SCOPE", "3");
        
        try
        {
        	//Call lock function module
            function.execute(destination);
        }
        catch(AbapException e)
        {
            System.out.println(e.toString());
            return;
        }
        
        System.out.println("ENQUEUE_EYBU_PARTNR finished:");
        System.out.println();

        // Sleep for checking locks 
        try {
			System.out.println("Stop 15 senconds");
			Thread.sleep(15000);
			System.out.println("Restarted");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

    }
    
	public static void main(String[] args) throws JCoException {
		step3SimpleCall();
	}

}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?