public abstract class JCo extends Object
Modifier and Type | Method and Description |
---|---|
static void |
addTraceListener(JCoTraceListener listener)
Adds a trace listener, that receives all trace events of JCo.
|
static JCoAbapObject |
createAbapObject(JCoClassMetaData classMetaData,
Map<String,Object> initialValues)
This is a constructor for an instance of an ABAP class.
|
static JCoBackgroundUnitAttributes |
createBackgroundUnitAttributes()
Creates an empty instance of function/request unit attributes.
|
static JCoClassMetaData |
createClassMetaData(JCoClassMetaData metaData)
Returns a newly created instance of JCoClassMetaData, which is initially
a copy of the passed JCoClassMetaData.
|
static JCoClassMetaData |
createClassMetaData(String name)
Returns a newly created and empty instance of JCoClassMetaData
with the passed initial capacity for new field information.
|
static JCoClassMetaData |
createClassMetaData(String name,
String[] parentClasses,
String[] implementedInterfaces,
int capacity)
Returns a newly created and empty instance of JCoClassMetaData
with the passed initial capacity for new field information.
|
static JCoCustomRepository |
createCustomRepository(String name)
Returns a custom repository, which allows to add custom defined
function templates and record metadata definitions.
|
static JCoFunctionTemplate |
createFunctionTemplate(String name,
JCoListMetaData imports,
JCoListMetaData exports,
JCoListMetaData changing,
JCoListMetaData tables,
AbapException[] exceptions)
This factory method allows to create a JCoFunctionTemplate that can be used
in later function module executions.
|
static JCoFunctionTemplate |
createFunctionTemplate(String name,
JCoListMetaData imports,
JCoListMetaData exports,
JCoListMetaData changing,
JCoListMetaData tables,
AbapException[] exceptions,
boolean supportsASXML)
This factory method allows to create a JCoFunctionTemplate that can be used
in later function module executions.
|
static JCoFunctionUnit |
createFunctionUnit(JCoBackgroundUnitAttributes unitAttributes)
Creates a new (empty) unit of functions, which is used for bgRFC communication in the
function model.
|
static JCoFunctionUnit |
createFunctionUnit(String unitID,
JCoBackgroundUnitAttributes unitAttributes)
Creates a new (empty) unit of functions, which is used for bgRFC communication in the
function model.
|
static JCoListMetaData |
createListMetaData(JCoListMetaData metaData)
Returns a newly created instance of JCoListMetaData, which is initially
a copy of the passed JCoListMetaData.
|
static JCoListMetaData |
createListMetaData(String name)
Returns a newly created and empty instance of JCoListMetaData.
|
static JCoListMetaData |
createListMetaData(String name,
int capacity)
Returns a newly created and empty instance of JCoListMetaData
with the passed initial capacity for new field information.
|
static JCoRecordMetaData |
createRecordMetaData(JCoRecordMetaData metaData)
Returns a newly created instance of JCoRecordMetaData, which is initially
a copy of the passed JCoRecordMetaData.
|
static JCoRecordMetaData |
createRecordMetaData(String name)
Returns a newly created and empty instance of JCoRecordMetaData.
|
static JCoRecordMetaData |
createRecordMetaData(String name,
int capacity)
Returns a newly created and empty instance of JCoRecordMetaData
with the passed initial capacity for new field information.
|
static JCoRequestUnit |
createRequestUnit(JCoBackgroundUnitAttributes unitAttributes)
Creates a new (empty) unit of requests, which is used for bgRFC communication in the
request/response model.
|
static JCoRequestUnit |
createRequestUnit(String unitID,
JCoBackgroundUnitAttributes unitAttributes)
Creates a new (empty) unit of requests, which is used for bgRFC communication in the
request/response model.
|
static JCoStructure |
createStructure(JCoRecordMetaData metaData)
Returns a newly created instance of JCoStructure with the passed metadata
information.
|
static JCoStructure |
createStructure(JCoTable table,
int row)
Returns a newly created instance of JCoStructure with the metadata
used for the given table instance.
|
static JCoTable |
createTable(JCoRecordMetaData metaData)
Returns a newly created instance of JCoTable with the passed metadata
information.
|
static JCoThroughput |
createThroughput()
Returns a newly created instance of JCoThroughput.
|
static JCoUnitIdentifier |
createUnitIdentifier(String unitID,
JCoUnitIdentifier.Type unitType)
Creates a new unit identifier.
|
static JCoConnectionMonitor |
getConnectionMonitor()
Returns the connection monitor for all currently available connections.
|
static List<String> |
getCustomDestinationIDs(String destinationID)
Creates and returns a list with IDs of all custom destinations created by the destination with
the given destinationID.
|
static List<String> |
getDestinationIDs()
Creates and returns a list containing IDs of all available cached destinations.
|
static JCoDestinationMonitor |
getDestinationMonitor(String destinationID)
Retrieves a monitoring object for a specific destination identified by the given ID.
|
static String |
getMiddlewareProperty(String key)
Returns the current value for the given middleware property or null,
if there is no value set.
|
static String |
getProperty(String key)
Returns the current value for the given JCo property or null,
if there is no such property set.
|
static JCoRepository |
getRepository(String repositoryID)
Returns the repository instance corresponding to the given repository ID or null if
the repository isn't available.
|
static String |
getRepositoryDestinationID(String destinationID)
Returns the destination ID used by repository instances internally.
|
static JCoDestinationMonitor |
getRepositoryDestinationMonitor(String destinationID)
Retrieves a monitoring object for a specific repository destination of the destination
identified by the given ID.
|
static List<String> |
getRepositoryIDs()
Returns a list containing IDs of all repository instances that are kept internally.
|
static int |
getTraceLevel()
Returns the current trace level.
|
static String |
getTracePath()
Returns the current trace path.
|
static String |
getVersion()
Returns the version of the JCo implementation.
|
static JCoRepositoryQueryResult |
queryMetaDataSet(JCoRepository repository,
List<String> functions,
List<String> types,
List<String> classes)
Queries the metadata for function interfaces, types and classes.
|
static void |
removeTraceListener(JCoTraceListener listener)
Removes the given trace listener from the list of JCoTraceListeners.
|
static void |
setMiddlewareProperty(String key,
String value)
Sets a value for the given middleware property.
|
static void |
setProperty(String key,
String value)
Sets a value for the given JCo property.
|
static void |
setTrace(int level,
String path)
Turns on the JCo trace.
|
public static String getVersion()
public static JCoCustomRepository createCustomRepository(String name)
name
- The name of the repository to create.public static JCoRecordMetaData createRecordMetaData(String name)
name
- The name of the record metadata.public static JCoRecordMetaData createRecordMetaData(String name, int capacity)
name
- The name of the record metadata.capacity
- The initial capacity for this metadata object.public static JCoRecordMetaData createRecordMetaData(JCoRecordMetaData metaData)
metaData
- the JCoRecordMetaData object to copy fromJCoMetaData.setName(String)
public static JCoListMetaData createListMetaData(String name)
name
- The name of the list metadata.public static JCoListMetaData createListMetaData(String name, int capacity)
name
- The name of the list metadata.capacity
- The initial capacity for this metadata object.public static JCoListMetaData createListMetaData(JCoListMetaData metaData)
metaData
- the JCoListMetaData object to copy frompublic static JCoClassMetaData createClassMetaData(String name, String[] parentClasses, String[] implementedInterfaces, int capacity)
name
- class type nameparentClasses
- parent classes of the class type being createdimplementedInterfaces
- interfaces implemented by the class type being createdcapacity
- the number of preallocated field expected for that class metadata objectpublic static JCoClassMetaData createClassMetaData(String name)
name
- class type namepublic static JCoClassMetaData createClassMetaData(JCoClassMetaData metaData)
metaData
- the JCoClassMetaData object to copy frompublic static JCoFunctionTemplate createFunctionTemplate(String name, JCoListMetaData imports, JCoListMetaData exports, JCoListMetaData changing, JCoListMetaData tables, AbapException[] exceptions) throws IllegalArgumentException
name
- the name of the function module which is represented by the function template definitionimports
- the metadata for all import parameters of the represented function moduleexports
- the metadata for all export parameters of the represented function modulechanging
- the metadata for all changing parameters of the represented function moduletables
- the metadata for all table parameters of the represented function moduleexceptions
- array of AbapExceptions, that belong to the represented function moduleIllegalArgumentException
- in case a metadata object passed as parameter is not locked.public static JCoFunctionTemplate createFunctionTemplate(String name, JCoListMetaData imports, JCoListMetaData exports, JCoListMetaData changing, JCoListMetaData tables, AbapException[] exceptions, boolean supportsASXML) throws IllegalArgumentException
name
- the name of the function module which is represented by the function template definitionimports
- the metadata for all import parameters of the represented function moduleexports
- the metadata for all export parameters of the represented function modulechanging
- the metadata for all changing parameters of the represented function moduletables
- the metadata for all table parameters of the represented function moduleexceptions
- array of AbapExceptions, that belong to the represented function modulesupportsASXML
- flag indicating whether this function module supports the ASXML semantics for serialization in the RFC protocolIllegalArgumentException
- in case a metadata object passed as parameter is not locked.public static JCoStructure createStructure(JCoRecordMetaData metaData) throws IllegalArgumentException
metaData
- the metadata instance.IllegalArgumentException
- if metaData is null or is not lockedpublic static JCoStructure createStructure(JCoTable table, int row) throws IllegalArgumentException
table
- the table is being used as template for the structure.row
- the table line index used to copy the values.IllegalArgumentException
- row is out of bounds or table is nullpublic static JCoTable createTable(JCoRecordMetaData metaData) throws IllegalArgumentException
metaData
- the metadata instance.IllegalArgumentException
- if metaData is null or is not lockedpublic static JCoAbapObject createAbapObject(JCoClassMetaData classMetaData, Map<String,Object> initialValues) throws ConversionException
setValue()
methods.classMetaData
- The metadata describing the ABAP object.initialValues
- A map whose entries will be used as initial values for the instance. Unknown fields will be
ignored.ConversionException
- if one of the values could not be converted into the corresponding attribute typepublic static JCoFunctionUnit createFunctionUnit(String unitID, JCoBackgroundUnitAttributes unitAttributes)
unitID
- ID to be assigned to the function unitunitAttributes
- attributes to be assigned to the function unitpublic static JCoFunctionUnit createFunctionUnit(JCoBackgroundUnitAttributes unitAttributes)
unitAttributes
- attributes to be assigned to the function unitpublic static JCoRequestUnit createRequestUnit(String unitID, JCoBackgroundUnitAttributes unitAttributes)
unitID
- ID to be assigned to the request unitunitAttributes
- attributes to be assigned to the request unitpublic static JCoRequestUnit createRequestUnit(JCoBackgroundUnitAttributes unitAttributes)
unitAttributes
- attributes to be assigned to the request unitpublic static JCoBackgroundUnitAttributes createBackgroundUnitAttributes()
public static JCoUnitIdentifier createUnitIdentifier(String unitID, JCoUnitIdentifier.Type unitType)
unitID
- 16-byte ID string in hexadecimal format to be set for the unit identifierunitType
- type to be set for the unit identifierpublic static List<String> getRepositoryIDs()
public static JCoRepository getRepository(String repositoryID) throws JCoRuntimeException
repositoryID
- ID of the requested repositoryJCoRuntimeException
- if an internal exception occurs, e.g. the repository ID is nullpublic static List<String> getDestinationIDs()
public static List<String> getCustomDestinationIDs(String destinationID) throws JCoRuntimeException
destinationID
- ID of the destination used for the creation of the custom destinationsJCoRuntimeException
- if an internal exception occurs, e.g. the destination ID is nullpublic static String getRepositoryDestinationID(String destinationID) throws JCoRuntimeException
destinationID
- of the destinationJCoRuntimeException
- if the destination ID is null or the destination ID does not existpublic static JCoDestinationMonitor getDestinationMonitor(String destinationID) throws JCoRuntimeException
destinationID
- the unique destination ID for which the monitor should be returnedJCoRuntimeException
- in case of issues while getting and creating the destination monitorpublic static JCoDestinationMonitor getRepositoryDestinationMonitor(String destinationID) throws JCoRuntimeException
destinationID
- the unique destination ID for which the monitor for the repository destination should be returnedJCoRuntimeException
- in case of issues while getting and creating the destination monitorpublic static JCoConnectionMonitor getConnectionMonitor() throws JCoRuntimeException
JCoRuntimeException
- if an unexpected situation occurs while creating the monitorUnsupportedOperationException
- if the monitor is not supported in the current environmentpublic static JCoThroughput createThroughput()
public static String getMiddlewareProperty(String key)
key
- the name of the property for which you want to get the valuepublic static String getProperty(String key)
key
- the name of the property for which the value should be returnedpublic static void setMiddlewareProperty(String key, String value) throws JCoRuntimeException
The following properties are supported:
Property name | Description |
---|---|
jco.middleware.max_startup_delay | The maximum time in seconds between two restart attempts of a JCoServer. Serves as default value if there is no server specific one. Values below 60 seconds are not allowed. (Default: 3600) |
jco.middleware.wait_for_request_time | Time in seconds to wait incessantly for incoming requests. (Default: 2) |
jco.middleware.snc_lib | The location (path and filename) of the SNC library. Serves as default value if there is no destination or server specific configuration. (Default: "") |
key
- the name of the property for which a value should be setvalue
- the new value for the propertyJCoRuntimeException
- if the value is not valid for the given property or cannot be set
for any reasonpublic static void setProperty(String key, String value) throws JCoRuntimeException
The following properties are supported:
Property name | Description |
---|---|
jco.trace_path | Sets the directory path for JCo trace files. Alternative to JCo.setTrace() . Find details there. |
jco.trace_level | Sets the trace level for JCo. Alternative to JCo.setTrace() . Find details there. |
jco.trace.format | Allows defining the trace format. Allowed values are "jco" and "log4j". (Default: "jco") |
jco.jarm | If set to 1, turns on jarm performance monitoring. In that case the jarm libraries need to be in the classpath. (Default: 0) |
jco.jdsr | If set to 1, turns on DSR. In that case the jdsr libraries need to be in the classpath. (Default: 0) |
jco.jdsr.comp_name | The component name to use when creating DSR records. (Default: "SAP Java Connector") |
jco.session_timeout | The idle timeout for JCo session contexts in minutes. (Default: 10) |
jco.session_timeout.check_interval | The time interval for checking whether JCo session contexts have been expired in minutes. (Default: 5) |
jco.cpic_maxconv | The maximum number of connections allowed by the CPIC layer. Limitations: Cannot be decreased at runtime and can only be increased if no CPIC connection is currently open or in use. (Default: runtime environment dependent; at least 202) |
jco.cpic_keep_alive_period | The idle time period of a CPIC server connection in seconds after which a keep alive ping packet is sent. Switching keep alive pinging from off [0] to on [greater than 10] and vice versa will only affect new RFC connections opened afterwards. (Default: 300, valid values are 0 [off] and a range from 10 [ten seconds] to 86400 [one day]) |
jco.cpic_keep_alive_timeout | The timeout for trying to send a CPIC keep alive ping packet in ms. If the keep alive ping packet cannot be sent within this timeout period, the connection is considered as broken. (Default: 100) |
jco.cpic_pong_timeout | The timeout for a CPIC keep alive ping reply packet in seconds. If no such so-called pong packet is received from the communication partner as a reply to a previously sent keep alive ping packet within this timeout period, the connection is considered as broken. Switching keep alive reply pinging from off [0] to on [greater than 10] and vice versa will only affect new RFC connections opened afterwards. (Default: 60, valid values are 0 [off] and a range from 10 [ten seconds] to 3600 [one hour]) |
jco.ws.ping_check_interval | Interval in seconds how often a WebSocket client connection, which is currently not writing/reading any data, is checked for incoming ping messages and a response (pong) is sent accordingly right after that.
This is the default global property for DestinationDataProvider#JCO_PING_CHECK_INTERVAL . Note: If your communication partner is an ABAP system, this value needs to be lower than profile parameter icm/WS/ping_interval . (Default: 90) |
jco.ws.ping_period | The idle time period of a WebSocket server connection in seconds after which a keep alive WebSocket ping packet is sent.
Switching keep alive pinging from off [0] to on [greater than 10] and vice versa will only affect new RFC connections opened afterwards. This is the default global property for ServerDataProvider#JCO_PING_PERIOD .
(Default: 300, valid values are 0 [off] and a range from 10 [ten seconds] to 86400 [one day]) |
jco.ws.pong_timeout | The timeout for a WebSocket keep alive ping reply packet in seconds.
If no such so-called pong packet is received from the communication partner as a reply to a previously sent WebSocket keep alive ping packet within this timeout period, the connection is considered as broken and will be closed.
Switching having a pong timeout from off [0] to on [greater than 10] and vice versa will only affect new RFC connections opened afterwards. Make sure to choose a value lower than jco.ws.ping_period - it is only possible to have one ping active at a time.
This is the default global property for ServerDataProvider#JCO_PONG_TIMEOUT . (Default: 60, valid values are 0 [off] and a range from 10 [ten seconds] to 3600 [one hour]) |
jco.ni.dnscache.ttl | Caching time (time to live) in seconds of host names and network services for successful DNS lookups (Default: value of Java security property networkaddress.cache.ttl , valid range is 0 [off] to 86400 [one day]) |
jco.ni.dnscache.negative.ttl | Caching time (time to live) in seconds of host names and network services for failed DNS lookups (Default: value of Java security property networkaddress.cache.negative.ttl , valid range is 0 [off] to 86400 [one day]) |
jco.ni.socket_buffer_size | The NI socket buffer in bytes for send and receive network operations. (Default: 32768) |
jrfc.client_connect_timeout | The timeout for a logon or a ping attempt in seconds. (Default: 60, valid range is 1 [one second] to 3600 [one hour]) |
jrfc.trace | If set to 1, RFC trace is turned on for all connections within JCo. (Default: 0) |
jrfc.trace_path | Sets the directory path for creating new RFC trace files. This property has no effect on already open RFC trace files. (Default: value of property jco.trace_path ) |
jrfc.logfile.maxsize | The maximum log file size for the RFC error log in MB. (Default: 8) If jrfc.logfile.maxbackups is not -1, note that jrfc.logfile.maxsize times jrfc.logfile.maxbackups must always be at least 20 MB. |
jrfc.logfile.maxbackups | The number of old files which should be kept when creating a new file. The files are stored in jco.trace_path . (Default: -1 which means that all files are kept and none is deleted).If jrfc.logfile.maxbackups is not -1, note that jrfc.logfile.maxsize times jrfc.logfile.maxbackups must always be at least 20 MB. |
cpic.trace | The trace level for the CPIC layer. The valid value range is from 0 (trace is off) to 3 (most verbose trace) (Default: 0). |
cpic.trace.maxfilesize | The maximum file size for the CPIC layer traces in MB. One file will always be retained with the extension '.old ' being appended to the file name. (Default: 1024 [1 GB]) |
cpic.trace.accept_remote_activation | If set to 1, remote CPIC trace requests from RFC communication partners are accepted and will switch on local CPIC tracing. (Default: 0) |
jco.delta_management | If set to 0, delta management in RFC protocol is turned off in general. (Default: 1) |
jco.use_repository_roundtrip_optimization | If set to 1, the JCo repository tries to use the function module for roundtrip optimization for metadata lookups. (Default: 1) See SAP note 1456826 regarding the back-end prerequisites. |
jco.logon_group.check_interval | The check interval in minutes how often the maintenance mode for pooled connections is checked for load balanced logon destinations. (Default: 5) A connection is considered to be in maintenance mode, if the target application server is not registered in the destination's logon group anymore. |
Note: The property jco.session_timeout
specifies the timeout period since the last access to a
session context after which the registered SessionReferenceProvider
instance will be regularly called
for checking, if the associated JCo session is still alive or not. Only if the method
SessionReferenceProvider.isSessionAlive(sessionID)
returns false
for the specified sessionID,
the associated JCo session context will be released, which means that also all still running RFC requests belonging
to this context will be immediately canceled.
Most of the above properties can also be passed as a Java system property with the -D
argument when starting the JVM.
These are: jco.trace_path
, jco.trace_level
, jco.trace.format
, jco.jarm
, jco.jdsr
,
jco.session_timeout
, jco.session_timeout.check_interval
, jco.cpic_maxconv
,
jco.cpic_keep_alive_period
, jco.cpic_keep_alive_timeout
, jco.cpic_pong_timeout
,
jco.ni.dnscache.ttl
, jco.ni.dnscache.negative.ttl
, jco.ni.socket_buffer_size
,
jrfc.client_connect_timeout
, jrfc.trace
, jrfc.trace_path
,
jrfc.logfile.maxsize
, jrfc.logfile.maxbackups
,
cpic.trace
, cpic.trace.maxfilesize
, cpic.trace.accept_remote_activation
,
jco.delta_management
, jco.use_repository_roundtrip_optimization
, jco.ws.ping_check_interval
,
jco.ws.ping_period
and jco.ws.pong_timeout
.
Some other properties can only exclusively be passed as a Java system property with the -D
argument when
starting the JVM. That means they cannot be modified during runtime after the JCo framework initialization anymore.
This applies to the following properties listed below:
Property name | Description |
---|---|
jco.allow_non_abap_partner | If set to 1 the RFC extern-to-extern communication is allowed. (Default: 0) For further details see SAP note 1877907 regarding the SAP JCo standalone environment and SAP note 1729203 regarding the SAP NetWeaver AS Java environment. |
jco.ni.local_address | The local IP address being used for outgoing JCo network traffic. The IP address cannot be an arbitrary one but must be chosen from all valid IP addresses that are configured in the operating system for the current host. (Default: The default IP address which is configured in the operating system.) |
jco.program_name | The RFC caller program name. (Default: SAPJCo<VersionNumber> [e.g. SAPJCo30 ]) |
Caution: For security reasons SAP discourages to run extern-to-extern RFC communication scenarios. External or registered RFC server programs are not able to check and authenticate incoming RFC requests from external non-ABAP programs with regard to the pure RFC protocol data. Each of such external RFC requests must be regarded as insecure. It is highly recommended to secure such RFC communications with SNC (Secure Network Communication) or TLS.
key
- the name of the property for which a value should be setvalue
- the new value for the propertyJCoRuntimeException
- if the value is not valid for the given property or cannot be set for any reasonpublic static void addTraceListener(JCoTraceListener listener)
listener
- An instance of JCoTraceListener, that shall be added to the listener listpublic static void removeTraceListener(JCoTraceListener listener)
listener
- An instance of JCoTraceListener, that shall be removed from the listener listpublic static void setTrace(int level, String path)
null
, stdout
, stderr
or
an existing path are allowed.
If path is equals null
or stdout
or stderr
JCo will trace out to the standard output (error) stream. If at least one
JCoTraceListener
is registered, the trace output will be sent
to the listener only. To redirect the JCo trace into a file, the path value
has to be set to an existing directory.level
- [0 .. 10]path
- null
, stdout
, stderr
or an existing pathpublic static int getTraceLevel()
setTrace(int, String)
public static String getTracePath()
setTrace(int, String)
public static JCoRepositoryQueryResult queryMetaDataSet(JCoRepository repository, List<String> functions, List<String> types, List<String> classes) throws JCoException
repository
- repository which will be used for the query; only repositories connected to an ABAP system are allowedfunctions
- list of functions to be queried or null
types
- list of types to be queried or null
classes
- list of classes to be queried or null
JCoException
- if a communication error will happen a JCoException with the key JCO_ERROR_COMMUNICATION will be thrown.
If the specified repository instance is not connected to an ABAP system a JCoException with key JCO_ERROR_ILLEGAL_ARGUMENT will be thrown.Copyright © 2023 SAP. All rights reserved.