There are several ways to write a new entity:
VanillaSoftwareProcess
and configuring it with your scripts.VanillaWindowsProcess
and configure the PowerShell scripts.GistGenerator
example. These can use utilities such as HttpTool
and BashCommands
.SoftwareProcess
. However, the YAML approach is strongly recommended over this approach.The rest of this section covers writing an entity in pure-java (or other JVM languages).
All entities have an interface and an implementation. The methods on the interface are its effectors; the interface also defines its sensors.
Entities are created through the management context (rather than calling the
constructor directly). This returns a proxy for the entity rather than the real instance, which is important in a distributed management plane.
All entity implementations inherit from AbstractEntity
, often through one of the following:
SoftwareProcessImpl
: if it's a software processVanillaJavaAppImpl
: if it's a plain-old-java appJavaWebAppSoftwareProcessImpl
: if it's a JVM-based web-appDynamicClusterImpl
, DynamicGroupImpl
or AbstractGroupImpl
: if it's a collection of other entitiesSoftware-based processes tend to use drivers to install and launch the remote processes onto locations which support that driver type. For example, AbstractSoftwareProcessSshDriver
is a common driver superclass, targetting SshMachineLocation
(a machine to which Brooklyn can ssh). The various SoftwareProcess
entities above (and some of the exemplars listed at the end of this page) have their own dedicated drivers.
Finally, there are a collection of traits, such as Resizable
, in the package brooklyn.entity.trait
. These provide common sensors and effectors on entities, supplied as interfaces. Choose one (or more) as appropriate.
NOTE: Consider instead writing a YAML blueprint for your entity.
So to get started:
@ImplementedBy(YourEntityImpl.class)
on your interface, where YourEntityImpl
will be the class name for your entity implementation.SoftwareProcessDriver
). The naming convention is to have a suffix “Driver”.BasicEntityDriverFactory
.public Class getDriverInterface()
method in the entity implementation, to specify your driver interface.connectSensors()
of SoftwareProcessImpl
).. See the sensor feeds, such as HttpFeed
and JmxFeed
.Any JVM language can be used to write an entity. However use of pure Java is encouraged for entities in core brooklyn.
A few handy pointers will help make it easy to build your own entities. Check out some of the exemplar existing entities (note, some of the other entities use deprecated utilities and a deprecated class hierarchy; it is suggested to avoid these, looking at the ones below instead):
JBoss7Server
MySqlNode
You might also find the following helpful: