summaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-04-28 17:30:14 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-04-28 17:30:50 +0200
commitacf2f9c447cd5931a67f6aa2643dad4d919cc27d (patch)
tree7b9b65150627701581e8252dabe38a986dd9284d /sonar-core
parent43854de0cea41fa4acc6929c864e4134301add18 (diff)
downloadsonarqube-acf2f9c447cd5931a67f6aa2643dad4d919cc27d.tar.gz
sonarqube-acf2f9c447cd5931a67f6aa2643dad4d919cc27d.zip
SONAR-5237 - Delegation from BaseIndex rather than BaseMapper
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/db/BaseDao.java74
-rw-r--r--sonar-core/src/main/java/org/sonar/core/db/Dao.java21
-rw-r--r--sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java79
-rw-r--r--sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java39
-rw-r--r--sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java1
-rw-r--r--sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java7
-rw-r--r--sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java5
9 files changed, 155 insertions, 87 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java
index 38c2c849ae0..36fef1aa611 100644
--- a/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/db/BaseDao.java
@@ -20,7 +20,6 @@
package org.sonar.core.db;
import org.apache.ibatis.session.SqlSession;
-import org.sonar.core.cluster.WorkQueue;
import org.sonar.core.persistence.MyBatis;
import java.io.Serializable;
@@ -29,36 +28,22 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
implements Dao<E, K> {
protected MyBatis mybatis;
- private WorkQueue queue;
- protected BaseDao(WorkQueue workQueue, MyBatis myBatis) {
+ protected BaseDao(MyBatis myBatis) {
this.mybatis = myBatis;
- this.queue = workQueue;
}
protected abstract String getIndexName();
- protected abstract void doInsert(E item, SqlSession session);
-
- protected abstract void doUpdate(E item, SqlSession session);
-
- protected abstract void doDelete(E item, SqlSession session);
-
- protected abstract void doDeleteByKey(E item, SqlSession session);
-
protected abstract E doGetByKey(K key, SqlSession session);
- protected void enqueInsert(K key) {
- this.queue.enqueInsert(this.getIndexName(), key);
- }
+ protected abstract E doInsert(E item, SqlSession session);
- protected void enqueUpdate(K key) {
- this.queue.enqueUpdate(this.getIndexName(), key);
- }
+ protected abstract E doUpdate(E item, SqlSession session);
- protected void enqueDelete(K key) {
- this.queue.enqueDelete(this.getIndexName(), key);
- }
+ protected abstract void doDelete(E item, SqlSession session);
+
+ protected abstract void doDeleteByKey(K key, SqlSession session);
protected MyBatis getMyBatis() {
return this.mybatis;
@@ -73,12 +58,17 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
}
@Override
+ public E update(E item, SqlSession session) {
+ //TODO add update record to session */
+ return this.doUpdate(item, session);
+ }
+
+ @Override
public E update(E item) {
SqlSession session = getMyBatis().openSession();
try {
- this.doUpdate(item, session);
+ this.update(item, session);
session.commit();
- this.enqueUpdate(item.getKey());
return item;
} finally {
MyBatis.closeQuietly(session);
@@ -86,44 +76,54 @@ public abstract class BaseDao<E extends Dto<K>, K extends Serializable>
}
@Override
+ public E insert(E item, SqlSession session) {
+ //TODO add insert record to session */
+ return this.doInsert(item, session);
+ }
+
+ @Override
public E insert(E item) {
SqlSession session = getMyBatis().openSession();
try {
- this.doInsert(item, session);
+ this.insert(item, session);
session.commit();
- this.enqueInsert(item.getKey());
return item;
} finally {
MyBatis.closeQuietly(session);
}
}
- public void insert(E item, SqlSession session) {
-
- }
-
- public void update(E item, SqlSession session) {
-
- }
-
+ @Override
public void delete(E item, SqlSession session) {
-
+ //TODO add delete record to session */
+ this.doDelete(item, session);
}
@Override
public void delete(E item) {
- this.deleteByKey(item.getKey());
+ SqlSession session = getMyBatis().openSession();
+ try {
+ this.delete(item, session);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
+ @Override
+ public void deleteByKey(K key, SqlSession session) {
+ //TODO add delete record to session */
+ this.doDeleteByKey(key, session);
}
@Override
public void deleteByKey(K key) {
SqlSession session = getMyBatis().openSession();
try {
- this.deleteByKey(key);
+ this.doDeleteByKey(key, session);
session.commit();
} finally {
MyBatis.closeQuietly(session);
- this.enqueDelete(key);
}
}
}
diff --git a/sonar-core/src/main/java/org/sonar/core/db/Dao.java b/sonar-core/src/main/java/org/sonar/core/db/Dao.java
index 5fc95d944d6..32ef3e2f611 100644
--- a/sonar-core/src/main/java/org/sonar/core/db/Dao.java
+++ b/sonar-core/src/main/java/org/sonar/core/db/Dao.java
@@ -19,21 +19,30 @@
*/
package org.sonar.core.db;
+import org.apache.ibatis.session.SqlSession;
+
import java.io.Serializable;
import java.util.Collection;
public interface Dao<E extends Dto<K>, K extends Serializable> {
- public E getByKey(K key);
+ E getByKey(K key);
+
+ E update(E item);
+
+ E update(E item, SqlSession session);
+
+ E insert(E item);
- public E update(E item);
+ E insert(E item, SqlSession session);
- public E insert(E item);
+ void delete(E item);
- public void delete(E item);
+ void delete(E item, SqlSession session);
- public void deleteByKey(K key);
+ void deleteByKey(K key);
- public Collection<K> insertsSince(Long timestamp);
+ void deleteByKey(K key, SqlSession session);
+ Collection<K> insertsSince(Long timestamp);
}
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
index 249e0a01648..064d7d7e228 100644
--- a/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
+++ b/sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
@@ -24,7 +24,11 @@ import com.google.common.io.Closeables;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.logging.LogFactory;
import org.apache.ibatis.mapping.Environment;
-import org.apache.ibatis.session.*;
+import org.apache.ibatis.session.Configuration;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.ibatis.type.JdbcType;
import org.slf4j.LoggerFactory;
@@ -32,10 +36,18 @@ import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
import org.sonar.api.database.model.MeasureMapper;
import org.sonar.api.database.model.MeasureModel;
+import org.sonar.core.cluster.WorkQueue;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.db.ComponentMapper;
import org.sonar.core.config.Logback;
-import org.sonar.core.dashboard.*;
+import org.sonar.core.dashboard.ActiveDashboardDto;
+import org.sonar.core.dashboard.ActiveDashboardMapper;
+import org.sonar.core.dashboard.DashboardDto;
+import org.sonar.core.dashboard.DashboardMapper;
+import org.sonar.core.dashboard.WidgetDto;
+import org.sonar.core.dashboard.WidgetMapper;
+import org.sonar.core.dashboard.WidgetPropertyDto;
+import org.sonar.core.dashboard.WidgetPropertyMapper;
import org.sonar.core.dependency.DependencyDto;
import org.sonar.core.dependency.DependencyMapper;
import org.sonar.core.dependency.ResourceSnapshotDto;
@@ -44,22 +56,58 @@ import org.sonar.core.duplication.DuplicationMapper;
import org.sonar.core.duplication.DuplicationUnitDto;
import org.sonar.core.graph.jdbc.GraphDto;
import org.sonar.core.graph.jdbc.GraphDtoMapper;
-import org.sonar.core.issue.db.*;
+import org.sonar.core.issue.db.ActionPlanDto;
+import org.sonar.core.issue.db.ActionPlanMapper;
+import org.sonar.core.issue.db.ActionPlanStatsDto;
+import org.sonar.core.issue.db.ActionPlanStatsMapper;
+import org.sonar.core.issue.db.IssueChangeDto;
+import org.sonar.core.issue.db.IssueChangeMapper;
+import org.sonar.core.issue.db.IssueDto;
+import org.sonar.core.issue.db.IssueFilterDto;
+import org.sonar.core.issue.db.IssueFilterFavouriteDto;
+import org.sonar.core.issue.db.IssueFilterFavouriteMapper;
+import org.sonar.core.issue.db.IssueFilterMapper;
+import org.sonar.core.issue.db.IssueMapper;
+import org.sonar.core.issue.db.IssueStatsMapper;
import org.sonar.core.measure.db.MeasureDataDto;
import org.sonar.core.measure.db.MeasureDataMapper;
import org.sonar.core.measure.db.MeasureFilterDto;
import org.sonar.core.measure.db.MeasureFilterMapper;
import org.sonar.core.notification.db.NotificationQueueDto;
import org.sonar.core.notification.db.NotificationQueueMapper;
-import org.sonar.core.permission.*;
+import org.sonar.core.permission.GroupWithPermissionDto;
+import org.sonar.core.permission.PermissionTemplateDto;
+import org.sonar.core.permission.PermissionTemplateGroupDto;
+import org.sonar.core.permission.PermissionTemplateMapper;
+import org.sonar.core.permission.PermissionTemplateUserDto;
+import org.sonar.core.permission.UserWithPermissionDto;
import org.sonar.core.properties.PropertiesMapper;
import org.sonar.core.properties.PropertyDto;
import org.sonar.core.purge.PurgeMapper;
import org.sonar.core.purge.PurgeableSnapshotDto;
-import org.sonar.core.qualitygate.db.*;
-import org.sonar.core.qualityprofile.db.*;
-import org.sonar.core.resource.*;
-import org.sonar.core.rule.*;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationDto;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationMapper;
+import org.sonar.core.qualitygate.db.QualityGateConditionDto;
+import org.sonar.core.qualitygate.db.QualityGateConditionMapper;
+import org.sonar.core.qualitygate.db.QualityGateDto;
+import org.sonar.core.qualitygate.db.QualityGateMapper;
+import org.sonar.core.qualityprofile.db.ActiveRuleDto;
+import org.sonar.core.qualityprofile.db.ActiveRuleMapper;
+import org.sonar.core.qualityprofile.db.ActiveRuleParamDto;
+import org.sonar.core.qualityprofile.db.QualityProfileDto;
+import org.sonar.core.qualityprofile.db.QualityProfileMapper;
+import org.sonar.core.resource.ResourceDto;
+import org.sonar.core.resource.ResourceIndexDto;
+import org.sonar.core.resource.ResourceIndexerMapper;
+import org.sonar.core.resource.ResourceKeyUpdaterMapper;
+import org.sonar.core.resource.ResourceMapper;
+import org.sonar.core.resource.SnapshotDto;
+import org.sonar.core.rule.RuleDto;
+import org.sonar.core.rule.RuleMapper;
+import org.sonar.core.rule.RuleParamDto;
+import org.sonar.core.rule.RuleRuleTagDto;
+import org.sonar.core.rule.RuleTagDto;
+import org.sonar.core.rule.RuleTagMapper;
import org.sonar.core.source.db.SnapshotDataDto;
import org.sonar.core.source.db.SnapshotDataMapper;
import org.sonar.core.source.db.SnapshotSourceMapper;
@@ -69,7 +117,16 @@ import org.sonar.core.technicaldebt.db.RequirementDto;
import org.sonar.core.technicaldebt.db.RequirementMapper;
import org.sonar.core.template.LoadedTemplateDto;
import org.sonar.core.template.LoadedTemplateMapper;
-import org.sonar.core.user.*;
+import org.sonar.core.user.AuthorDto;
+import org.sonar.core.user.AuthorMapper;
+import org.sonar.core.user.GroupDto;
+import org.sonar.core.user.GroupMembershipDto;
+import org.sonar.core.user.GroupMembershipMapper;
+import org.sonar.core.user.GroupRoleDto;
+import org.sonar.core.user.RoleMapper;
+import org.sonar.core.user.UserDto;
+import org.sonar.core.user.UserMapper;
+import org.sonar.core.user.UserRoleDto;
import java.io.InputStream;
@@ -78,10 +135,12 @@ public class MyBatis implements BatchComponent, ServerComponent {
private final Database database;
private final Logback logback;
private SqlSessionFactory sessionFactory;
+ private WorkQueue queue;
- public MyBatis(Database database, Logback logback) {
+ public MyBatis(Database database, Logback logback, WorkQueue queue) {
this.database = database;
this.logback = logback;
+ this.queue = queue;
}
public MyBatis start() {
diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
index 2c2ee23e1ee..8053e3ccd9d 100644
--- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
@@ -19,15 +19,13 @@
*/
package org.sonar.core.rule;
-import org.sonar.core.db.UnsuportedException;
-
import com.google.common.collect.Lists;
import org.apache.ibatis.session.SqlSession;
import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
import org.sonar.api.rule.RuleKey;
-import org.sonar.core.cluster.WorkQueue;
import org.sonar.core.db.BaseDao;
+import org.sonar.core.db.UnsuportedException;
import org.sonar.core.persistence.MyBatis;
import javax.annotation.CheckForNull;
@@ -40,8 +38,8 @@ import static com.google.common.collect.Lists.newArrayList;
public class RuleDao extends BaseDao<RuleDto, RuleKey>
implements BatchComponent, ServerComponent {
- public RuleDao(MyBatis mybatis, WorkQueue queue) {
- super(queue, mybatis);
+ public RuleDao(MyBatis mybatis) {
+ super(mybatis);
}
@Override
@@ -50,13 +48,21 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
}
@Override
- protected void doInsert(RuleDto item, SqlSession session) {
+ @CheckForNull
+ protected RuleDto doGetByKey(RuleKey key, SqlSession session) {
+ return getMapper(session).selectByKey(key);
+ }
+
+ @Override
+ protected RuleDto doInsert(RuleDto item, SqlSession session) {
session.getMapper(RuleMapper.class).insert(item);
+ return item;
}
@Override
- protected void doUpdate(RuleDto item, SqlSession session) {
+ protected RuleDto doUpdate(RuleDto item, SqlSession session) {
session.getMapper(RuleMapper.class).update(item);
+ return item;
}
@Override
@@ -65,16 +71,10 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
}
@Override
- protected void doDeleteByKey(RuleDto item, SqlSession session) {
+ protected void doDeleteByKey(RuleKey key, SqlSession session) {
throw new UnsuportedException("Rules cannot be deleted");
}
- @Override
- @CheckForNull
- protected RuleDto doGetByKey(RuleKey key, SqlSession session) {
- return getMapper(session).selectByKey(key);
- }
-
public List<RuleDto> selectAll() {
SqlSession session = mybatis.openSession();
try {
@@ -136,21 +136,12 @@ public class RuleDao extends BaseDao<RuleDto, RuleKey>
}
}
- /**
- *
- * @deprecated use {@link getByKey(RuleKey key, SqlSession session)} instead.
- */
- @Deprecated
@CheckForNull
public RuleDto selectByKey(RuleKey ruleKey, SqlSession session) {
return getMapper(session).selectByKey(ruleKey);
}
- /**
- *
- * @deprecated use {@link getByKey(RuleKey key)} instead.
- */
- @Deprecated
+
@CheckForNull
public RuleDto selectByKey(RuleKey ruleKey) {
SqlSession session = mybatis.openSession();
diff --git a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java
index 78dd41c99a5..e7d871fa2a3 100644
--- a/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/rule/RuleDto.java
@@ -69,7 +69,6 @@ public final class RuleDto implements Dto<RuleKey>{
return RuleKey.of(this.getRepositoryKey(), this.getRuleKey());
}
- @Deprecated
public Integer getId() {
return id;
}
diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java b/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
index 3445aaa1c9b..26843e8e90d 100644
--- a/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
+++ b/sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
@@ -19,6 +19,8 @@
*/
package org.sonar.core.persistence;
+import org.sonar.core.cluster.WorkQueue;
+
import com.google.common.collect.Maps;
import com.google.common.io.Closeables;
import org.apache.commons.io.FileUtils;
@@ -53,6 +55,8 @@ import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;
+import static org.mockito.Mockito.mock;
+
import static org.junit.Assert.fail;
public abstract class AbstractDaoTestCase {
@@ -61,6 +65,8 @@ public abstract class AbstractDaoTestCase {
private static DatabaseCommands databaseCommands;
private static IDatabaseTester databaseTester;
private static MyBatis myBatis;
+ private WorkQueue queue = mock(WorkQueue.class);
+
@Before
public void startDatabase() throws Exception {
@@ -84,7 +90,7 @@ public abstract class AbstractDaoTestCase {
databaseCommands = DatabaseCommands.forDialect(database.getDialect());
databaseTester = new DataSourceDatabaseTester(database.getDataSource());
- myBatis = new MyBatis(database, new Logback());
+ myBatis = new MyBatis(database, new Logback(),queue);
myBatis.start();
}
diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java b/sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java
index 49f4ab0d09b..26e56f19347 100644
--- a/sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/persistence/MyBatisTest.java
@@ -19,6 +19,8 @@
*/
package org.sonar.core.persistence;
+import org.sonar.core.cluster.WorkQueue;
+
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.hamcrest.core.Is;
@@ -27,7 +29,6 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.sonar.core.config.Logback;
import org.sonar.core.rule.RuleMapper;
-
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
@@ -35,6 +36,7 @@ import static org.mockito.Mockito.mock;
public class MyBatisTest {
private static H2Database database;
private Logback logback = mock(Logback.class);
+ private WorkQueue queue = mock(WorkQueue.class);
@BeforeClass
public static void start() {
@@ -49,7 +51,7 @@ public class MyBatisTest {
@Test
public void shouldConfigureMyBatis() {
- MyBatis myBatis = new MyBatis(database, logback);
+ MyBatis myBatis = new MyBatis(database, logback, queue);
myBatis.start();
Configuration conf = myBatis.getSessionFactory().getConfiguration();
@@ -60,7 +62,7 @@ public class MyBatisTest {
@Test
public void shouldOpenBatchSession() {
- MyBatis myBatis = new MyBatis(database, logback);
+ MyBatis myBatis = new MyBatis(database, logback, queue);
myBatis.start();
SqlSession session = myBatis.openBatchSession();
diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java b/sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java
index 003649a00c0..a8c5dd16d5c 100644
--- a/sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java
+++ b/sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java
@@ -19,6 +19,8 @@
*/
package org.sonar.core.persistence;
+import org.sonar.core.cluster.WorkQueue;
+
import com.google.common.collect.Maps;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.dbutils.DbUtils;
@@ -62,6 +64,8 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
+import static org.mockito.Mockito.mock;
+
import static org.junit.Assert.fail;
/**
@@ -76,6 +80,7 @@ public class TestDatabase extends ExternalResource {
private DatabaseCommands commands;
private IDatabaseTester tester;
private MyBatis myBatis;
+ private WorkQueue queue = mock(WorkQueue.class);
private String schemaPath = null;
public TestDatabase schema(Class baseClass, String filename) {
@@ -109,7 +114,7 @@ public class TestDatabase extends ExternalResource {
commands = DatabaseCommands.forDialect(db.getDialect());
tester = new DataSourceDatabaseTester(db.getDataSource());
- myBatis = new MyBatis(db, new Logback());
+ myBatis = new MyBatis(db, new Logback(), queue);
myBatis.start();
commands.truncateDatabase(db.getDataSource());
diff --git a/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java b/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java
index 152447530c9..6386962c054 100644
--- a/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/rule/RuleDaoTest.java
@@ -30,14 +30,12 @@ import org.sonar.api.rule.Severity;
import org.sonar.api.rules.Rule;
import org.sonar.api.utils.DateUtils;
import org.sonar.check.Cardinality;
-import org.sonar.core.cluster.WorkQueue;
import org.sonar.core.persistence.AbstractDaoTestCase;
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
public class RuleDaoTest extends AbstractDaoTestCase {
@@ -45,8 +43,7 @@ public class RuleDaoTest extends AbstractDaoTestCase {
@Before
public void createDao() throws Exception {
- WorkQueue queue = mock(WorkQueue.class);
- dao = new RuleDao(getMyBatis(), queue);
+ dao = new RuleDao(getMyBatis());
}
@Test