Vitria is message oriented middleware (MOM) with business process management (BPM). There are four main development components: *'''Automator''' - visual development tool for implementing BPM *'''Events''' - The messages that flow through the system. *'''Channels''' - Persistent Message Queues *'''Connectors''' - Translate, route, and transport events between external systems and Vitria Channels. Vitria implementations require different patterns and concerns than other architectures. Also, the pitfalls are equally as different. '''Vitria Problems''' Vitria, through an effective architecture, solves most middleware problems. However, from an implementation standpoint, Vitria fails in many regards. *Error Handling - Vitria libraries never declare an exception or throw a runtime exception. Returning null is NOT effective error handling, especially when many interfaces are based on String arguments. *Container Servers Cannot effectively handle Exceptions - if an exception is thrown, the container server will become unstable and retry the transaction until it blows up. *Confusing and overly complex Interfaces *Obfuscated Packaging - Why is it that when I'm trying to find a class I feel like a rat in a maze? *No use of polymorphism or inheritance for ANYTHING. See Over use of static methods. *Over Emphasis on Automator - Slow, full of bugs, flaky behavior, hard to test, and the list goes on and on. Despite all its shortcomings, it is nearly always required at every Vitria project b/c every client says Automator is the reason they bought Vitria. *Over use of static methods - Objects! Who said we need objects? *No understanding of API deprecation - A class or method is not "deprecated" until the compiler says so. Vitria seems to believe that a class can be deprecated simply by adding a line to the documentation or by telling people not to use it. *The com.vitria.fc.io.Log was deprecated. This was the only class with an effective, simple interface, so Vitria decided to get rid of it. They replaced it with a confusing overly complex framework. *Where do my System.out's go? Vitria, demonstrating their lack of simple Java understanding, failed to realize that the System output and error streams can be redirected to a log. Therefore, messages printed to System.out or System.err will go to never never land (an unviewable console).