User's Manual

Chapter 4. WAF Component: Services 17
1. The message body should have a MIME type of text/plain or text/html.
2. Each attachment to the message can have an arbitrary MIME type and format. Messages can
also refer to any ACSObject on the system.
MessageParts represent a message part (an attachment) in the sense of a multipart MIME message.
Each part has some content represented as an arbitrary block of bytes and a MIME type that identifies
the format of the content.
A ThreadedMessage is an extension of Message that allows messages to be organized into discus-
sion threads with a tree structure. Messages at the first level are referred to as root messages.
Warning
If you delete the root message in a ThreadedMessage tree, all of its children are deleted.
4.7. Notification Service
The notification service is built on top of the mail and messaging services. Notification provides
persistent storage of messages, digest processing, automatic error recovery, and expansion of groups
into individual recipients.
Tip
When looking for a service to do alerting, consider the differences between the notification service
and the lower-level mail service. The mail API is capable of handling simple alerts in plain-text. If
you need added features, notification provides these.
4.8. Portal Service
The portal service provides basic domain classes that represent portlets and portals (a set of zero or
more portlets). The portal service is used by the Red Hat Portal Server and any WAF application that
provides portlets for displaying specific content to the end user.
For more information about utilizing portal services, see the Red Hat Portal Server Developer Guide.
4.9. Search Service
The search service provides APIs for indexing and searching content. Two search engines are sup-
ported by WAF: Oracle interMedia™ and Lucene. interMedia requires an Oracle database, while
Lucene is an open-source, database-independent search engine (see http://jakarta.apache.org/lucene/
for more information).
Objects that should be indexed register themselves with a SearchableObserver, which indexes the
object whenever the object is persisted. If you extend WAF with custom content types, making the
custom content searchable is a simple matter of implementing com.arsdigita.lucene.Adapter.