Introduction
Toolkit of capabilities
Eve in Java has evolved significantly since its original creation.
Starting from release 3.0 Eve is a toolkit to add agent
capabilities to your POJOs. There is no longer a host-environment which needs to be configured,
nor are you forced to extend the Agent class. You can easily pick capabilities
that suit your particular need, the capabilities carry no interdependencies, nor
assumptions about the structure of your agents. However, for ease of use, there is
still the option of extending the Agent class, but this is no longer a requirement.
This is the home of the Java implementation of Eve. Through Eve you can either develop agent solutions from scratch or add agent capabilities to your existing Java application. Eve consists of a series of Java library projects, that provide agent capabilities to your POJOs. For dedicated agent applications, there are also various standard Agent classes, which act like templates to the capabilities.
Our build environment is managed through Maven and we are deployed to Maven Central. Another possibility to obtain
Eve is through a code checkout from Github.
For the development roadmap you can refer to our Trello board.
The documentation consists of a couple of sections:
- Code structure - A structural overview of the available code in the Git repository
- Agents - The out-of-the-box agent classes of Eve. These agents combine a basic set of capabilities, in a standardized manner
- Capabilities - A reference/code example overview of the available capabilities
- Deployment scenarios - Project deployment scenarios, usable as a getting started description
Besides this documentation, the best place to get familiar with Eve code is by looking through the “/tests/src/test/java/com/almende/eve/test/*” code.
Maven
To add the Eve libraries to a maven project, add one of the following dependencies to the projects
pom.xml file. Although it is possible to add the libraries independently, it is highly advisable to
use one of the bundle packages.
This is a bundle incorporating all Eve libraries, aimed to be included in an existing webapplication.
<dependency>
<groupId>com.almende.eve</groupId>
<artifactId>eve-bundle-full</artifactId>
<version>3.1.1</version>
</dependency>
This is a bundle incorporating all Eve libraries, including an embedded Jetty setup.
This bundle is aimed to provide a fully standalone setup.
<dependency>
<groupId>com.almende.eve</groupId>
<artifactId>eve-bundle-full-embed</artifactId>
<version>3.1.1</version>
</dependency>
This is a bundle for using Eve on Android devices, using XMPP as the transport.
<dependency>
<groupId>com.almende.eve</groupId>
<artifactId>eve-bundle-android</artifactId>
<version>3.1.1</version>
</dependency>
This is a bundle for using Eve on Android devices, using Websockets as the transport.
<dependency>
<groupId>com.almende.eve</groupId>
<artifactId>eve-bundle-android-ws</artifactId>
<version>3.1.1</version>
</dependency>
Library structure
Eve is structured around a common Capability model. Various agent capabilities are provided: State storage, scheduling, transports, agent lifecycle, etc. These capabilities are provided in Java libraries.
The libraries have the following top-level structure:
(foldername (artifactid) - description)
- /eve_parent/ (eve) - Parent project, compile the entire project from this folder
- /eve_common/ (eve-common) - Capability model, utilities
- /states/
- eve_state/ (eve-state-common) - State interfaces, Memory and File State implementations
- eve_state_couch/ (eve-state-couch) - CouchDB State implementation
- eve_state_mongo/ (eve-state-mongo) - MongoDB State implementation
- eve_state_redis/ (eve-state-redis) - Redis State implementation
- /transports/
- eve_transport/ (eve-transport-common) - Transport interfaces, Local transport
- eve_transport_http_common/ (eve-transport-http-common) - Common code for HTTP and Websocket transports
- eve_transport_http/ (eve-transport-http) - HTTP transport, contains o.a. EveServlet
- eve_transport_ws/ (eve-transport-ws) - WebSocket transport, JSR 356
- eve_transport_http_jetty/ (eve-transport-http-jetty) - Embedded Jetty setup
- eve_transport_xmpp/ (eve-transport-xmpp) - XMPP transport implementation
- eve_transport_zmq/ (eve-transport_zmq) - ZMQ transport implementation, only works correctly on Linux 64bit, due to dependencies
- /scheduling/
- eve_scheduling/ (eve-scheduling-common) - Scheduler interfaces, Non-persistent scheduler
- eve_persistent_scheduler/ (eve-scheduling-persistent) - Persistent scheduler, remembers tasks in some state storage
- eve_sync_scheduler/ (eve-scheduling-sync) - Synchronizing scheduler, can synchronize NTP-like with other sync schedulers
- /protocols/
- eve_protocol_common/ (eve-protocol) - Protocol stack
- eve_protocol_jsonrpc/ (eve-protocol-jsonrpc) - JSON-RPC engine
- /eve_agents/ (eve-agents) - The actual Agent implementations, to be extended as base of your own agents
- /eve_deployment/ (eve-deploy) - Deployment support tools: A main class for standalone applications and a standard ServletListener for Servlet setups
- /eve_instantiation/ (eve-instantiation) - Framework to let instantiate and track agents, including wake on requests
- /tests/ (eve-tests) - Coverage tests and example code
- web (eve-tests-war) - Servlet Web setup for coverage tests
- /demos/
- eve_getting_started/ - A simple example project
- eve_gol_demo/ - Conway's game of live demo, using Eve agents
- eve_gg_demo/ - A global goal demo, including visualisation
- /bundles/ - Repackaged library bundles, for simpler Maven configuration
- eve_full/ (eve-bundle-full) - All Eve libraries combined, exept for the embedded Jetty and the ZMQ transport
- eve_full_embed/ (eve-bundle-full-embed) - All Eve libraries combined, including the embedded Jetty
- eve_android/ (eve-bundle-android) - Eve libraries for usage on Android, contains the XMPP transport with dependencies
- eve_android_ws/ (eve-bundle-android-ws) - Eve libraries for usage on Android, contains the websocket transport
Site last rendered 30 March 2015