01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.cocoon.components.modules.output;
18:
19: import org.apache.avalon.framework.component.Component;
20: import org.apache.avalon.framework.configuration.Configuration;
21:
22: import java.util.Map;
23:
24: /**
25: * Communicate results to other components. This could be done via
26: * request attributes, session attribute etc. Implementors should obey
27: * the transactional nature and e.g. queue values as request
28: * attributes and do the real communication e.g. to a bean only when
29: * the transaction completes successfully.
30: *
31: * @author <a href="mailto:haul@apache.org">Christian Haul</a>
32: * @version CVS $Id: OutputModule.java 433543 2006-08-22 06:22:54Z crossley $
33: */
34: public interface OutputModule extends Component {
35:
36: String ROLE = OutputModule.class.getName();
37:
38: /**
39: * communicate an attribute value to further processing logic. OutputModules
40: * work in implicit transaction mode, thus setting an attribute starts an
41: * transaction and sttributes are only visible after the transaction is
42: * successfully completed with a call to commit
43: * @param modeConf column's mode configuration from resource
44: * description. This argument is optional.
45: * @param objectModel The objectModel
46: * @param name The attribute's label, consisting of "table.column"
47: * or "table.column[index]" in case of multiple attributes of the
48: * same spec.
49: * @param value The attriute's value.
50: * */
51: void setAttribute(Configuration modeConf, Map objectModel,
52: String name, Object value);
53:
54: /**
55: * If a database transaction needs to rollback, this is called to
56: * inform the further processing logic about this fact. All
57: * already set attribute values are invalidated. <em>This is difficult
58: * because only the request object can be used to synchronize this
59: * and build some kind of transaction object. Beaware that sending
60: * your data straight to some beans or other entities could result
61: * in data corruption!</em>
62: * */
63: void rollback(Configuration modeConf, Map objectModel, Exception e);
64:
65: /**
66: * Signal that the database transaction completed
67: * successfully. See notes on {@link #rollback(Configuration, Map, Exception)}.
68: * */
69: void commit(Configuration modeConf, Map objectModel);
70: }
|