提交 ad94f5ad 编写于 作者: F Frankie Wu

Merge branch 'master' of ssh://192.168.8.22:58422/cat

......@@ -3,6 +3,10 @@ package com.dianping.bee.engine.build;
import java.util.ArrayList;
import java.util.List;
import com.dianping.bee.db.cat.CatDatabase;
import com.dianping.bee.db.cat.EventIndexer;
import com.dianping.bee.db.cat.TransactionIndexer;
import com.dianping.bee.db.dog.DogDatabase;
import com.dianping.bee.engine.spi.DatabaseProvider;
import com.dianping.bee.engine.spi.StatementManager;
import com.dianping.bee.engine.spi.TableProviderManager;
......@@ -22,6 +26,7 @@ import com.dianping.bee.engine.spi.evaluator.logical.LiteralNumberEvaluator;
import com.dianping.bee.engine.spi.evaluator.logical.LiteralStringEvaluator;
import com.dianping.bee.engine.spi.evaluator.logical.LogicalAndEvaluator;
import com.dianping.bee.engine.spi.evaluator.logical.LogicalOrEvaluator;
import com.dianping.bee.engine.spi.evaluator.logical.ParamMarkerEvaluator;
import com.dianping.bee.engine.spi.handler.internal.DescHandler;
import com.dianping.bee.engine.spi.handler.internal.PrepareHandler;
import com.dianping.bee.engine.spi.handler.internal.SelectHandler;
......@@ -72,10 +77,19 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
defineHandlers(all);
defineLogicalEvaluators(all);
defineFunctionEvaluators(all);
defineDatabaseProvider(all);
return all;
}
// FIXME: need dependency reverse
private void defineDatabaseProvider(List<Component> all) {
all.add(C(DatabaseProvider.class, "cat", CatDatabase.class));
all.add(C(TransactionIndexer.class));
all.add(C(EventIndexer.class));
all.add(C(DatabaseProvider.class, "dog", DogDatabase.class));
}
private void defineFunctionEvaluators(List<Component> all) {
all.add(C(Evaluator.class, ConcatEvaluator.ID, ConcatEvaluator.class));
}
......@@ -110,7 +124,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(Evaluator.class, InEvaluator.ID, InEvaluator.class));
all.add(C(Evaluator.class, IdentifierEvaluator.ID, IdentifierEvaluator.class));
all.add(C(Evaluator.class, ParamMarkerEvaluator.ID, ParamMarkerEvaluator.class));
all.add(C(Evaluator.class, LiteralStringEvaluator.ID, LiteralStringEvaluator.class));
all.add(C(Evaluator.class, LiteralNumberEvaluator.ID, LiteralNumberEvaluator.class));
all.add(C(Evaluator.class, LiteralBooleanEvaluator.ID, LiteralBooleanEvaluator.class));
......
package com.dianping.bee.engine.spi.evaluator.logical;
import com.alibaba.cobar.parser.ast.expression.primary.ParamMarker;
import com.dianping.bee.engine.spi.evaluator.AbstractEvaluator;
import com.dianping.bee.engine.spi.row.RowContext;
public class ParamMarkerEvaluator extends AbstractEvaluator<ParamMarker, Object> {
public static final String ID = ParamMarker.class.getName();
@Override
public Object evaluate(RowContext ctx, ParamMarker expr) {
return ctx.getFirstAttribute(expr.getParamIndex(), "");
}
}
......@@ -166,7 +166,13 @@ public class SingleTableStatementBuilder extends EmptySQLASTVisitor {
Number value = ((LiteralNumber) right).getNumber();
m_stmt.addAttribute(name, value);
}
} else if (right instanceof ParamMarker) {
// FIXME
String name = ((Identifier) left).getIdText();
String value = "?";
m_stmt.addAttribute(name, value);
}
}
super.visit(node);
......
package com.dianping.bee.engine.spi.row;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
......@@ -27,7 +29,7 @@ public class DefaultRowContext implements RowContext {
}
@SuppressWarnings("unchecked")
@Override
@Override
public <T> List<T> getAttributeValues(String name) {
return (List<T>) m_attributes.get(name);
}
......@@ -45,7 +47,7 @@ public class DefaultRowContext implements RowContext {
@SuppressWarnings("unchecked")
@Override
public <T> T getFirstAttribute(String name, T defaultValue) {
public <T> T getFirstAttribute(String name, T defaultValue) {
List<T> list = (List<T>) m_attributes.get(name);
if (list == null || list.isEmpty()) {
......@@ -55,6 +57,27 @@ public class DefaultRowContext implements RowContext {
}
}
@SuppressWarnings("unchecked")
@Override
public <T> T getFirstAttribute(int attrIndex, T defaultValue) {
int index = 0;
Collection<List<Object>> values = m_attributes.values();
Iterator<List<Object>> iterator = values.iterator();
while (iterator.hasNext() && index++ < attrIndex) {
iterator.next();
}
if (iterator.hasNext()) {
List<T> list = (List<T>) iterator.next();
if (list == null || list.isEmpty()) {
return defaultValue;
} else {
return list.get(0);
}
}
return defaultValue;
}
@SuppressWarnings("unchecked")
@Override
public <T> T getValue(int colIndex) {
......@@ -85,6 +108,7 @@ public class DefaultRowContext implements RowContext {
public void setColumnValue(int colIndex, Object value) {
m_values[colIndex] = value;
}
public void setRowListener(RowListener listener) {
m_listener = listener;
}
......
......@@ -16,6 +16,8 @@ public interface RowContext {
public <T> T getFirstAttribute(String name, T defaultValue);
public <T> T getFirstAttribute(int attrIndex, T defaultValue);
public <T> T getValue(int colIndex);
public <T> T getValue(String columnName);
......
......@@ -177,6 +177,11 @@
<role-hint>com.alibaba.cobar.parser.ast.expression.primary.Identifier</role-hint>
<implementation>com.dianping.bee.engine.spi.evaluator.logical.IdentifierEvaluator</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.evaluator.Evaluator</role>
<role-hint>com.alibaba.cobar.parser.ast.expression.primary.ParamMarker</role-hint>
<implementation>com.dianping.bee.engine.spi.evaluator.logical.ParamMarkerEvaluator</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.evaluator.Evaluator</role>
<role-hint>com.alibaba.cobar.parser.ast.expression.primary.literal.LiteralString</role-hint>
......@@ -197,5 +202,23 @@
<role-hint>com.alibaba.cobar.parser.ast.expression.primary.function.string.Concat</role-hint>
<implementation>com.dianping.bee.engine.spi.evaluator.function.ConcatEvaluator</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>cat</role-hint>
<implementation>com.dianping.bee.db.cat.CatDatabase</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.TransactionIndexer</role>
<implementation>com.dianping.bee.db.cat.TransactionIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.EventIndexer</role>
<implementation>com.dianping.bee.db.cat.EventIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>dog</role-hint>
<implementation>com.dianping.bee.db.dog.DogDatabase</implementation>
</component>
</components>
</plexus>
package com.dianping.bee.db;
import org.apache.commons.lang3.RandomStringUtils;
package com.dianping.bee.db.cat;
import com.dianping.bee.engine.spi.DatabaseProvider;
import com.dianping.bee.engine.spi.TableProvider;
import com.dianping.bee.engine.spi.index.Index;
import com.dianping.bee.engine.spi.meta.ColumnMeta;
import com.dianping.bee.engine.spi.meta.IndexMeta;
import com.dianping.bee.engine.spi.row.RowContext;
public class CatDatabase implements DatabaseProvider {
......@@ -62,18 +59,18 @@ public class CatDatabase implements DatabaseProvider {
}
@Override
public IndexMeta[] getIndexes() {
public IndexMeta getDefaultIndex() {
return null;
}
@Override
public String getName() {
return m_name;
public IndexMeta[] getIndexes() {
return null;
}
@Override
public IndexMeta getDefaultIndex() {
return null;
public String getName() {
return m_name;
}
}
......@@ -165,6 +162,11 @@ public class CatDatabase implements DatabaseProvider {
}
}
@Override
public Class<? extends Index> getIndexClass() {
return EventIndexer.class;
}
@Override
public int getLength() {
return m_columns.length;
......@@ -178,11 +180,6 @@ public class CatDatabase implements DatabaseProvider {
throw new IndexOutOfBoundsException("size: " + m_orders.length + ", index: " + index);
}
}
@Override
public Class<? extends Index> getIndexClass() {
return TransactionIndexer.class;
}
}
public static enum TransactionColumn implements ColumnMeta {
......@@ -263,6 +260,11 @@ public class CatDatabase implements DatabaseProvider {
}
}
@Override
public Class<? extends Index> getIndexClass() {
return TransactionIndexer.class;
}
@Override
public int getLength() {
return m_columns.length;
......@@ -276,49 +278,6 @@ public class CatDatabase implements DatabaseProvider {
throw new IndexOutOfBoundsException("size: " + m_orders.length + ", index: " + index);
}
}
@Override
public Class<? extends Index> getIndexClass() {
throw new UnsupportedOperationException("Not implemented yet!");
}
}
private static class TransactionSampleData {
private static Object[][] sampleData;
static {
sampleData = new Object[10][];
int columnSize = TransactionColumn.values().length;
for (int i = 0; i < sampleData.length; i++) {
sampleData[i] = new Object[columnSize];
for (int j = 0; i < columnSize; j++) {
if (TransactionColumn.values()[j].getType().getSimpleName().equals("String")) {
sampleData[i][j] = RandomStringUtils.randomAlphabetic(5);
} else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Integer")
|| TransactionColumn.values()[j].getType().getSimpleName().equals("Long")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(3);
} else {
sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5);
}
}
}
}
public static Object[][] getSampleData() {
return sampleData;
}
}
private class TransactionIndexer implements Index {
@Override
public void query(RowContext ctx) throws Exception {
Object[][] sampleData = TransactionSampleData.getSampleData();
for (int i = 0; i < sampleData.length; i++) {
ctx.apply();
}
}
}
@Override
......
/**
* Project: bee-engine
*
* File Created at 2012-9-3
*
* Copyright 2012 dianping.com.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Dianping Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with dianping.com.
*/
package com.dianping.bee.db.cat;
import java.util.Random;
import org.apache.commons.lang3.RandomStringUtils;
import com.dianping.bee.db.cat.CatDatabase.EventColumn;
import com.dianping.bee.engine.spi.index.Index;
import com.dianping.bee.engine.spi.row.RowContext;
public class EventIndexer implements Index {
@Override
public void query(RowContext ctx) throws Exception {
Object[][] sampleData = EventSampleData.getSampleData();
for (int i = 0; i < sampleData.length; i++) {
applyRow(ctx, sampleData[i]);
}
}
/**
* @param objects
*/
private void applyRow(RowContext ctx, Object[] row) {
int cols = ctx.getColumnSize();
for (int i = 0; i < cols; i++) {
EventColumn column = ctx.getColumn(i);
switch (column) {
case Type:
ctx.setColumnValue(i, row[2]);
break;
case Name:
ctx.setColumnValue(i, row[3]);
break;
case Domain:
ctx.setColumnValue(i, row[1]);
break;
case StartTime:
ctx.setColumnValue(i, row[0]);
break;
case MinDuration:
ctx.setColumnValue(i, row[7]);
break;
case MaxDuration:
ctx.setColumnValue(i, row[8]);
break;
case SampleMessage:
ctx.setColumnValue(i, row[6]);
break;
case TotalCount:
ctx.setColumnValue(i, row[4]);
break;
case Line95:
ctx.setColumnValue(i, row[11]);
break;
case Failures:
ctx.setColumnValue(i, row[5]);
default:
// TODO more here
}
}
ctx.apply();
}
static class EventSampleData {
private static Object[][] sampleData;
static {
sampleData = new Object[10][];
Random random = new Random();
int columnSize = EventColumn.values().length;
for (int i = 0; i < sampleData.length; i++) {
sampleData[i] = new Object[columnSize];
for (int j = 0; j < columnSize; j++) {
if (EventColumn.values()[j].getName().equalsIgnoreCase("Domain")) {
sampleData[i][j] = random.nextBoolean() ? "MobileApi" : RandomStringUtils.randomAlphabetic(5);
continue;
} else if (EventColumn.values()[j].getName().equalsIgnoreCase("StartTime")) {
sampleData[i][j] = random.nextBoolean() ? "20120822" : RandomStringUtils.randomNumeric(8);
continue;
}
if (EventColumn.values()[j].getType().getSimpleName().equals("String")) {
sampleData[i][j] = RandomStringUtils.randomAlphabetic(5);
} else if (EventColumn.values()[j].getType().getSimpleName().equals("Integer")
|| EventColumn.values()[j].getType().getSimpleName().equals("Long")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(3);
} else {
sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5);
}
}
}
}
public static Object[][] getSampleData() {
return sampleData;
}
}
}
\ No newline at end of file
/**
* Project: bee-engine
*
* File Created at 2012-9-3
*
* Copyright 2012 dianping.com.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Dianping Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with dianping.com.
*/
package com.dianping.bee.db.cat;
import java.util.Random;
import org.apache.commons.lang3.RandomStringUtils;
import com.dianping.bee.db.cat.CatDatabase.TransactionColumn;
import com.dianping.bee.engine.spi.index.Index;
import com.dianping.bee.engine.spi.row.RowContext;
public class TransactionIndexer implements Index {
@Override
public void query(RowContext ctx) throws Exception {
Object[][] sampleData = TransactionSampleData.getSampleData();
for (int i = 0; i < sampleData.length; i++) {
applyRow(ctx, sampleData[i]);
}
}
/**
* @param objects
*/
private void applyRow(RowContext ctx, Object[] row) {
int cols = ctx.getColumnSize();
for (int i = 0; i < cols; i++) {
TransactionColumn column = ctx.getColumn(i);
switch (column) {
case Type:
ctx.setColumnValue(i, row[2]);
break;
case Name:
ctx.setColumnValue(i, row[3]);
break;
case Domain:
ctx.setColumnValue(i, row[1]);
break;
case StartTime:
ctx.setColumnValue(i, row[0]);
break;
case MinDuration:
ctx.setColumnValue(i, row[7]);
break;
case MaxDuration:
ctx.setColumnValue(i, row[8]);
break;
case SampleMessage:
ctx.setColumnValue(i, row[6]);
break;
case TotalCount:
ctx.setColumnValue(i, row[4]);
break;
case Line95:
ctx.setColumnValue(i, row[11]);
break;
case Failures:
ctx.setColumnValue(i, row[5]);
default:
// TODO more here
}
}
ctx.apply();
}
static class TransactionSampleData {
private static Object[][] sampleData;
static {
sampleData = new Object[10][];
Random random = new Random();
int columnSize = TransactionColumn.values().length;
for (int i = 0; i < sampleData.length; i++) {
sampleData[i] = new Object[columnSize];
for (int j = 0; j < columnSize; j++) {
if (TransactionColumn.values()[j].getName().equalsIgnoreCase("Domain")) {
sampleData[i][j] = random.nextBoolean() ? "MobileApi" : RandomStringUtils.randomAlphabetic(5);
continue;
} else if (TransactionColumn.values()[j].getName().equalsIgnoreCase("StartTime")) {
sampleData[i][j] = random.nextBoolean() ? "20120822" : RandomStringUtils.randomNumeric(8);
continue;
}
if (TransactionColumn.values()[j].getType().getSimpleName().equals("String")) {
sampleData[i][j] = RandomStringUtils.randomAlphabetic(5);
} else if (TransactionColumn.values()[j].getType().getSimpleName().equals("Integer")
|| TransactionColumn.values()[j].getType().getSimpleName().equals("Long")) {
sampleData[i][j] = RandomStringUtils.randomNumeric(3);
} else {
sampleData[i][j] = RandomStringUtils.randomAlphanumeric(5);
}
}
}
}
public static Object[][] getSampleData() {
return sampleData;
}
}
}
\ No newline at end of file
package com.dianping.bee.db;
package com.dianping.bee.db.dog;
import com.dianping.bee.engine.spi.DatabaseProvider;
import com.dianping.bee.engine.spi.TableProvider;
......@@ -48,34 +48,6 @@ public class DogDatabase implements DatabaseProvider {
return m_name;
}
// @Override
// public RowSet queryByIndex(IndexMeta index, ColumnMeta[] selectColumns) {
// ColumnMeta[] columns = selectColumns;
// DefaultRowSet rowSet = new DefaultRowSet(columns);
//
// for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
// Cell[] cells = new Cell[columns.length];
//
// for (int colIndex = 0; colIndex < cells.length; colIndex++) {
// ColumnMeta columnMeta = columns[colIndex];
// String randomValue = null;
// if (columnMeta.getType().getSimpleName().equals("String")) {
// randomValue = RandomStringUtils.randomAlphabetic(5);
// } else if (columnMeta.getType().getSimpleName().equals("Integer")
// || columnMeta.getType().getSimpleName().equals("Long")) {
// randomValue = RandomStringUtils.randomNumeric(3);
// } else {
// randomValue = RandomStringUtils.randomAlphanumeric(5);
// }
// cells[colIndex] = new DefaultCell(columnMeta, randomValue);
// }
//
// Row row = new DefaultRow(cells);
// rowSet.addRow(row);
// }
// return rowSet;
// }
@Override
public IndexMeta getDefaultIndex() {
return TransactionIndex.IDX_STARTTIME_DOMAIN;
......
......@@ -72,7 +72,7 @@ public class JDBCTest extends ComponentTestCase {
Assert.assertNotNull(rs);
rs.last();
Assert.assertEquals(0, rs.getRow());
displayResultSet(rs);
displayResultSet(sql, rs);
conn.close();
}
......@@ -85,18 +85,20 @@ public class JDBCTest extends ComponentTestCase {
String driver = "com.mysql.jdbc.Driver";
String userName = "test";
String password = "test";
String sql = null;
Class.forName(driver).newInstance();
DriverManager.setLoginTimeout(600);
Connection conn = DriverManager.getConnection(url + dbName, userName, password);
Statement stmt = conn.createStatement();
Assert.assertNotNull(stmt);
ResultSet rs = stmt.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?");
Assert.assertEquals(2, rs.getMetaData().getColumnCount());
sql = "select type, sum(failures), domain from transaction where domain='MobileApi' and starttime='20120822'";
ResultSet rs = stmt.executeQuery(sql);
Assert.assertEquals(3, rs.getMetaData().getColumnCount());
Assert.assertNotNull(rs);
rs.last();
Assert.assertTrue(rs.getRow() > 0);
displayResultSet(rs);
displayResultSet(sql, rs);
conn.close();
}
......@@ -108,6 +110,7 @@ public class JDBCTest extends ComponentTestCase {
String driver = "com.mysql.jdbc.Driver";
String userName = "test";
String password = "test";
String sql = null;
Class.forName(driver).newInstance();
DriverManager.setLoginTimeout(600);
......@@ -115,34 +118,37 @@ public class JDBCTest extends ComponentTestCase {
Statement stmt1 = conn.createStatement();
Assert.assertNotNull(stmt1);
ResultSet rs1 = stmt1.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?");
sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'";
ResultSet rs1 = stmt1.executeQuery(sql);
Assert.assertEquals(2, rs1.getMetaData().getColumnCount());
Assert.assertNotNull(rs1);
rs1.last();
Assert.assertTrue(rs1.getRow() > 0);
displayResultSet(rs1);
displayResultSet(sql, rs1);
Statement stmt2 = conn.createStatement();
Assert.assertNotNull(stmt2);
ResultSet rs2 = stmt2.executeQuery("select type,sum(failures) from event");
sql = "select type,sum(failures) from event";
ResultSet rs2 = stmt2.executeQuery(sql);
Assert.assertEquals(2, rs2.getMetaData().getColumnCount());
Assert.assertNotNull(rs2);
rs2.last();
Assert.assertTrue(rs2.getRow() > 0);
displayResultSet(rs2);
displayResultSet(sql, rs2);
Statement stmt3 = conn.createStatement();
Assert.assertNotNull(stmt3);
ResultSet rs3 = stmt3.executeQuery("select * from transaction");
sql = "select * from transaction";
ResultSet rs3 = stmt3.executeQuery(sql);
Assert.assertTrue(rs3.getMetaData().getColumnCount() > 0);
Assert.assertNotNull(rs3);
rs3.last();
Assert.assertTrue(rs3.getRow() > 0);
displayResultSet(rs3);
displayResultSet(sql, rs3);
conn.close();
}
// @Test
@Test
public void testMultiQueryInMultiDatabaese() throws InstantiationException, IllegalAccessException,
ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:2330/";
......@@ -150,6 +156,7 @@ public class JDBCTest extends ComponentTestCase {
String driver = "com.mysql.jdbc.Driver";
String userName = "test";
String password = "test";
String sql = null;
Class.forName(driver).newInstance();
DriverManager.setLoginTimeout(600);
......@@ -157,28 +164,31 @@ public class JDBCTest extends ComponentTestCase {
Statement stmt1 = conn1.createStatement();
Assert.assertNotNull(stmt1);
ResultSet rs1 = stmt1.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?");
sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'";
ResultSet rs1 = stmt1.executeQuery(sql);
Assert.assertEquals(2, rs1.getMetaData().getColumnCount());
Assert.assertNotNull(rs1);
rs1.last();
Assert.assertTrue(rs1.getRow() > 0);
displayResultSet(rs1);
displayResultSet(sql, rs1);
conn1.close();
dbName = "dog";
Connection conn2 = DriverManager.getConnection(url + dbName, userName, password);
Statement stmt2 = conn2.createStatement();
Assert.assertNotNull(stmt2);
ResultSet rs2 = stmt2.executeQuery("select type, sum(failures) from transaction where domain=? and starttime=?");
sql = "select type, sum(failures) from transaction where domain='MobileApi' and starttime='20120822'";
ResultSet rs2 = stmt2.executeQuery(sql);
Assert.assertEquals(2, rs2.getMetaData().getColumnCount());
Assert.assertNotNull(rs2);
rs2.last();
Assert.assertTrue(rs2.getRow() > 0);
displayResultSet(rs2);
displayResultSet(sql, rs2);
conn2.close();
}
private void displayResultSet(ResultSet rs) throws SQLException {
private void displayResultSet(String sql, ResultSet rs) throws SQLException {
System.out.println("Query: " + sql);
ResultSetMetaData meta = rs.getMetaData();
int columns = meta.getColumnCount();
for (int column = 1; column <= columns; column++) {
......
......@@ -4,8 +4,10 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.dianping.bee.db.CatDatabase;
import com.dianping.bee.db.DogDatabase;
import com.dianping.bee.db.cat.CatDatabase;
import com.dianping.bee.db.cat.EventIndexer;
import com.dianping.bee.db.cat.TransactionIndexer;
import com.dianping.bee.db.dog.DogDatabase;
import com.dianping.bee.engine.spi.DatabaseProvider;
import com.site.lookup.configuration.AbstractResourceConfigurator;
import com.site.lookup.configuration.Component;
......@@ -20,6 +22,8 @@ public class JDBCTestConfigurator extends AbstractResourceConfigurator {
List<Component> all = new ArrayList<Component>();
all.add(C(DatabaseProvider.class, "cat", CatDatabase.class));
all.add(C(EventIndexer.class));
all.add(C(TransactionIndexer.class));
all.add(C(DatabaseProvider.class, "dog", DogDatabase.class));
return all;
......
......@@ -3,12 +3,20 @@
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>cat</role-hint>
<implementation>com.dianping.bee.db.CatDatabase</implementation>
<implementation>com.dianping.bee.db.cat.CatDatabase</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.EventIndexer</role>
<implementation>com.dianping.bee.db.cat.EventIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.db.cat.TransactionIndexer</role>
<implementation>com.dianping.bee.db.cat.TransactionIndexer</implementation>
</component>
<component>
<role>com.dianping.bee.engine.spi.DatabaseProvider</role>
<role-hint>dog</role-hint>
<implementation>com.dianping.bee.db.DogDatabase</implementation>
<implementation>com.dianping.bee.db.dog.DogDatabase</implementation>
</component>
</components>
</plexus>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册