Difference between revisions of "The BPJ Library"

From BP Wiki
Jump to: navigation, search
(New page: See examples, e.g., BPJ/BPJCore110 -> bp.src.unittest.helloworld BPJ/Examples -> TicTacToe Events B-threads B-Program(s) A main method: == Events == Reflect the elements of behavior of...)
 
Line 28: Line 28:
  
 
== The B-Program ==
 
== The B-Program ==
A container and execution environment for b-threads.
+
*A container and execution environment for b-threads.
You only need  to instantiate it.
+
*You only need  to instantiate it.
BProgram externalizes the public variable lastEvent that can be seen by b-threads.
+
*BProgram externalizes the public variable lastEvent that can be seen by b-threads.
Usually – there is just one BProgram per application, running all your b-threads, but you may have several BPrograms in parallel.
+
*Usually – there is just one BProgram per application, running all your b-threads, but you may have several b-programs in parallel.
You may change run-time parameters by calling methods to set them.
+
*You may change run-time parameters of the b-program by calling methods to set them.
  
== The bSync() Method
+
== The bSync() Method ==
  
bSync(RequestableEventInterface,EventSetInterface,EventSetInterface)
+
*bSync(RequestableEventInterface,EventSetInterface,EventSetInterface)
Three parameters:
+
*Three parameters:
Requested Events:
+
**Requested Events:
Waited-for events (a.k.a “watched events”)
+
**Waited-for events (a.k.a “watched events”)
Blocked events
+
**Blocked events
Drives the collective execution mechanism:
+
*Drives the collective execution mechanism:
Synchronizes the b-thread with the others – waits until all b-threads call bSync().
+
**Synchronizes the b-thread with the others – waits until all b-threads call bSync().
When all b-threads are waiting in bSync – the first event that is requested and is not blocked is selected. The search order is by b-thread priority, and within it – order of events in requestable event set
+
**When all b-threads are waiting in bSync – the first event that is requested and is not blocked is selected. The search order is by b-thread priority, and within it – order of events in requestable event set.
All b-threads that have the selected event in their requested events set or in their waited-for event set are resumed.
+
**All b-threads that have the selected event in their requested events set or in their waited-for event set are resumed.
B-threads can  examine the event triggered by the last bSync in bp.lastEvent.  Don’t modify it this field; don’t rely on it past another bSync() call.
+
**B-threads can  examine the event triggered by the last bSync in bp.lastEvent.  Don’t modify this field; don’t rely on it past another bSync() call.
This synchronization assumes that all b-threads will be good citizens and will not wait long (e.g., will not be involved in GUI input)
+
**This synchronization assumes that all b-threads will be good citizens and will not wait long (e.g., will not be involved in GUI input)
  
== Event Sets and Interfaces
+
== Event Sets and Interfaces ==
  
The parameters to bSync are three sets of events, or sets of sets with unlimited nesting of set containment is allowed
+
*The parameters to bSync are three sets of events, or sets of sets.
RequestableEventInterface
+
*Nesting of set containment is allowed, and not limited.
Required for requested event parameter of bsynC();
+
*RequestableEventInterface:
Can be used also for watched and blocked.
+
**Required for requested event parameter of bSync();
Must contain an ordered set of concrete events, or ordered sets of requestableEventInterface (nesting of sets).
+
**Can be used also for watched and blocked.
Implemented by RequestedEventsSet
+
**Must contain an ordered set of concrete events, or ordered sets of requestableEventInterface (nesting of sets).
EventSetInterface
+
**Implemented by RequestedEventsSet
Can be used for watched and blocked events.
+
*EventSetInterface:
Contains() method determines membership
+
**Can be used for watched and blocked events.
Can contain very large or infinite sets of events, or be used to filter events.
+
**Contains() method determines membership
Can contain eventSetInterface
+
**Can contain very large or infinite sets of events, or be used to filter events.
Is not sufficient as the requested events parameter o bSync()
+
**Can contain eventSetInterface
Implemented by EventSet
+
**Is not sufficient as the requested events parameter of bSync()
RequestableEventSet: Implements both interfaces above
+
**Implemented by EventSet
EventSet: implements only EventSetInterfacs
+
*RequestableEventSet: Implements both interfaces above
Event:  The Event class implements the above interfaces. An individual event can be used instead of any of these sets. An event is also a set that contains the event.
+
*EventSet: implements only EventSetInterface
 +
*Event:  The Event class implements the above interfaces. An individual event can be used instead of any of these sets. An event is also a set that contains the event.
  
== Special Event Sets
+
== Special Event Sets ==
  
None:  the empty set
+
*None:  the empty set
All: contains all events
+
*All: contains all events
EventsOfClass: all events of a given class
+
*EventsOfClass: all events of a given class
Composable event sets
+
*Composable event sets
Available in BPJContrib (***?? What to do???)
+
**Available in BPJContrib (***?? What to do???)
Allows specification of, e.g.,
+
**Allows specification of, e.g., theEventSet(A).and( not( theEventSet(B).or(C) ).xor( theEventSet(A).nand(c) ) )
theEventSet(A).and( not( theEventSet(B).or(C) ).xor( theEventSet(A).nand(c) ) )
+
 
anyOf( A, B, theEventSet(C).and(not(d)) )
 
anyOf( A, B, theEventSet(C).and(not(d)) )
  
 
==The Application and the Main Method ==
 
==The Application and the Main Method ==
  
In the main method insert the line ��BProgram.startBApplication(my-app-class, my-package);
+
*In the main method insert the line BProgram.startBApplication(my-app-class, my-package);
 
+
*In the  method runBApplication you start the execution of your application
In the  method runBApplication you start the execution of your application
+
*Instantiate and add b-threads to the b-program
Instantiate and add b-threads to the b-program
+
*Start the b-threads
Start the b-threads
+
*You must assign unique real number priority to each b-thread. The smaller the value, the higher the priority.
You must assign unique real number priority to each b-thread. The smaller the value, the higher the priority.
+
*runBApplication may exit, or may wait for all b-threads to end.
runBApplication may exit, or may wait for all b-threads to end.
+
*Example (see BPJ package for more detail):
Example (see BPJ package for more detail): ��import static bp.BProgram.bp; �public class my-app-class implements BApplication {  public void runBApplication()  bp.add(new my-Bthread-1(), mypriority1);  bp.add(new my-Bthread-2(), mypriority2);  … �  bp.startAll(); ��
+
import static bp.BProgram.bp;
 +
public class my-app-class implements BApplication {  public void runBApplication()  bp.add(new my-Bthread-1(), mypriority1);  bp.add(new my-Bthread-2(), mypriority2);  …   bp.startAll();
  
 
== Dynamic B-Threads ==
 
== Dynamic B-Threads ==
New b-threads may be added by external (non behavioral) applications modules, or by b-threads
+
*New b-threads may be added by external (non behavioral) applications modules, or by b-threads
A running Java thread may be registered as a b-thread and subsequently deregistered
+
*A running Java thread may be registered as a b-thread and subsequently deregistered as follows:...
 
See examples in...
 
See examples in...
  

Revision as of 11:56, 26 June 2013

See examples, e.g., BPJ/BPJCore110 -> bp.src.unittest.helloworld BPJ/Examples -> TicTacToe Events B-threads B-Program(s) A main method:


Events

Reflect the elements of behavior of your application (and its environment) – what you want to see in a trace. Instantiate or extend Event class Optional string name in constructor or in setName(); Optional data fields See later on Event Sets

B-Threads

Contain the logic of your application You code runBThread() method Use events to affect system behavior Call bSync() method to request, wait for or block events You code import static bp.BProgram.bp Use Java freely – but don’t wait for slow things (GUI interaction should be done separately). Avoid or minimize side effects and external dependencies that are not event-driven Events should be natural system behavior - minimize usage of events for pure inter-b-thread communication. You may instantiate multiple instances of same b-thread class – possibly with constructor parameters Parameters may be manually specified during instantiation or generated by the application - see Tic-Tac-Toe example.

The B-Program

  • A container and execution environment for b-threads.
  • You only need to instantiate it.
  • BProgram externalizes the public variable lastEvent that can be seen by b-threads.
  • Usually – there is just one BProgram per application, running all your b-threads, but you may have several b-programs in parallel.
  • You may change run-time parameters of the b-program by calling methods to set them.

The bSync() Method

  • bSync(RequestableEventInterface,EventSetInterface,EventSetInterface)
  • Three parameters:
    • Requested Events:
    • Waited-for events (a.k.a “watched events”)
    • Blocked events
  • Drives the collective execution mechanism:
    • Synchronizes the b-thread with the others – waits until all b-threads call bSync().
    • When all b-threads are waiting in bSync – the first event that is requested and is not blocked is selected. The search order is by b-thread priority, and within it – order of events in requestable event set.
    • All b-threads that have the selected event in their requested events set or in their waited-for event set are resumed.
    • B-threads can examine the event triggered by the last bSync in bp.lastEvent. Don’t modify this field; don’t rely on it past another bSync() call.
    • This synchronization assumes that all b-threads will be good citizens and will not wait long (e.g., will not be involved in GUI input)

Event Sets and Interfaces

  • The parameters to bSync are three sets of events, or sets of sets.
  • Nesting of set containment is allowed, and not limited.
  • RequestableEventInterface:
    • Required for requested event parameter of bSync();
    • Can be used also for watched and blocked.
    • Must contain an ordered set of concrete events, or ordered sets of requestableEventInterface (nesting of sets).
    • Implemented by RequestedEventsSet
  • EventSetInterface:
    • Can be used for watched and blocked events.
    • Contains() method determines membership
    • Can contain very large or infinite sets of events, or be used to filter events.
    • Can contain eventSetInterface
    • Is not sufficient as the requested events parameter of bSync()
    • Implemented by EventSet
  • RequestableEventSet: Implements both interfaces above
  • EventSet: implements only EventSetInterface
  • Event: The Event class implements the above interfaces. An individual event can be used instead of any of these sets. An event is also a set that contains the event.

Special Event Sets

  • None: the empty set
  • All: contains all events
  • EventsOfClass: all events of a given class
  • Composable event sets
    • Available in BPJContrib (***?? What to do???)
    • Allows specification of, e.g., theEventSet(A).and( not( theEventSet(B).or(C) ).xor( theEventSet(A).nand(c) ) )

anyOf( A, B, theEventSet(C).and(not(d)) )

The Application and the Main Method

  • In the main method insert the line BProgram.startBApplication(my-app-class, my-package);
  • In the method runBApplication you start the execution of your application
  • Instantiate and add b-threads to the b-program
  • Start the b-threads
  • You must assign unique real number priority to each b-thread. The smaller the value, the higher the priority.
  • runBApplication may exit, or may wait for all b-threads to end.
  • Example (see BPJ package for more detail):

import static bp.BProgram.bp; public class my-app-class implements BApplication { public void runBApplication() bp.add(new my-Bthread-1(), mypriority1); bp.add(new my-Bthread-2(), mypriority2); … bp.startAll();

Dynamic B-Threads

  • New b-threads may be added by external (non behavioral) applications modules, or by b-threads
  • A running Java thread may be registered as a b-thread and subsequently deregistered as follows:...

See examples in...

Injecting External Events

add text

[[Download | Prev] | Model Checking with BPmc