Base OCF Reference Implementation Changes for OCF version 1.1 Changes of OCF version 1.1.1
Changes of OCF version 1.2 Configuration OpenCard Home
Please read the License!
Configuring the Framework
The OPENCARD FRAMEWORK reference implementation obtains configuration information
via the JAVA system properties. JAVA system properties are a platform-independent
mechanism to make operating system and run-time environment variables available
to programs. The JAVA run-time environment defines a set of default properties
that are always part of the system properties. Applications can extend
this set of properties by loading additional properties and merging
them with the system properties. OPENCARD FRAMEWORK configuration parameters
are added in this way to the system properties.
Loading properties from the OPENCARD properties
file
The OPENCARD ARCHITECTURE does not define the mechanism by which the system
properties are extended because there is no single mechanism that is guaranteed
to be available on all platforms on which the OPENCARD FRAMEWORK reference
implementation will run. However, the OPENCARD FRAMEWORK reference implementation
does provide a utility class opencard.opt.util.OpenCardPropertyFileLoader
to load properties from a file. This file based properties loading mechanism
is the default used to extend the system properties. You can change this
mechanism and we show you how do that in the section Loading
properties with your own mechanism below.
Let's now look at how the default properties loader works. The OpenCardPropertyFileLoader
looks in the following places for property files (in the order given):
-
[java.home]/lib/opencard.properties
-
[user.home]/.opencard.properties
-
[user.dir]/opencard.properties
-
[user.dir]/.opencard.properties
where [xxx.xxx] are the respective path variables as defined in
the default system properties. It loads the properties from each of these
files in turn merging them with the system properties. In the situation,
where the properties file being read contains a property name that is already
defined in the properties set, the new definition will be ignored by default.
In case you wish to override a property that is already defined in the
properties set you can do that by defining the property name name
anew and adding an additional property with the name name.override
that has the value true to your property file.
The following example will set the property OpenCard.property
to the value new_value no matter what its value was before:
# Overriding a possibly already defined OpenCard property
# with a new value
OpenCard.property = new_value
OpenCard.property.override = true
Using the same properties strings as in the examples above, your properties
file might look like this:
# Configuring the CardServiceRegistry
OpenCard.services = com.ibm.opencard.service.MFCCardServiceFactory
# Configuring the CardTerminalRegistry
# The parameters after the class name are:
# name, type, and address of the card terminal
OpenCard.terminals = \
com.ibm.opencard.terminal.ibm5948.IBMCardTerminalFactory|IBM5948-1|IBM5948-B02|1 \
com.ibm.opencard.terminal.pcsc10.Pcsc10CardTerminalFactory
# Configuring Tracing
OpenCard.trace = opencard.core:6 opencard.opt:0 com.ibm.opencard:3 \
com.ibm.opencard.terminal.ibm5948.IBM5948CardTerminal:8
# Overriding OpenCard.property
OpenCard.property = new_value
OpenCard.property.override = true
back to top of page
Configuring the Registries
The system-wide CardTerminalRegistry and CardServiceRegistry
keep track of CardTerminals and CardServiceFactorys,
respectively. In order for the OPENCARD FRAMEWORK reference implementation
to work properly, the CardTerminalRegistry must know at least
one terminal. When the framework starts up, the Card[Terminal|Service]Registrys
are initialized by the system based on properties that the user defined
and added to the system properties.
You can configure the CardTerminalRegistry via the OpenCard.terminals
property and the CardServiceRegistry via the OpenCard.services
property.
The syntax of the property string for either property is as follows:
<record-0> <record-1> ... <record-N>
where records are separated by white-space and each record consists of
a class name and optional string parameters separated by a ``|'', i.e.,
class-name|param-1|param-2| ... |param-N
The following example illustrates how the property strings might look like:
Property name: Property string:
OpenCard.services com.ibm.opencard.service.MFCCardServiceFactory
OpenCard.terminals com.ibm.opencard.terminal.ibm5948.IBMCardTerminalFactory|IBM5948-1|IBM5948-B02|1 \
com.ibm.opencard.terminal.pcsc10.Pcsc10CardTerminalFactory
back to top of page
Enabling tracing output
The OPENCARD FRAMEWORK reference implementation is comprehensively instrumented
to produce detailed tracing information at run-time. This provides valuable
feedback about the operation of the FRAMEWORK and helps to locate problems
should they occur. You can flexibly adjust the amount of tracing information
produced by setting the OpenCard.trace system property.
The utility class opencard.core.util.Tracer distinguishes the
following trace levels:
-
EMERGENCY
-
System is unusable; numeric value is 0
-
ALERT
-
Action must be taken immediately; numeric value is 1
-
CRITICAL
-
Critical condition; numeric value is 2
-
ERROR
-
Error condition; numeric value is 3
-
WARNING
-
Warning condition; numeric value is 4
-
NOTICE
-
Normal but significant condition; numeric value is 5
-
INFO
-
Informational; numeric value is 6
-
DEBUG
-
Debugging information; numeric value is 7
-
LOWEST
-
Even more details; numeric value is 8
The syntax of the property string is as follows:
package-prefix:trace-level
where package-prefix specifies the prefix of a package
or class name and level specifies a number between 0 and 8 corresponding
to the desired trace-level.
Example:
opencard.core:6 opencard.opt:0 com.ibm.opencard:3 \
com.ibm.opencard.terminal.ibm5948.IBM5948CardTerminal:8
back to top of page
Loading properties with your own mechanism
The default property loading mechanism, implemented by the class opencard.opt.util.OpenCardPropertyFileLoader,
may not be adequate in all environments. For instance, it cannot be used
on platforms that do not have a file system.
You can implement a different property loading mechanism that fits your
purpose or platform better and have it replace the default mechanism. In
order for your property loader to integrate with the FRAMEWORK, it must
implement the interface
opencard.core.util.OpenCardConfigurationProvider.
You must tell the FRAMEWORK to use your class instead of the default
loader. You do that via the following system property:
OpenCard.loaderClassName= fully-qualified_class_name
NOTE: Obviously, you must set this property prior to the
OPENCARD properties loading mechanism being invoked, for instance via a
command line flag of the JAVA interpreter or, if applicable, in the system-wide
.properties
file.
back to top of page
Reto Hermann
Thu May 28 14:32:41 MDT 1998