
BBjEnterpriseNamespace
Description
In BBj 13.0 and higher, BBjEnterpriseNamespace provides a mechanism by which two or more BBj programs on the same network can share data. It also provides methods that allow a program to be notified when that shared data is modified by some other program.
BBjEnterpriseNamespace
A BBjEnterpriseNamespace reference may be obtained by any BBj program through a call to the following method:
BBjAPI::getBBjEnterpriseNamespace(string host, int port, string name, string user, string password)
The BBjEnterpriseNamespace will be created the first time a reference is requested and will exist until the host BBjServices terminates or it is explicitly removed. The methods of a BBjEnterpriseNamespace are exactly the same as a regular BBjNamespace with the exception that only BBjStrings and BBjNumbers can be set as values.
The name of any BBjEnterpriseNamespace may be obtained by calling the method:
BBjEnterpriseNamespace::getName()
The NamedVariables within a BBjEnterpriseNamespace may be set and
retrieved by calling the methods:
BBjEnterpriseNamespace::getValue(string varName)
BBjEnterpriseNamespace::getValue(string varName, long timeoutMillis)
BBjEnterpriseNamespace::setValue(string varName, Object value)
BBjEnterpriseNamespace::setValue(string varName, Object value, long timeoutMillis)
BBjEnterpriseNamespace::setValue(string varName, BBjNumber value)
BBjEnterpriseNamespace::setValue(string varName, BBjNumber value, long timeoutMillis)
The value of a NamedVariable within a BBjEnterpriseNamespace may be locked/unlocked
through calls to:
BBjEnterpriseNamespace::removeLock(string varName)
BBjEnterpriseNamespace::setLock(string varName,long timeoutMillis)
A BBj program may register/unregister to be notified when the value
of a NamedVariable within a BBjEnterpriseNamespace has changed through
calls to the methods:
BBjEnterpriseNamespace::setCallbackForVariable(string varName,string callback)
BBjEnterpriseNamespace::setCallbackForVariable(string varName, CustomObject customObj, string methodName)
BBjEnterpriseNamespace::setCallbackForVariableChange(string varName, string callback)
BBjEnterpriseNamespace::setCallbackForVariableChange(string varName, CustomObject customObj, string methodName)
BBjEnterpriseNamespace::setCallbackForNamespace(string callback)
BBjEnterpriseNamespace::setCallbackForNamespace(string customObj, string methodName)
BBjEnterpriseNamespace::setCallbackForNamespaceChange(string callback)
BBjEnterpriseNamespace::setCallbackForNamespaceChange(CustomObject customObj, string methodName)
BBjEnterpriseNamespace::removeCallbackForVariable(string varName)
BBjEnterpriseNamespace::removeCallbackForVariableChange(string varName)
BBjEnterpriseNamespace::removeCallbackForNamespace()
BBjEnterpriseNamespace::removeCallbackForNamespaceChange()
Creation
BBjAPI > BBjEnterpriseNamespace
The BBjEnterpriseNamespace object is created through the following BBjAPI object methods:
Return Value |
Method |
---|---|
BBjEnterpriseNamespace |
getBBjEnterpriseNamespace(string host, int port, string name, string user, string password) |
Methods of BBjEnterpriseNamespace
Return Value |
Method |
---|---|
void |
clear() |
java.util.HashMap |
cloneMap() |
void |
enableCallbacks(int enable) |
getKeys() |
|
string |
getName() |
BBjObject |
getValue(string name) |
BBjObject |
getValue(string name, long timeoutMillis) |
void |
|
void |
|
void |
removeCallbackForVariable(string varName) |
void |
removeCallbackForVariableChange(string varName) |
void |
|
void |
removeLock(string varName) |
void |
setCallbackForNamespace(string callback) |
void |
setCallbackForNamespace(CustomObject custObj, string methodName) |
void |
setCallbackForNamespaceChange(string callback) |
void |
setCallbackForNamespaceChange(CustomObject custObj, string methodName) |
void |
setCallbackForVariable(string varName, string callback) |
void |
setCallbackForVariable(string varName, CustomObject custObj, string methodName) |
void |
setCallbackForVariableChange(string varName, string callback) |
void |
setCallbackForVariableChange(string varName, CustomObject custObj, string methodName) |
void |
setLock(string name, long timeoutMillis) |
void |
setValue(string name, object value) |
void |
setValue(string name, object value, long timeoutMillis) |
void |
removeValue(string name) |
void |
removeValue(string name, long timeoutMillis) |
Example
rem namespace.bbj
rem This is exactly the same as the normal namespace example except using a BBjEnterpriseNamespace for a shared namespace.
sysgui=unt
open (sysgui)"X0"
api! = BBjAPI()
sysgui!=api!.getSysGui()
REM host and login information for the BBjEnterpriseNamespace
host$="server"
port=2552
user$="user"
password$="password"
REM retrieve a namespace, get value of count
if api!.isInMDI()
sharedNS! = api!.getGroupNamespace()
prefix$ = "basis.eng.test.namespace"
else
if argc < 2
REM run from command line with no namespace name
prefix$ = "basis.eng.test.namespace"
sharedNSName$ = prefix$+".test"
sharedNS! = api!.getBBjEnterpriseNamespace(host$, port, sharedNSName$, user$, password$)
else
REM run from command line with a namespace name
prefix$ = argv(1)
sharedNSName$ = prefix$+".test"
sharedNS! = api!.getBBjEnterpriseNamespace(host$, port, sharedNSName$, user$, password$)
endif
endif
REM retrieve count from sharedNS! and use it to create our name
count = sharedNS!.getValue("count", err=setCount)
privateNS! = api!.getNewNamespace(prefix$)
privateNS!.setValue("count",0)
name$ = "client-" + privateNS!.getName()
REM retrieve position from sharedNS! and increment it
sharedNS!.setLock("x", 500, err = onLocked)
x = sharedNS!.getValue("x", err = setXY)
sharedNS!.setValue("x", x+50)
sharedNS!.removeLock("x")
sharedNS!.setLock("y", 500, err = onLocked)
y = sharedNS!.getValue("y", err = setXY)
sharedNS!.setValue("y", y+50)
sharedNS!.removeLock("y")
REM create window
window! = sysgui!.addWindow(x,y,300,200,name$)
REM add some static text fields
window!.addStaticText(101,5,50,290,30,"sharedCount: ")
window!.addStaticText(102,5,70,290,30,"privateCount: ")
REM add buttons and callbacks
plus! = window!.addButton(1,5,10,90,30,"Increment")
minus! = window!.addButton(2,105,10,90,30,"Decrement")
break! = window!.addButton(3,5,110,90,30,"Break")
sharedCount! = window!.addStaticText(103,200,50,290,15,str(count))
privateCount! = window!.addStaticText(104,200,70,290,15,str(0))
break!.setCallback(break!.ON_BUTTON_PUSH,"onBreak")
REM set callback for controls
plus!.setCallback(plus!.ON_BUTTON_PUSH, "onPlus")
minus!.setCallback(plus!.ON_BUTTON_PUSH, "onMinus")
window!.setCallback(window!.ON_ACTIVATE, "onActivate")
REM set callback that is to be called when count changes
sharedNS!.setCallbackForVariable("count", "showCount")
privateNS!.setCallbackForVariable("count", "showCount")
REM call onActivate to set tell others we have activated
gosub onActivate
callback(ON_CLOSE,done,sysgui!.getContext())
REM if running in MDI, register a callback for MDI closing
if api!.isInMDI()
mdi! = api!.getMDI()
mdi!.registerMDIClosingCallback("mdiClosingCallback")
endif
process_events
REM our callbacks
onPlus:
sharedNS!.setLock("count",1500,err = onLocked)
sharedNS!.setValue("count", 1 + sharedNS!.getValue("count"))
sharedNS!.removeLock("count")
privateNS!.setLock("count",1500,err = onLocked)
privateNS!.setValue("count", 1 + privateNS!.getValue("count"))
privateNS!.removeLock("count")
return
onMinus:
sharedNS!.setLock("count",1500,err = onLocked)
sharedNS!.setValue("count", -1 + sharedNS!.getValue("count"))
sharedNS!.removeLock("count")
privateNS!.setLock("count",1500,err = onLocked)
privateNS!.setValue("count", -1 + privateNS!.getValue("count"))
privateNS!.removeLock("count")
return
onActivate:
sharedNS!.setValue("activeClientNS", privateNS!.getName())
sharedNS!.setValue("activeClientName",name$)
return
showCount:
sharedcount!.setText(str(sharedNS!.getValue("count")))
privatecount!.setText(str(privateNS!.getValue("count")))
return
onBreak:
escape
return
done:
release
setXY:
x = 100
y = 100
sharedNS!.setValue("x", x)
sharedNS!.setValue("y", y)
retry
setCount:
count = 0
sharedNS!.setValue("count", count)
retry
onLocked:
print "lock error"
escape
retry
m
REM callback to be run when MDI attempts to close
mdiClosingCallback:
print 'EE', 'ask'("MDI is attempting to close",3,"What do you want to do?","Veto close:1","Accept close:2","Release:3")
print 'BE'
read(0,siz=1,err=askCancelled)response
print "answer is " , response
print 'BE'
switch response
case 1
mdi!.vetoMDIClose()
break
case 2
mdi!.approveMDIClose()
break
case 3
gosub done
break
swend
return
askCancelled:
print "ask was cancelled or else closeAll() timed out"
mdi!.approveMDIClose(err=*next)
return
See Also
Accessing Objects From Different Interpreters
See the BBj Object Diagram for an illustration of the relationship between BBj Objects.