1 5 package org.terracotta.modules.iBatis_2_2_0; 6 7 import org.osgi.framework.BundleContext; 8 import org.osgi.framework.Constants; 9 import org.terracotta.modules.configuration.TerracottaConfiguratorModule; 10 import org.terracotta.modules.iBatis_2_2_0.object.config.IBatisChangeApplicatorSpec; 11 import org.terracotta.modules.iBatis_2_2_0.object.config.IBatisModuleSpec; 12 13 import com.tc.object.bytecode.ClassAdapterFactory; 14 import com.tc.object.config.ConfigLockLevel; 15 import com.tc.object.config.ModuleSpec; 16 import com.tc.object.config.StandardDSOClientConfigHelper; 17 import com.tc.object.config.TransparencyClassSpec; 18 19 import java.sql.SQLException ; 20 import java.util.Dictionary ; 21 import java.util.Hashtable ; 22 23 public final class IBatisTerracottaConfigurator extends TerracottaConfiguratorModule { 24 protected final void addInstrumentation(final BundleContext context, final StandardDSOClientConfigHelper configHelper) { 25 configHelper.addAutolock("* java.util.Collections$SynchronizedList.*(..)", ConfigLockLevel.WRITE); 26 27 ClassAdapterFactory factory = new IBatisClassAdapter(); 28 29 TransparencyClassSpec spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.mapping.result.loader.EnhancedLazyResultLoader$EnhancedLazyResultLoaderImpl"); 30 configHelper.addAutolock("* com.ibatis.sqlmap.engine.mapping.result.loader.EnhancedLazyResultLoader$EnhancedLazyResultLoaderImpl.loadObject(..)", ConfigLockLevel.WRITE); 31 32 spec = configHelper.getOrCreateSpec(SQLException .class.getName()); 33 spec.markPreInstrumented(); 34 35 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate"); 36 37 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.impl.SqlMapClientImpl"); 38 spec.setCallConstructorOnLoad(true); 39 spec.addTransient("localSqlMapSession"); 40 41 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.execution.SqlExecutor", false, false, false); 42 43 spec = configHelper.getOrCreateSpec("com.ibatis.common.jdbc.SimpleDataSource"); 44 spec.setCallConstructorOnLoad(true); 45 spec.setCustomClassAdapter(factory); 46 spec.addTransient("activeConnections"); 47 spec.addTransient("idleConnections"); 48 configHelper.addAutolock("* com.ibatis.common.jdbc.SimpleDataSource.*(..)", ConfigLockLevel.WRITE); 49 50 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig", false, false, false); 51 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.transaction.BaseTransactionConfig", false, false, false); 52 53 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.transaction.TransactionManager", false, false, false); 54 55 configHelper.addIncludePattern("com.ibatis.common.util.Throttle", false, false, false); 56 configHelper.addAutolock("* com.ibatis.common.util.Throttle.*(..)", ConfigLockLevel.WRITE); 57 configHelper.addIncludePattern("com.ibatis.common.util.ThrottledPool", false, false, false); 58 59 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.type.TypeHandlerFactory", false, false, false); 60 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.type.UnknownTypeHandler", false, false, false); 61 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.type.BaseTypeHandler", false, false, false); 62 63 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.*", false, false, false); 64 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.statement.*", false, false, false); 65 66 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.DomDataExchange", false, false, false); 67 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.ListDataExchange", false, false, false); 68 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.ComplexDataExchange", false, false, false); 69 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.PrimitiveDataExchange", false, false, false); 70 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.ComplexDataExchange", false, false, false); 71 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.BaseDataExchange", false, false, false); 72 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.exchange.DataExchangeFactory", false, false, false); 73 74 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.exchange.JavaBeanDataExchange"); 75 spec.addTransient("outParamPlan"); 76 spec.addTransient("parameterPlan"); 77 78 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.mapping.result.BasicResultMap"); 79 spec.addTransient("remappableResultMappings"); 80 81 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.parameter.*", false, false, false); 82 83 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.sql.stat.StaticSql", false, false, false); 84 85 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.type.*", false, false, false); 86 87 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.result.BasicResultMapping", false, false, false); 88 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.result.AutoResultMap", false, false, false); 89 90 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.scope.*", false, false, false); 91 92 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.scope.SessionScope"); 93 spec.addTransient("transaction"); 94 spec.addTransient("transactionState"); 95 spec.addTransient("savedTransactionState"); 96 97 spec = configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.scope.RequestScope"); 98 spec.addTransient("resultSet"); 99 100 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql", false, false, false); 101 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.sql.SqlText", false, false, false); 102 configHelper.addIncludePattern("com.ibatis.sqlmap.engine.mapping.sql.dynamic.elements.*", false, false, false); 103 configHelper.addIncludePattern("com.ibatis.common.util.PaginatedArrayList", false, false, false); 108 109 116 117 configHelper.addIncludePattern("com.ibatis.dao.engine.impl.DaoProxy", false, false, false); 119 spec = configHelper.getOrCreateSpec("com.ibatis.dao.engine.impl.DaoImpl"); 120 121 spec = configHelper.getOrCreateSpec("com.ibatis.dao.engine.impl.StandardDaoManager"); 122 spec.setCallConstructorOnLoad(true); 123 spec.addTransient("transactionMode"); 124 spec.addTransient("contextInTransactionList"); 125 126 spec = configHelper.getOrCreateSpec("com.ibatis.dao.engine.impl.DaoContext"); 127 spec.setCallConstructorOnLoad(true); 128 spec.addTransient("transaction"); 129 spec.addTransient("state"); 130 131 configHelper.addIncludePattern("com.ibatis.dao.client.template.SqlMapDaoTemplate", false, false, false); 132 configHelper.addIncludePattern("com.ibatis.dao.client.template.DaoTemplate", false, false, false); 133 134 configHelper.addIncludePattern("com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransactionManager", false, false, false); 135 136 138 configHelper.getOrCreateSpec("com.ibatis.sqlmap.engine.impl.SqlMapClientImpl").setCustomClassAdapter(factory); 139 } 140 141 protected final void registerModuleSpec(final BundleContext context) { 142 final Dictionary serviceProps = new Hashtable (); 143 serviceProps.put(Constants.SERVICE_VENDOR, "Terracotta, Inc."); 144 serviceProps.put(Constants.SERVICE_DESCRIPTION, "IBatis Plugin Spec"); 145 context.registerService(ModuleSpec.class.getName(), new IBatisModuleSpec(new IBatisChangeApplicatorSpec(getClass().getClassLoader())), serviceProps); 146 } 147 148 } 149 | Popular Tags |