Вы могли бы сделать что-то вроде этого
private Dictionary<EnumType, Action<param1Type,param2Type,etc> strategies =
new Dictionary<EnumType, Action<param1Type, param2Type, etc>();
...
private void LoadDictionary()
{
strategies.Add(enumType.Option1, Method1);
strategies.Add(enumType.Option2, Method2);
...
}
...
private void Method1(param1Type param, param2Type param2, etc)
{
// your specific logic here
}
И вы используете его как это:
public void DoSomethingDependingOnCase(enumType option, param1Type param1, param2Type param2)
{
strategies[option].Invoke(param1,param2,etc);
}
Попробуйте пометить метод сессионного компонента без сохранения состояния как транзакцию NOT_SUPPORTED или NEVER, что приведет к его запуску вне глобальной транзакции. (Обратите внимание, что вам все равно придется это сделать, чтобы ваш вызов connection.commit () был действительным - скорее всего, он просто не зашёл так далеко из-за тайм-аута).
@javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
public void yourStatelessEJBMethod() {
... code that invokes stored procedure and commits transaction
}