mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
50 lines
2.6 KiB
Plaintext
50 lines
2.6 KiB
Plaintext
[#QInstance]
|
|
== QInstance
|
|
include::../variables.adoc[]
|
|
|
|
An application in QQQ is defined as a set of Meta Data objects. These objects are all stored together in an object called a `*QInstance*`.
|
|
|
|
Currently, a `QInstance` must be programmatically constructed in java code - e.g., by constructing objects which get added to the QInstance, for example:
|
|
|
|
[source,java]
|
|
.Adding meta-data for two tables and one process to a QInstance
|
|
----
|
|
QInstance qInstance = new QInstance();
|
|
qInstance.addTable(definePersonTable());
|
|
qInstance.addTable(defineHomeTable());
|
|
qInstance.addProcess(defineSendPersonHomeProcess());
|
|
----
|
|
|
|
It is on the QQQ roadmap to allow meta-data to be defined in a non-programmatic way, for example, in YAML or JSON files, or even from a dynamic data source (e.g. a document or relational database).
|
|
|
|
The middleware and/or frontends being used in an application will drive how the `QInstance` is connected to the running server/process.
|
|
For example, using the `qqq-middleware-javalin` module, a the `QJavalinImplementation` class () has a constructor which takes a `QInstance` as an argument:
|
|
|
|
[source,java]
|
|
.Starting a QQQ Javalin middleware server - passing a QInstance as a parameter to the new QJavalinImplementation
|
|
----
|
|
QJavalinImplementation qJavalinImplementation = new QJavalinImplementation(qInstance);
|
|
Javalin service = Javalin.create();
|
|
service.routes(qJavalinImplementation.getRoutes());
|
|
service.start();
|
|
----
|
|
|
|
*QInstance Setup:*
|
|
|
|
These are the methods that one is most likely to use when setting up (defining) a `QInstance` object:
|
|
|
|
* `add(TopLevelMetaDataInterface metaData)` - Generic method that takes most of the meta-data subtypes that can be added
|
|
to an instance, such as `QBackendMetaData`, `QTableMetaData`, `QProcessMetaData`, etc.
|
|
There are also type-specific methods (e.g., `addTable`, `addProcess`, etc), which one can call instead - this would just
|
|
be a matter of personal preference.
|
|
|
|
*QInstance Usage:*
|
|
|
|
Generally you will set up a `QInstance` in your application's startup flow, and then place it in the server (e.g., javalin).
|
|
But, if, during application-code runtime, you need access to any of the meta-data in the instance, you access it
|
|
via the `QContext` object's static `getInstance()` method. This can be useful, for example, to get a list of the defined
|
|
tables in the application, or fields in a table, or details about a field, etc.
|
|
|
|
It is generally considered risky and/or not a good idea at all to modify the `QInstance` after it has been validated and
|
|
a server is running. Future versions of QQQ may in fact restrict modifications to the instance after validation.
|