Jetfire First Class ConstructsJetfire
at its heart is an OO language based heavily on C#
and Java. Jetfire does have a number of first class constructs that traditional object oriented languages (such as C#) do not have. These constructs provide Jetfire with its unique capabilities. They include:
- Object and Class Persistence: Jetfire objects and classes(code) are persistent. They are automatically serialized and stored in a workspace or namespace directory structure on the Server Nexus when they are created or change. A Server Nexus (any Windows XP, Vista or Windows7 machine) is part of every Jetfire implementation. The server physical storage mechanism is typically a database or file system. Jetfire programs run until complete, which may be from days to months, surviving computer shutdowns and even crashes. A single instance of a Jetfire workflow is even allowed to migrate to multiple computers.
- Object Searching: Searching for Jetfire objects, using a logical expression, is supported when the server nexus storage is configured to a Linq query-able mechanism(such as a SQL database). This allows applications, that consist of a very large number of objects stored in a database, to use searching to quickly provide a relevant set of objects. See blog article
- States: Workflow classes can define a set of states allowing a workflow to be in one given state. Operations can be performed upon entering and leaving a state. Instance methods and properties can dynamically change to public or private as the state of the workflow object changes.
- Roles: Jetfire provides role based security enforced by the server nexus. A Jetfire user can be assigned one or more roles. Methods, properties and workflows objects can have roles restricting usage and visibility to Jetfire users without the appropriate role. When workspace is not visible the objects within are also hidden from the user. Jetfire uses roles internally to control all system functionality.
- Multi-User: Jetfire supports multiple simultaneous users with shared data. Each user, when active, has one more client nexuses each containing objects. The client nexus contains only objects allowed by the user's roles. As data, both code and objects, is modified, added or deleted, each client nexus is automatically and transparently kept current.
- Versioning: Since code may need to change over time Jetfire has built-in versioning for classes. Classes, which are persistent objects within a Jetfire system, are automatically assigned a version number. Every time an class changes a new version is created. Objects created with an old version of code will continue execute the old code unless explicitly upgraded. Jetfire has number of built-in safe guards to insure versioning integrity.
- Audit Information: Jetfire automatically and transparently collects information when objects and classes change, are created or deleted. The audit information collected is when, by whom, what and where. This information, stored as an 'Audit' workflow, can be programmatically retrieved via Jetfire code or by application code.
- Change log: (coming soon) A history log of all storage unit (objects and source code) changes can be optionally kept. This log can be used to identify exactly what changes were made or recover old versions of the data.
- Dataflow Architecture: Jetfire automatically updates properties as the values of fields and other properties change. Jetfire programmers do not need to write complicated event structures. Changes in Jetfire data can trigger standard .net event handlers.
- Rules: Rules make Jetfire a Business Rule Engine with forward chaining. Rules, in Jetfire, are methods are are automatically invoked by events. A rule method will test one or more conditions to determine if an action should be performed. Using the built-in versioning rules, and the policies they implement, can change quickly supporting 'grandfathering' or the new rules can be applied to the entire system. Rules can also be used to implement Aspect-Oriented Programming 'concerns' involving data.
- Templates: The templating feature of Jetfire supports the dynamic creation of code. This feature is significantly more advanced and easier to use than C# generics or C++ templates.
- Multiple Language String Type: The Jetfire 'string' type behaves identically to C# with the added feature that is supports multiple languages. A single string can contain an array of strings, where each array member represents a separate language. This supports features such as 'on the fly' changing of languages and hierarchical language translation. Hierarchical translation allows data to be viewed in a preferred language; however if the translation is not complete that parts of the data can be displayed in an alternate language or original language. It also supports 'mouse' over features where information can be displayed in an alternate language to aid in comprehension.
- Void Safety: Jetfire supports nulls; however provides 'void safety' to prevent run time exceptions.
Also see Jetfire Overview