BBjServices Overview
BBjServices is a mechanism for improving the performance of BBj by running
the various components of BBj within a single process. To understand BBjServices,
an understanding of the relationship between the various components of
BBj is necessary.
Consider the following configuration in which a user is running Thin Client
on machine A, which connects to an AppServer running on machine B, which
in turn is accessing all data through a Data Server running on machine
C.
In this configuration, when a user starts the Thin Client, the Thin Client
makes a socket connection to the AppServer requesting that the AppServer
run a specified program. After checking license availability, the AppServer
starts an Interpreter that will execute the requested program on behalf
of the Thin Client. The AppServer also establishes a socket connection
to the Data Server that provides a dedicated connection between the Interpreter
and the Data Server on Machine C. While the Interpreter is running, it
uses two sockets: one to access the data through the Data Server on machine
C, and a second to manipulate the display on machine A.
If the Data Server, the AppServer, and the Thin Client are all running
on the same machine, each in its own process, then the communications
are still the same—a socket connection between the Data Server and the
AppServer, and a second socket between the AppServer and the Thin Client.
BBjServices is a process that offers the services of both a Data Server
and an AppServer. In other words, it listens on a given port for Data
Server connection requests, and listens on a different port for AppServer
connection requests. When a request is received on the AppServer port,
BBjServices starts an Interpreter to process the request, but because
the Interpreter and the Data Server are running in the same process, they
are able to communicate directly rather than across a socket. This provides
a significant performance advantage over the configuration in which the
Data Server and the AppServer are running in separate processes.
Once BBjServices is running, a user may access the services that are being
offered in the same way that they would access the services of the Data
Server and AppServer if they had been started in separate processes. Although
these services can be accessed in a manner that is 'pure Java', the most
common access is by typing BBj at a command
prompt.
Typing BBj at the prompt invokes a platform
specific executable. The behavior of that executable is slightly different
on Windows platforms than on UNIX platforms.
On UNIX platforms, the executable has the same effect as having typed "java com.basis.bbj.comm.ThinClient".
In other words, typing BBj actually starts
a Thin Client within a JVM.
In a Windows environment, BBj.exe makes
a connection to BBjServices on a separate port and requests that BBjServices
run a program within its own process space. Once this request has been
made, BBjServices starts an Interpreter within its own process space that
executes the requested BBj program and the BBj.exe
terminates. In this case, the Interpreter, the display and the Data Server
all run in the same JVM and there is no socket communication involved.
This is the configuration in which BBj execution is fastest.
In a UNIX environment, the display cannot run in the same JVM as BBjServices
because BBjServices may have a display that is different from the one
desired by the user. In the UNIX environment, the BBj executable will
start a Thin Client that has the correct display, and all communication
between the Interpreter (running in the BBjServices process space) and
the Thin Client will be across a socket.
A process named “bbjnative” calls functions that Java cannot and is installed on all operating systems except Windows. Multiple occurrences of bbjnative may be running at a time and will stop once BBjServices stops.