This release note contains information specific to the VisiBroker Edition and VisiBroker standalone product. For release note information that applies to all the Borland Enterprise Server 5.2 Editions, see the Borland Enterprise Server 5.2 Release Notes.
In this release of VisiBroker 5.2 for BCB6 on Windows, in addition to the core ORB, ORB Services (such as VisiNotify), VisiTransact and VisiSecure are also offered.
The set of new features for this release includes:
Provides the implementation of OMG's CosNotification specification.
PSA is mainly a programming model and a software component that works on top of the OMG standardized Notification Service. PSA supports a high level programming model very similar to the POA model. Developing CORBA publish/subscribe applications using PSA is similar to and as easy as developing client/server applications under POA.
PSA provides an intuitive, high level object abstraction and
de-couples orthogonal logic/objects, providing the flexibility to
change object or logic implementations independently.
For example, in PSA changing a typed consumer from using push to using pull requires only a flag change on subscribe and no change on message receiving code.
PSA can be used on top of third party OMG Notification Service implementations and is also interoperable with applications directly built on top of low level OMG Notification Service interfaces.
VisiBroker for Java now supports JDK 1.4.1. However support for JDK 1.3.1 is still provided.
VisiBroker for Java and VisiBroker for C++ is now IPv6 enabled. IPv6 support is available in both C++ and Java ORBs on all platforms and JDKs that provide IPv6 support. For more details please refer to the Platform Information section.
Native Messaging provides an intuitive and powerful framework for performing non-blocking and asynchronous method invocations in CORBA/J2EE environments. VisiBroker Native Messaging support is available to all VisiBroker ORB and J2EE (1.3 and up) environments including C++, Java, RMI/EJB, and Delphi.
VisiBroker Native Messaging is based on an open IDL interface and the standardized IIOP. It can therefore be used by applications built on top of other non-VisiBroker ORBs, older versions of the VisiBroker ORB (3.x, 4.x), and RMI-over-IIOP compliant J2EE environments.
The following enhancements have been made to this release.
The VisiBroker for Java and C++ ORBs now attempt connection to different endpoints simultaneously. When multiple client threads attempt simultaneous connection to different endpoints, this speeds up connection time. However, connection establishment to the same endpoint is still serialized.
In VisiBroker for C++, PI Request Interceptors are invoked in colocated calls. Client and server request Interceptors are now invoked in colocated calls. This helps clients and servers to behave uniformly in all cases and to transfer context information or any additional security information between them.
vbroker.pi.colocStubInvoke to true enables interceptor invocation.false disables interceptor invocation.Keeping in line with the resolution of OMG issue 5430 (http://www.omg.org/issues/issue5430.txt), the interface for Portable IOR interceptor has been changed. The new interface definitions are as follows:
local interface IORInterceptor : Interceptor {
void establish_components( in IORInfo info ) ;
};
local interface IORInterceptor_3_0 : IORInterceptor {
void components_established( in IORInfo info ) ;
void adapter_manager_state_changed( in AdapterManagerId id,
in AdapterState state ) ;
void adapter_state_changed( in ObjectReferenceTemplateSeq templates,
in AdapterState state ) ;
};
For both VisiBroker for Java and VisiBroker for C++, applications using the methods:
components_establishedadapter_manager_state_changedadapter_state_changedmust be modified to make use of the new interface (IORInterceptor_3_0).
Applications using only the establish_components method need not change.
For both VisiBroker for Java and VisiBroker for C++, the Server Manager diagnostic facility provides server statistics and configuration information. This includes thread statistics, connection statistics, environment information and process information (memory usage).
The OSAgent logging facility has automatic rollover capability when the entry size reaches the default or a user-specified value. It also has the ability to control the time interval in VisiBroker client/server processes for discovering whether a Smart Agent has failed, and provides fail-over to the nearest Smart Agent.
Configuring the JDK through the VisiBroker launchers is enhanced:
C++:
The vbc launcher will try to locate the Java VM from the PATH. If not found, it will try to load the VM based on the javahome entry in the <install_dir>/bin/toolsjdk.config file.
Java:
The vbj launcher will try to load the Java VM from VisiBroker for the Java, javavm
option if given. Otherwise it will try to locate the Java VM from the
PATH. If not found in PATH, then it will try to load the VM based on
the javahome entry in the <install_dir>/bin/vbj.config file.
Important: The toolsjdk.config and vbj.config should be in the <install_dir>/bin directory and must not be moved out of this location.
Server Manager support has been added to RequestAgent so that it can be configured and monitored through the BES/VisiBroker Console.
Management Console support is provided to VisiNotify and Native Messaging features and also extended to the Server Manager Diagnostic facility.
Filter Object persistency is now enabled in VisiNotify for this release.
The following VisiNotify capabilities have been added to the BES Management Console/VisiBroker Console:
ITS is now compliant with the CORBA OMG OTS 1.2 specification. This enhancement is for those who have existing system components developed using an earlier version of ITS.
OTSPolicy with values REQUIRES, FORBIDS, or ADAPTS.InvocationPolicy with values UNSHARED, SHARED, or EITHER (the default).NonTxTargetPolicy with values PERMIT or PREVENT.BasicLoginModule configuration.
| Attribute | Description |
|---|---|
port: |
Specifies a port for remote URLs (default : 24470). For example, port = 24400 |
digesttype: |
Specifies the message digest algorithm used for hashing a password in the table (default : MD5). This value can be any value passed to the java.security.MessageDigest.getInstance method. Examples of valid values are: MD5 and SHA. |
BasicLoginModule, the TYPE attribute is now deprecated. TYPE=BASIC will translate to digesttype=SHA.VisiBroker for C++
| Property | Default | Valid values | Description |
|---|---|---|---|
vbroker.pi.colocStubInvoke |
false |
true|false |
To invoke PI Request Interceptors in a colocated case, set this property to true. |
vbroker.locationservice.backoffFactor |
1 |
>=1 |
Controls the wait for reply-time interval for the OSAgent's TCP
client handler address from an OSAgent. It is an addition factor
starting from 1 second. Use when the OSAgent is too busy to reply. |
VisiBroker for Java
| Property | Default | Valid values | Description |
|---|---|---|---|
vbroker.poa.manager.threadMin |
0 |
>=0 |
Minimum number of threads that the Adapter Manager can create. |
vbroker.poa.manager.threadMax |
0 |
>=0 |
Maximum number of threads that the Adapter Manager can create. 0 (zero) means no limit. |
vbroker.poa.manager.threadMaxIdle |
300 |
>=0 |
Time in seconds before an idle thread is to be destroyed. The value 0 (zero) disables this feature. |
vbroker.agent.clientPort |
0 |
0 to 65535 |
Starting port (lower bound) of the range of ports for the ORB to communicate with an OSAgent. 0 (zero) means the port is randomly assigned by system. |
vbroker.agent.clientPortRange |
0 |
0 to 65535 |
Range of ports within interval (clientPort, clientPort +
clientPortRange) for the ORB to communicate with the OSAgent. This
range is effective only when clientPort > 0. |
vbroker.orb.corbaloc.resolveHosts |
true |
true|false |
When this property is set to true, the ORB will try to resolve the hostnames specified in the corbaloc string at initialization time. The default value is true (for backwards compatibility). This behavior is deprecated and the next major release will have false as the default value. |
vbroker.orb.bids.bar |
"" | inprocess |
This property is used to prevent specified bidders from placing bids. Setting it to inprocess
will disable inprocess bidding. Use this property to disallow optimized
inprocess invocations when the client and server are colocated. Note: Currently, only the inprocess bidder can be barred using this property. Other bidders might be included in the future. |
| Command | Option | Default value | Description |
|---|---|---|---|
java2idl, java2iiop |
-[no_]idlentity_array_mapping |
off |
When set to on, the compiler maps array of IDLEntity to boxedIDL in boxedRMI. |
idl2java, java2iiop |
-[no_classloader_aware] |
on |
By default, this property generates extra stub code for the case where the client and servant are loaded using different classloaders but within the same ORB instance. By giving this option the generation of extra code is prevented. |
| Property | Type | Default value | Description |
|---|---|---|---|
vbroker.orb.jdkCPUBug |
Boolean | True |
This property provided in VisiBroker Edition 5.1 for backwards
compatibility, was used to work around a JDK bug that caused 100% CPU
usage. This JDK bug has since been fixed in JDK 1.3.1_04. The default
value of this property is changed to true in this release. A value of false disables RMI-IIOP dynamic stub loading (not recommended). |
VisiBroker for Java:
For consistency with VisiBroker for C++, the AnyServiceOrder property has been renamed vbroker.naming.anyServiceOrder.
The org.omg.PortableServer.ThreadPolicyValue in J2SE 1.4 does not define the _MAIN_THREAD_MODEL. We provide a version of ThreadPolicyValue that defines _MAIN_THREAD_MODEL and overrides the one in the Java 2 Platform by following the Endorsed Standards Override Mechanism.
Our version of ThreadPolicyValue is available in:
<install_dir>/lib/endorsed/vbj/endorse.jar
By default, our launcher adds this directory to the system property java.endorsed.dirs. Users are free to add more directories to this property; our launcher appends them to the existing ones.
For users not using our launcher but using J2SE 1.4, the directory containing vbjendorse.jar has to be manually added to the java.endorsed.dirs system property. This enables you to override the org.omg.PortableServer.ThreadPolicyValue provided by J2SE 1.4 by our version of the same.
Note: If this mechanism is not followed, existing applications using _MAIN_THREAD_MODEL will not be compatible with J2SE 1.4.
The Borland VisiBroker Object Request Broker (ORB) now combines the Java and C++ packages into a single installation. As a result, it has been necessary to synchronize some of the features and behaviors of the Java and C++ ORBs. This section details the changes in the GateKeeper, the VisiBroker ORB in general, and the Naming Service utility (VisiNaming).
vbroker.security.disable=false
There is no need to explicitly load the following services using the vbroker.orb.dynamicLib property in the GateKeeper:
com.inprise.security.Initcom.inprise.vbroker.GateKeeper.ssl.Initcom.inprise.security.hiops.InitThe BSS is already integrated with GateKeeper. When security is enabled, the required services are loaded. Specific listener ports can then be specified.
vbroker.GateKeeper.load.balancer has been added to allow a master-only role of the GateKeeper in the Master/Slave configuration scenario for load balancing.vbroker.orb.GateKeeper.ior
property needs to assign proper values for HTML files containing applets.To upgrade the C++ server/client using VisiTransact do the following:
OTSPolicy values to control transactional requirements for all target objects. Remove the TransactionalObject interface from all your IDL files.NonTxTargetPolicy at client side to control the invocations on non-transactional objects.CORBA::ORB::create_policy() method to create corresponding policies.If your application uses csstring.h then you will probably need to recompile your code since csstring.h has been updated.
FileDBMigrate.Compatibility with VisiBroker for C++ 5.1:
VisiBroker 5.2 maintains binary and source compatibility.
Compatibility with VisiBroker for C++ 3.x and 4.x:
For the most part, VisiBroker 5.x is not binary- or source-compatible with releases 4.x and earlier. Please regenerate your stubs and recompile your applications.
As per OMG Specification 2.5, org.omg.PortableServer.POAOperations.create_reference_with_id() does not throw a WrongPolicy
exception. VisiBroker 5.2 is compatible to this definition. However,
for source code back-compatibility we have created a JAR file called javabackcompat.jar, that contains the older definition to throw the WrongPolicy exception.
If you require the older definition, do the following before building and running your applications:
<install_dir>/lib/backcompat/vbjbackcompat.jar in the classpath.<install_dir>/lib/backcompat/vbjbackcompat.jar file in the <install_dir>/lib/endorsed directory.If any of the following three types:
java.util.Hashtablejava.util.HashMapjava.util.TreeMapare exchanged across the wire between 5.2 and any older versions, you must set vbroker.rmi.alternativeMarshall=false on the older VisiBroker for Java side for back compatibility.
otsinit.obj object is now not required to be linked into the application. It has been replaced with the ots_r.lib library.
ADAPTS OTS policy values in their IORs.
If the objects obtained from OTS52 servers have REQUIRES
OTS policy values in their IORs, any invocation on those objects must
happen within the scope of an active transaction. Also, if the objects
obtained from OTS52 servers have FORBIDS OTS policy values in their IORs, any invocation on those objects must happen outside the scope of an active transaction.
TransactionalObject.start servers/clients with:
-Dvbroker.orb.dynamicLibs=com.visigenic.services. CosTranscations.TSServiceLoader
This class is package in asrt.jar.
If you are using InpriseDriver, replace com.inprise.its.jdbcDirect.InpriseDriver with com.inprise.visitransact.jdbc1x.InpriseDriver.
-OTSname -Dvbroker.ots.name -OTScurrent_name -Dvbroker.ots.currentName -OTScurrent_timeout -Dvbroker.ots.currentTimeout -OTScurrent_host -Dvbroker.ots.currentHost -OTScurrent_factory -Dvbroker.ots.currentFactory -OTSexit_on_shutdown -Dvbroker.ots.exitOnShutdown -OTSdefault_timeout -Dvbroker.ots.defaultTimeout -OTSdefault_max_timeout -Dvbroker.ots.defaultMaxTimeout -OTSlog_dir -Dvbroker.ots.logDir -OTSlog_purge_transactions -Dvbroker.ots.logPurgeTransactions -OTSlog_sleep -Dvbroker.ots.logSleep -OTSlog_cache -Dvbroker.ots.logCache -OTSlog_unit -Dvbroker.ots.logUnit
^C to shutdown ITS, the log file now does not log the information that the ITS is interrupted by a user.Security is on-the-wire compatible with previous BES 5.x versions.
The following changes, which affect back-compatibility, have been made to the Security implementation:
IdentityWallet and CertificateWallet
had a set of accessors that provided access to information that was
used to construct these objects. Since this information is already
available to clients as they provide the information during
construction, these methods are superfluous and have been removed for
this release.The following are known VisiBroker issues with this release.
The Java compiler now rejects import statements that import a type from the unnamed namespace. According to the Java Language specification, you cannot have a simple name in an import statement, nor can you import from the unnamed namespace (http://java.sun.com/j2se/1.4/compatibility.html#source). This change impacts applications with IDLs that do not have their definitions in a module.
When security is enabled in a BES 5.2 Partition using the vbroker.security.disable
property, the Naming Service in that Partition is not secure. This is due to the default value (true) for the vbroker.naming.security.disable property. To enable security, set vbroker.naming.security.disable=false.
The current version of the Request Agent is not security-enabled.
To start the RequestAgent with OAD, you have to:
RequestAgent as a shared server using the following command.
Note: This assumes that VBROKER_ADM is set to point to the adm directory which contains the license files.
oadutil reg -i IDL:borland.com/NativeMessaging/RequestAgent:1.0 -o RA -java com.borland.vbroker.MessageBroker.MessageBroker -e vbroker.orb.admDir=%VBROKER_ADM%
Propagation of client side QoS policies to RequestAgent
In the current release, client side QoS policies, for example the RebindPolicy, are not propagated to the RequestAgent.
RequestAgent interop with VisiBroker for C++ 4.5 and VisiBroker for Java 4.0/4.1/4.1.1 servers for WChar and WString Data
This issue occurs when:
RequestAgent that contains WChar or WString arguments/return values.A DATA_CONVERSION or MARSHAL exception will be raised by the client as a result of this invocation. This issue will be resolved in a future release.
With JDK 1.3.1, the server process spawned by OAD crashes on pressing CTRL+C. OAD instantiates the server process when a request is received from a client. On pressing CTRL+C in the Console where OAD is started, the server process crashes. This behavior was observed with JDK 1.3.1.
With JDK 1.4.1, only the OAD exits and the server process continues to run (the expected behavior). We are investigating this issue. Meanwhile, to terminate OAD, we recommend you kill the OAD using the task manager instead of killing it using CTRL+C.
A new client side property vbroker.se.default.local.listener.doorMaxMsgSize
has been added. This property controls the maximum message size, which
will be sent through the fast IPC (door) mechanism in Solaris when the
client and server are running on the same machine. The default value is
1,000,000. If the message size is greater than this value,
it will not be sent using the door IPC and will default to the next
available mechanism (UNIX domain socket or TCP/IP socket).
Note: Setting this property to a very high value can cause the server application to core.
$curtime used to return the current time of day is not currently supported. This will be supported in the next release.TransactionObject interface from the existing client/server code and still want to compile them with new OTS52, do not use the BY_POA policy to create POAs on which such objects are to be created. Instead, you should use the BY_INSTANCE or NONE bind support policy.
If you need the BY_POA policy, you should set an explicit ADAPTS policy for the POA on which an object of TransactionsalObject type is to be created.InvocationPolicy presently does not support UNSHARED mode.vshutdown script to shut the server, OAD gives an error. For the workaround, see the Terminating OAD section.ServerQoPConfig will not be applied for POAs already created. This happens when the POAs are created at post_init() of ORBInitializers or init_completed() of ServiceLoaders.ClientSideDataCollection or CertificateLoginModule in 5.1, in 5.2 the configuration files are not at all required. In this case after running through with a configMigrator application, it should be noted that the application does not remove redundant configuration files.pk server, you need to add the following into the ejb-borland.xml file just after the definition of the
authorization domain:
<property> <prop-name>ejb.security.realms</prop-name> <prop-value>NONE</prop-value> </property>
admin, he should have access to the bean. But unless admin
is a part of a group in the database, for example, a group called
"mygroup", the Partition throws an exception and the user is denied
access. The workaround is to add a group to admin.4806811 it will throw an IOException when it parses the keystore. However, this does not affect the behavior. The following is a sample of the exceptions thrown:
vbj -DORBpropStorage=client_pk.properties com.borland.appclient.Container
cart_beans_client.jar java.io.IOException:
DerInputStream.getLength(): lengthTag=109, too big.
at sun.security.util.DerInputStream.getLength(DerInputStream.java:502)
at sun.security.util.DerValue.init(DerValue.java:333)
at sun.security.util.DerValue.<init>(DerValue.java:289)
at sun.security.provider.X509Factory.parseX509orPKCS7Cert(X509Factory.java:340)
at sun.security.provider.X509Factory.engineGenerateCertificates(X509Factory.java:240)
at java.security.cert.CertificateFactory.generateCertificates(CertificateFactory.java:511)
at com.inprise.security.trust.TrustpointsWrapper.addTrustPoint(TrustpointsWrapper.java:211)
at com.inprise.security.trust.TrustpointsWrapper.refresh(TrustpointsWrapper.java:163)
at com.inprise.security.CORBAsec.SecurityCurrentImpl.complete_init(SecurityCurrentImpl.java:179)
at com.borland.security.core.Init.pre_init(Init.java:475)
at com.inprise.vbroker.orb.ORB.initialize(ORB.java:1138)
at com.inprise.vbroker.orb.ORB.set_parameters(ORB.java:1310)
at org.omg.CORBA.ORB.init(ORB.java:337)
at com.inprise.j2ee.Init.orb(Init.java:78)
at com.inprise.j2ee.jndi.CtxFactory.getInitialContext(CtxFactory.java:29)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:175)
at com.inprise.j2ee.utils.JndiUtils.registerEjbRefsInJndi(JndiUtils.java:328)
at com.inprise.j2ee.utils.JndiUtils.registerInJndi(JndiUtils.java:468)
at com.borland.appclient.Container.main(Container.java:136)
On Windows 2000, due to a potential bug in the license manager (LM), an error may occur in the VisiBroker C++ application resulting in the following message:
The application failed to initialized properly (0xc0000005). Click OK to terminate the application.
To workaround this problem, use either short or quote ("") qualified folder names for the USERPROFILE environment variable. For example, c:\"Documents and Settings"\Administrator.
When using Sun's J2SE 1.3.1 on Linux, the client application may hang in com.inprise.vbroker.orb.SocketSCM.shutdown() while exiting. This is due to bug 4344135 in the JVM. To workaround this problem, set the J2SE_PREEMPTCLOSE environment variable to 1 when running the application. That is,
J2SE_PREEMPTCLOSE=1 export J2SE_PREEMPTCLOSE
For more information, see the J2SE 1.3 release notes from Sun Microsystems.
BES 5.2 VisiBroker Edition for BCB6 (Windows) is available on Windows 2000 and XP.
Important: For information on minimum hardware requirements, certified operating systems, JDKs, and compilers, please refer to the Product Platforms Page.
On Windows, JDK 1.4.1_01 and JDK 1.3.1_06 are supported.
Note: IPv6 is not supported on Windows NT for both VisiBroker for Java and VisiBroker for C++, as the underlying Microsoft stack does not support it on 2000 platforms.(See http://msdn.microsoft.com/downloads/sdks/platform/tpipv6/start.asp for additional information.) This release is certified on XP, but again no IPv6 support is provided on XP.
The product provides mechanisms for printing version information for
the binaries and libraries included in this release. In general, use
the executable vbver followed by the file to query version information.
For example vbver osagent.exe prints:
Information for: osagent.exe Product Name: VisiBroker for C++ (Windows NT4.0, Windows 2000) Version: 05.02.00.C2.06 Copyright: (C) 1996, 2002 Company: Borland Software Corporation Build Date: 12/24/2002 07:58:48
Similarly, vbver vbjorb.jar prints:
Information for: ..\lib\vbjorb.jar Product Name: VisiBroker Developer for Java Version: 05.02.00.C1.10 Copyright: (C) 1996-2002 Company: Borland Software Corp. Build Date: 07/13/2002 13:51:22
To obtain version information for the utilities (such as idl2java, irep, and idl2ir), pass the -version argument to the utility.
The following list identifies those VisiBroker components that are redistributable on Windows. Please see the VisiBroker license agreement for general terms that apply to compiled programs and redistributables.
Note: VBROKER_HOME denotes the full path to the directory where Visibroker was installed.
| Component | File | Borland Enterprise Server Redistributable |
|---|---|---|
| VisiBroker | VBROKER_HOME/bin/events.exe |
Yes |
VBROKER_HOME/bin/GateKeeper.exe |
Yes | |
VBROKER_HOME/bin/idl2cpp.exe |
No | |
VBROKER_HOME/bin/idl2ir.exe |
Yes | |
VBROKER_HOME/bin/idl2java.exe |
No | |
VBROKER_HOME/bin/ir2idl.exe |
Yes | |
VBROKER_HOME/bin/irep.exe |
Yes | |
VBROKER_HOME/bin/java2idl.exe |
No | |
VBROKER_HOME/bin/java2iiop.exe |
No | |
VBROKER_HOME/bin/migrator.exe |
No | |
VBROKER_HOME/bin/nameserv.exe |
Yes | |
VBROKER_HOME/bin/nsutil.exe |
Yes | |
VBROKER_HOME/bin/oad.exe |
Yes | |
VBROKER_HOME/bin/oadutil.exe |
Yes | |
VBROKER_HOME/bin/osagent.exe |
Yes | |
VBROKER_HOME/bin/osfind.exe |
Yes | |
VBROKER_HOME/bin/printIOR.exe |
Yes | |
VBROKER_HOME/bin/vbj.exe |
Yes | |
VBROKER_HOME/bin/vbjc.exe |
Yes | |
VBROKER_HOME/bin/vbver.exe |
Yes | |
VBROKER_HOME/idl/(any or all files within) |
No | |
VBROKER_HOME/include/(any or all files within) |
No | |
VBROKER_HOME/bin/cosev_br.dll |
Yes | |
VBROKER_HOME/bin/cosnm_br.dll |
Yes | |
VBROKER_HOME/bin/orb_br.dll |
Yes | |
VBROKER_HOME/bin/vport_br.dll |
Yes | |
VBROKER_HOME/lib/lm.jar |
Yes | |
VBROKER_HOME/lib/vbcdev.jar |
No | |
VBROKER_HOME/lib/vbdev.jar |
No | |
VBROKER_HOME/lib/vbjdev.jar |
No | |
VBROKER_HOME/lib/vbjorb.jar |
Yes | |
VBROKER_HOME/lib/vbsec.jar |
Yes | |
VBROKER_HOME/lib/endorsed/vbendorse.jar |
Yes | |
VBROKER_HOME/lib/backcompat/vbjbackcompat.jar |
Yes | |
| VisiNotify | VBROKER_HOME/bin/visinotify.exe |
Yes |
VBROKER_HOME/lib/cosnotify.lib |
Yes | |
| VisiTransact | VBROKER_HOME/bin/ots.exe |
Yes |
VBROKER_HOME/bin/ots_r.dll |
Yes | |
VBROKER_HOME/bin/its_support.dll |
Yes | |
| VisiSecure | VBROKER_HOME/bin/certreq.exe |
Yes |
VBROKER_HOME/bin/sslorb_br.dll |
Yes | |
VBROKER_HOME/bin/vispbe.dll |
Yes |