In general, a rule can return any type of result that makes sense for the business purpose of the rule. The return type on the fire() method is java.lang.Object so any Java object can be returned, including arrays. You cannot return a Java primitive since the results must be an object. However, you can return the object form of the primitives. For example, you can return a java.lang.Integer instead of an int. If the rule is fired remotely, the returned value must implement java.io.Serializable.