svnno****@sourc*****
svnno****@sourc*****
2008年 12月 22日 (月) 19:24:40 JST
Revision: 2294 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2294 Author: daisuke_m Date: 2008-12-22 19:24:40 +0900 (Mon, 22 Dec 2008) Log Message: ----------- DatabaseMetadataの取り回しを最適化。 Modified Paths: -------------- artemis/trunk/org.jiemamy.composer/pom.xml artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseImporter.java artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseReader.java artemis/trunk/org.jiemamy.composer/src/test/java/org/jiemamy/composer/importer/DatabaseImporterTest.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/AbstractArtemisExtender.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/ArtemisExtender.java -------------- next part -------------- Modified: artemis/trunk/org.jiemamy.composer/pom.xml =================================================================== --- artemis/trunk/org.jiemamy.composer/pom.xml 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.composer/pom.xml 2008-12-22 10:24:40 UTC (rev 2294) @@ -174,6 +174,12 @@ <scope>test</scope> </dependency> <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.1.102</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.11</version> Modified: artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseImporter.java =================================================================== --- artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseImporter.java 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseImporter.java 2008-12-22 10:24:40 UTC (rev 2294) @@ -110,10 +110,12 @@ DatabaseReadingContext readingCtx = new DatabaseReadingContext(); BeanUtil.copyProperties(ctx, readingCtx); - DatabaseReader reader = new DatabaseReader(dialect, readingCtx); + DatabaseReader reader = new DatabaseReader(dialect, readingCtx, meta); - reader.readEnities(connection, new EntityImportVisitor(meta, rootModel, ctx)); - reader.readRelations(connection, new RelationImportVisitor(meta, rootModel, ctx)); + dialect.getAdvisor().setUpRead(connection); + reader.readEnities(new EntityImportVisitor(meta, rootModel, ctx)); + reader.readRelations(new RelationImportVisitor(meta, rootModel, ctx)); + dialect.getAdvisor().tearDownRead(connection); } catch (RuntimeException e) { // ランタイムは再スロー throw e; Modified: artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseReader.java =================================================================== --- artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseReader.java 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.composer/src/main/java/org/jiemamy/composer/importer/DatabaseReader.java 2008-12-22 10:24:40 UTC (rev 2294) @@ -18,7 +18,6 @@ */ package org.jiemamy.composer.importer; -import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; @@ -59,70 +58,64 @@ private final DatabaseReadingContext ctx; + private final DatabaseMetaData meta; + /** * コンストラクタ。 * @param dialect SQL方言 * @param ctx コンテキスト情報 + * @param meta DBメタデータ * @category instance creation */ - public DatabaseReader(Dialect dialect, DatabaseReadingContext ctx) { + public DatabaseReader(Dialect dialect, DatabaseReadingContext ctx, DatabaseMetaData meta) { Validate.notNull(dialect); Validate.notNull(ctx); + Validate.notNull(meta); this.dialect = dialect; this.ctx = ctx; + this.meta = meta; } /** * DB接続からエンティティを読み込む。 * @param <T> 読み込んだ結果、戻り値型 - * @param connection DB接続 * @param visitor 各エンティティに情報に対するビジター。 * @return ビジターに依存した、実行結果 * @throws SQLException * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ - public <T>T readEnities(Connection connection, AbstractResultSetVisitor<T, RuntimeException> visitor) - throws SQLException { + public <T>T readEnities(AbstractResultSetVisitor<T, RuntimeException> visitor) throws SQLException { assert dialect != null; assert ctx != null; - Validate.notNull(connection); + assert meta != null; Validate.notNull(visitor); - dialect.getAdvisor().setUpRead(connection); - String schema = ctx.getValue("schema"); // DatabaseImporter.SCHEMA - DatabaseMetaData meta = connection.getMetaData(); ResultSet entities = meta.getTables(null, schema, "%", null); T result = ForEachUtil.accept(entities, visitor); - dialect.getAdvisor().tearDownRead(connection); return result; } /** * DB接続からリレーションを読み込む。 * @param <T> 読み込んだ結果、戻り値型 - * @param connection DB接続 * @param visitor 各エンティティに情報に対するビジター。 * @return ビジターに依存した、実行結果 * @throws SQLException * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ - public <T>List<T> readRelations(Connection connection, AbstractResultSetVisitor<T, TooManyElementsException> visitor) - throws SQLException { + public <T>List<T> readRelations(AbstractResultSetVisitor<T, TooManyElementsException> visitor) throws SQLException { assert dialect != null; assert ctx != null; - Validate.notNull(connection); + assert meta != null; Validate.notNull(visitor); - dialect.getAdvisor().setUpRead(connection); - String schema = ctx.getValue("schema"); // DatabaseImporter.SCHEMA - DatabaseMetaData meta = connection.getMetaData(); - List<String> entityNames = readEnities(connection, new EntityNamesVisitor()); + List<String> entityNames = readEnities(new EntityNamesVisitor()); List<T> result = CollectionsUtil.newArrayList(); for (String entityName : entityNames) { @@ -133,8 +126,6 @@ logger.warn("", e); } } - - dialect.getAdvisor().tearDownRead(connection); return result; } Modified: artemis/trunk/org.jiemamy.composer/src/test/java/org/jiemamy/composer/importer/DatabaseImporterTest.java =================================================================== --- artemis/trunk/org.jiemamy.composer/src/test/java/org/jiemamy/composer/importer/DatabaseImporterTest.java 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.composer/src/test/java/org/jiemamy/composer/importer/DatabaseImporterTest.java 2008-12-22 10:24:40 UTC (rev 2294) @@ -177,4 +177,21 @@ return ctx; } + private ImportContext createContext2() throws MalformedURLException { + ImportContext ctx = new ImportContextImpl(); + ctx.setValue(DatabaseImporter.DIALECT, dialect); + ctx.setValue(DatabaseImporter.DATABASE_NAME, "jpoll"); + ctx.setValue(DatabaseImporter.DRIVER_JAR_PATH, new URL[] { + new File("./src/test/resources/postgresql-8.3-603.jdbc3.jar").toURL() + }); + ctx.setValue(DatabaseImporter.DRIVER_CLASS_NAME, "org.h2.Driver"); + ctx.setValue(DatabaseImporter.URI, "jdbc:h2:./src/test/resources/database/testdb"); + ctx.setValue(DatabaseImporter.SCHEMA, ""); + ctx.setValue(DatabaseImporter.USERNAME, "sa"); + ctx.setValue(DatabaseImporter.PASSWORD, ""); + ctx.setValue(DatabaseImporter.SELECTED_ENTITIES, null); + ctx.setValue(DatabaseImporter.ENTITY_TYPES, null); + return ctx; + } + } Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/AbstractArtemisExtender.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/AbstractArtemisExtender.java 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/AbstractArtemisExtender.java 2008-12-22 10:24:40 UTC (rev 2294) @@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory; /** - * TODO for daisuke + * {@link ArtemisExtender}の骨格実装。 * @author daisuke */ public abstract class AbstractArtemisExtender implements ArtemisExtender { Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/ArtemisExtender.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/ArtemisExtender.java 2008-12-22 09:22:40 UTC (rev 2293) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/ArtemisExtender.java 2008-12-22 10:24:40 UTC (rev 2294) @@ -28,7 +28,7 @@ public interface ArtemisExtender { /** - * TODO for daisuke + * {@link S2Container}に手を加える。 * @param container */ void extendContainer(S2Container container);