| ------ |
| Using interceptors |
| ------ |
| |
| Using interceptors |
| |
| As of version 2.2, MetaModel has introduced an interceptor mechanism which allows you to add code to |
| your DataContext that will be invoked before or after certain operations. |
| |
| The interceptors are implemented as a decorating, logical DataContext around your physical DataContext. |
| In the graph below the 5 types of interceptors are depicted: |
| |
| [interceptors.png] Modules in MetaModel |
| |
| To get a handle for an interceptable DataContext, use |
| the {{{./apidocs/org/eobjects/metamodel/intercept/Interceptors.html} Interceptors}}.intercept(...) method. |
| |
| To apply an interceptor, implement one of the five interfaces: |
| |
| * QueryInterceptor: To intercept queries before they are executed. |
| |
| * DataSetInterceptor: To intercept datasets before they are returned. |
| |
| * TableCreationInterceptor: To intercept "create table" operations before they are executed. |
| |
| * RowInsertionInterceptor: To intercept "insert into" operations before they are executed. |
| |
| * SchemaInterceptor: To intercept schemas before they are returned. |
| |
| Once you've implemented your interceptor, for instance a QueryInterceptor, add it to an InterceptableDataContext, like this: |
| |
| +-------------------------------+ |
| public DataContext addMyInterceptor(DataContext dc) { |
| InterceptableDataContext interceptableDataContext = Interceptors.intercept(dc); |
| interceptableDataContext.addQueryInterceptor(new MyQueryInterceptor()); |
| return interceptableDataContext; |
| } |
| +-------------------------------+ |
| |
| The important part about this code snippet is, that it returns the InterceptableDataContext instance. |
| Since this is itself also an implementation of the DataContext interface, you should be able to use this |
| throughout your code without modifications. |