[Jiemamy-notify:865] commit [2294] DatabaseMetadataの取り回しを最適化。

アーカイブの一覧に戻る

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);


Jiemamy-notify メーリングリストの案内
アーカイブの一覧に戻る