The problem

The configuration for MDB activation properties allow any key/value to be
specified. At present on the 1.7.x branch, the server will fail to deploy
the application if the activation property is not present on the activation
spec class.

This becomes painful in a scenario where more than one JMS resource
adapter/MDB container is used, and you wish to configure the activation
properties of multiple MDBs in one go using the `mdb.activation.` system
property.. Right now,if an activation property is used that one provider
uses but other one does, the server will throw an exception.

For example, given these parameters,

   -

      mdb.activation.ignore=foo
   -

      mdb.activation.ignore2=bar


if ‘ignore’ and ‘ignore2’ are not present on an MDB’s activation spec
class, the following exception will be thrown.

Caused by: org.apache.openejb.OpenEJBException: Error deploying
'Listener'.  Exception: class org.apache.openejb.OpenEJBException: Unable
to create activation spec: No setter found for the activation spec
properties: [ignore, ignore2]: Unable to create activation spec: No setter
found for the activation spec properties: [ignore, ignore2]

   at
org.apache.openejb.assembler.classic.Assembler.startEjbs(Assembler.java:1430)

   at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:796)

   ... 19 more

Caused by: org.apache.openejb.OpenEJBException: Unable to create activation
spec: No setter found for the activation spec properties: [ignore, ignore2]

   at
org.apache.openejb.core.mdb.MdbContainer.createActivationSpec(MdbContainer.java:292)

   at org.apache.openejb.core.mdb.MdbContainer.deploy(MdbContainer.java:159)

   at
org.apache.openejb.assembler.classic.Assembler.startEjbs(Assembler.java:1417)

   ... 20 more

Caused by: java.lang.IllegalArgumentException: No setter found for the
activation spec properties: [ignore, ignore2]

   at
org.apache.openejb.core.mdb.MdbContainer.createActivationSpec(MdbContainer.java:262)

   ... 22 more


The solution

The best solution to solve the communication among server is to put a new
configuration property in TomEE. When this setting is enabled, overriding
the FailOnUnknownActivationSpec attribute at
org.apache.openejb.core.mdb.MdbContainer class., that will be disabled by
default to don't break the compatibility, when the setter does not exist it
put a log and then keep working.

Basically, my proposal does a backport to 1.7 branch:
https://github.com/apache/tomee/commit/6522f349d0c31d6ec82e66378e0e55eded08aec0

Path:

https://patch-diff.githubusercontent.com/raw/apache/tomee/pull/86.diff

Reply via email to