Commits

Jonghyouk Yun  committed d17c3c1

hotwind'ized.

  • Participants
  • Parent commits c1560df

Comments (0)

Files changed (18)

File src/main/java/jhyun/hotwind/config/AppConfig.java

+package jhyun.hotwind.config;
+
+import java.net.URL;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * load base config files.
+ * 
+ * @author jhyun
+ * @since 2012-08-30
+ * 
+ */
+public class AppConfig {
+
+	private static Logger logger = LoggerFactory.getLogger(AppConfig.class);
+
+	private static Configuration loaded;
+
+	public static synchronized Configuration load() {
+		if (loaded == null) {
+			DefaultConfigurationBuilder configBuilder = new DefaultConfigurationBuilder();
+			URL url = AppConfig.class.getClassLoader().getResource(
+					"app-config-files.xml");
+			configBuilder.setURL(url);
+			try {
+				loaded = configBuilder.getConfiguration(true);
+			} catch (ConfigurationException e) {
+				logger.warn(
+						"load 'app-config-files.xml' failed, this will use a empty properties.",
+						e);
+				loaded = new PropertiesConfiguration();
+			}
+		}
+		return loaded;
+	}
+
+}

File src/main/java/jhyun/hotwind/guice/GuiceJerseyListener.java

+package jhyun.hotwind.guice;
+
+import javax.servlet.ServletContextListener;
+
+import com.google.inject.Injector;
+import com.google.inject.servlet.GuiceServletContextListener;
+
+/**
+ * web.xml에서 Context Listener으로서 지정하며, 이를 통해 기본 Injector을 생성하고 이를 Servlet
+ * Context와 연관짓는다.
+ * 
+ * 
+ * @author jhyun
+ * @since 2012-09-03
+ * 
+ * @see ServletContextListener
+ * @see GuiceServletContextListener
+ * @see Guicer
+ */
+public class GuiceJerseyListener extends GuiceServletContextListener {
+
+	@Override
+	protected Injector getInjector() {
+		return Guicer.get();
+	}
+
+}

File src/main/java/jhyun/hotwind/guice/Guicer.java

+package jhyun.hotwind.guice;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import jhyun.hotwind.config.AppConfig;
+
+import org.apache.commons.configuration.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+/**
+ * Guice Injector.
+ * 
+ * app.guice-modules으로 지정된 모듈 클래스들을 새로운 인스턴스를 만들어 초기화하고 Guice모듈로 활용한다.
+ * 
+ * @author jhyun
+ * @since 2012-08-30
+ * 
+ * @see <a
+ *      href="http://google-guice.googlecode.com/git/javadoc/com/google/inject/Module.html">Guice
+ *      / Module</a>
+ */
+public class Guicer {
+	private static Logger logger = LoggerFactory.getLogger(Guicer.class);
+
+	private static Injector injector;
+
+	static {
+		// 초기화!
+		Configuration config = AppConfig.load();
+		List<Module> moduleObjs = bindModules(config);
+		injector = Guice.createInjector(moduleObjs);
+	}
+
+	/** app.guice-modules에 리스트로 지정된 전체 클래스 경로를 찾아 인스턴스를 생성하고 모듈로 사용. */
+	private static List<Module> bindModules(Configuration config) {
+		List<Object> moduleClassFqns = config.getList("app.guice-modules",
+				new ArrayList<Object>());
+		logger.debug(String.format("guice-module-class-fqns = %s",
+				moduleClassFqns));
+		//
+		List<Module> moduleObjs = new ArrayList<Module>();
+		for (Object moduleClassFqn : moduleClassFqns) {
+			try {
+				Class<? extends Module> moduleClass = (Class<? extends Module>) Class
+						.forName((String) moduleClassFqn);
+				Module moduleObj = moduleClass.newInstance();
+				moduleObjs.add(moduleObj);
+				logger.info(String.format("guice-module bound = [%s]",
+						moduleClass));
+			} catch (Exception e) {
+				logger.warn(String
+						.format("app.guice-modules specified guice-module-class not found.",
+								e));
+			}
+		}
+		return moduleObjs;
+	}
+
+	/** use this! */
+	public static Injector get() {
+		return injector;
+	}
+
+}

File src/main/java/jhyun/hotwind/jersey/JerseyServletModule.java

+package jhyun.hotwind.jersey;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import jhyun.hotwind.config.AppConfig;
+
+import org.apache.commons.configuration.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.Module;
+import com.google.inject.servlet.ServletModule;
+import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
+
+/**
+ * Jersey요청 처리를 위해서 web.xml 대신에 Guice 바인딩으로 HTTP요청을 JAX-RS으로 처리하도록.
+ * 
+ * ServletModule을 활용하여, Guice Module들으로 Servlet Mapping을 대신함.
+ * 
+ * app.jerset-modules에 지정된 클래스FQN들으로 Guice에 바인딩하여 Jersey 리소스 클래스로 활용. 이렇게 Guice에
+ * 바인딩한 Jersey 리소스 클래스들을 또한 Guice을 통해서 초기화되고, 이들로부터 멤버들을 주입 받으므로, 아무런 추가 코드 없이
+ * Guice으로 @Inject 멤버들을 활용할 수 있다.
+ * 
+ * @author jhyun
+ * @since 2012-09-03
+ * 
+ * @see ServletModule
+ * @see GuiceContainer
+ * @link <a href="http://code.google.com/p/google-guice/wiki/ServletModule">
+ *       ServletModule</a>
+ */
+public class JerseyServletModule extends ServletModule {
+	private static Logger logger = LoggerFactory
+			.getLogger(JerseyServletModule.class);
+
+	@Override
+	protected void configureServlets() {
+		final List<Object> jerseyModuleClassFqns = AppConfig.load().getList(
+				"app.jersey-modules", new ArrayList<Object>());
+		bindJerseyModules(jerseyModuleClassFqns);
+		//
+		Configuration config = AppConfig.load();
+		final Map<String, String> jerseyProperties = loadJerseyProperties(config);
+		logger.debug(String.format("jersey-properties = %s", jerseyProperties));
+		//
+		final String jerseyServeUrlPattern = config.getString(
+				"jersey-serve-url-pattern", "/*");
+		filter(jerseyServeUrlPattern).through(GuiceContainer.class,
+				jerseyProperties);
+	}
+
+	/** Jersey Servlet Filter 설정 로딩. */
+	private Map<String, String> loadJerseyProperties(Configuration config) {
+		final String pFilename = config.getString("jersey-properties-file",
+				"jersey.properties");
+		Properties ps = new Properties();
+		InputStream in = this.getClass().getClassLoader()
+				.getResourceAsStream(pFilename);
+		if (in != null) {
+			try {
+				ps.load(in);
+			} catch (IOException e) {
+				logger.warn(String.format("LOAD FAIL = [%s]", pFilename));
+			} finally {
+				if (in != null)
+					try {
+						in.close();
+					} catch (IOException e) {
+						logger.warn("CLOSE FAIL, WT...", e);
+					}
+			}
+		} else {
+			logger.debug(String.format("[%s] not found, skip.", pFilename));
+		}
+		return new HashMap<String, String>((Map) ps);
+	}
+
+	/**
+	 * 모든 Jersey 리소스 클래스들을 등록. 실제로 모듈로서 이들을 활용하지 않고(인스턴스로 만들지도 않음.), 단지 바인딩만 하여
+	 * 이후 요청에 있어서 처리에만 활용한다.
+	 * 
+	 * @param jerseyModuleClassFqns
+	 */
+	private void bindJerseyModules(final List<Object> jerseyModuleClassFqns) {
+		for (final Object jerseyModuleClassFqn : jerseyModuleClassFqns) {
+			try {
+				Class<? extends Module> jerseyModuleClass = (Class<? extends Module>) Class
+						.forName((String) jerseyModuleClassFqn);
+				bind(jerseyModuleClass);
+				logger.info(String.format("jersey-module bound -- %s",
+						jerseyModuleClass));
+			} catch (Exception exc) {
+				logger.warn(String.format("jersey-module fail, skip", exc));
+			}
+		}
+	}
+}

File src/main/java/jhyun/hotwind/mybatis/MyBatisXmlModule.java

+package jhyun.hotwind.mybatis;
+
+import jhyun.hotwind.config.AppConfig;
+import jhyun.hotwind.guice.Guicer;
+
+import org.apache.commons.configuration.Configuration;
+import org.mybatis.guice.XMLMyBatisModule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Simple MyBatis + Guice Configuration By XML Module.
+ * 
+ * Guicer의 의해서 생성된다. 상속을 통한 Injection의 용도도 있고(SqlMapper, SqlSession등
+ * MyBatis특유의), 설정파일을 읽어 MyBatis을 초기화하는 목적도 있다.
+ * 
+ * 여기서 SqlMapper등의 Injection을 위해서는 XMLMyBatisModule을 상속하는것으로.
+ * 
+ * 설정 파일을 읽고, 기본 환경을 설정하는것은 initialize 메서드에서.
+ * 
+ * @author jhyun
+ * @since 2012-08-30
+ * 
+ * @see Guicer
+ * @see AppConfig
+ * @see XMLMyBatisModule
+ */
+public class MyBatisXmlModule extends XMLMyBatisModule {
+	private static Logger logger = LoggerFactory
+			.getLogger(MyBatisXmlModule.class);
+
+	@Override
+	protected void initialize() {
+		Configuration appConfig = AppConfig.load();
+		final String environment = appConfig.getString("app.environment",
+				"development");
+		logger.debug(String.format("selected-env=[%s]", environment));
+
+		setEnvironmentId(environment);
+		setClassPathResource("mybatis-config.xml");
+	}
+}

File src/main/java/jhyun/mybatis_with_guice/config/AppConfig.java

-package jhyun.mybatis_with_guice.config;
-
-import java.net.URL;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * load base config files.
- * 
- * @author jhyun
- * @since 2012-08-30
- * 
- */
-public class AppConfig {
-
-	private static Logger logger = LoggerFactory.getLogger(AppConfig.class);
-
-	private static Configuration loaded;
-
-	public static synchronized Configuration load() {
-		if (loaded == null) {
-			DefaultConfigurationBuilder configBuilder = new DefaultConfigurationBuilder();
-			URL url = AppConfig.class.getClassLoader().getResource(
-					"app-config-files.xml");
-			configBuilder.setURL(url);
-			try {
-				loaded = configBuilder.getConfiguration(true);
-			} catch (ConfigurationException e) {
-				logger.warn(
-						"load 'app-config-files.xml' failed, this will use a empty properties.",
-						e);
-				loaded = new PropertiesConfiguration();
-			}
-		}
-		return loaded;
-	}
-
-}

File src/main/java/jhyun/mybatis_with_guice/injections/GuiceJerseyListener.java

-package jhyun.mybatis_with_guice.injections;
-
-import javax.servlet.ServletContextListener;
-
-import com.google.inject.Injector;
-import com.google.inject.servlet.GuiceServletContextListener;
-
-/**
- * web.xml에서 Context Listener으로서 지정하며, 이를 통해 기본 Injector을 생성하고 이를 Servlet
- * Context와 연관짓는다.
- * 
- * 
- * @author jhyun
- * @since 2012-09-03
- * 
- * @see ServletContextListener
- * @see GuiceServletContextListener
- * @see Guicer
- */
-public class GuiceJerseyListener extends GuiceServletContextListener {
-
-	@Override
-	protected Injector getInjector() {
-		return Guicer.get();
-	}
-
-}

File src/main/java/jhyun/mybatis_with_guice/injections/Guicer.java

-package jhyun.mybatis_with_guice.injections;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import jhyun.mybatis_with_guice.config.AppConfig;
-
-import org.apache.commons.configuration.Configuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-/**
- * Guice Injector.
- * 
- * app.guice-modules으로 지정된 모듈 클래스들을 새로운 인스턴스를 만들어 초기화하고 Guice모듈로 활용한다.
- * 
- * @author jhyun
- * @since 2012-08-30
- * 
- * @see <a
- *      href="http://google-guice.googlecode.com/git/javadoc/com/google/inject/Module.html">Guice
- *      / Module</a>
- */
-public class Guicer {
-	private static Logger logger = LoggerFactory.getLogger(Guicer.class);
-
-	private static Injector injector;
-
-	static {
-		// 초기화!
-		Configuration config = AppConfig.load();
-		List<Module> moduleObjs = bindModules(config);
-		injector = Guice.createInjector(moduleObjs);
-	}
-
-	/** app.guice-modules에 리스트로 지정된 전체 클래스 경로를 찾아 인스턴스를 생성하고 모듈로 사용. */
-	private static List<Module> bindModules(Configuration config) {
-		List<Object> moduleClassFqns = config.getList("app.guice-modules",
-				new ArrayList<Object>());
-		logger.debug(String.format("guice-module-class-fqns = %s",
-				moduleClassFqns));
-		//
-		List<Module> moduleObjs = new ArrayList<Module>();
-		for (Object moduleClassFqn : moduleClassFqns) {
-			try {
-				Class<? extends Module> moduleClass = (Class<? extends Module>) Class
-						.forName((String) moduleClassFqn);
-				Module moduleObj = moduleClass.newInstance();
-				moduleObjs.add(moduleObj);
-				logger.info(String.format("guice-module bound = [%s]",
-						moduleClass));
-			} catch (Exception e) {
-				logger.warn(String
-						.format("app.guice-modules specified guice-module-class not found.",
-								e));
-			}
-		}
-		return moduleObjs;
-	}
-
-	/** use this! */
-	public static Injector get() {
-		return injector;
-	}
-
-}

File src/main/java/jhyun/mybatis_with_guice/injections/JerseyServletModule.java

-package jhyun.mybatis_with_guice.injections;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import jhyun.mybatis_with_guice.config.AppConfig;
-import jhyun.mybatis_with_guice.servlets.DefaultWrapperServlet;
-
-import org.apache.commons.configuration.Configuration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.inject.Module;
-import com.google.inject.servlet.ServletModule;
-import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
-
-/**
- * Jersey요청 처리를 위해서 web.xml 대신에 Guice 바인딩으로 HTTP요청을 JAX-RS으로 처리하도록.
- * 
- * ServletModule을 활용하여, Guice Module들으로 Servlet Mapping을 대신함.
- * 
- * app.jerset-modules에 지정된 클래스FQN들으로 Guice에 바인딩하여 Jersey 리소스 클래스로 활용. 이렇게 Guice에
- * 바인딩한 Jersey 리소스 클래스들을 또한 Guice을 통해서 초기화되고, 이들로부터 멤버들을 주입 받으므로, 아무런 추가 코드 없이
- * Guice으로 @Inject 멤버들을 활용할 수 있다.
- * 
- * @author jhyun
- * @since 2012-09-03
- * 
- * @see ServletModule
- * @see GuiceContainer
- * @see DefaultWrapperServlet
- * @link <a href="http://code.google.com/p/google-guice/wiki/ServletModule">
- *       ServletModule</a>
- */
-public class JerseyServletModule extends ServletModule {
-	private static Logger logger = LoggerFactory
-			.getLogger(JerseyServletModule.class);
-
-	@Override
-	protected void configureServlets() {
-		final List<Object> jerseyModuleClassFqns = AppConfig.load().getList(
-				"app.jersey-modules", new ArrayList<Object>());
-		bindJerseyModules(jerseyModuleClassFqns);
-		//
-		Configuration config = AppConfig.load();
-		final Map<String, String> jerseyProperties = loadJerseyProperties(config);
-		logger.debug(String.format("jersey-properties = %s", jerseyProperties));
-		//
-		final String jerseyServeUrlPattern = config.getString(
-				"jersey-serve-url-pattern", "/*");
-		filter(jerseyServeUrlPattern).through(GuiceContainer.class,
-				jerseyProperties);
-	}
-
-	/** Jersey Servlet Filter 설정 로딩. */
-	private Map<String, String> loadJerseyProperties(Configuration config) {
-		final String pFilename = config.getString("jersey-properties-file",
-				"jersey.properties");
-		Properties ps = new Properties();
-		InputStream in = this.getClass().getClassLoader()
-				.getResourceAsStream(pFilename);
-		if (in != null) {
-			try {
-				ps.load(in);
-			} catch (IOException e) {
-				logger.warn(String.format("LOAD FAIL = [%s]", pFilename));
-			} finally {
-				if (in != null)
-					try {
-						in.close();
-					} catch (IOException e) {
-						logger.warn("CLOSE FAIL, WT...", e);
-					}
-			}
-		} else {
-			logger.debug(String.format("[%s] not found, skip.", pFilename));
-		}
-		return new HashMap<String, String>((Map) ps);
-	}
-
-	/**
-	 * 모든 Jersey 리소스 클래스들을 등록. 실제로 모듈로서 이들을 활용하지 않고(인스턴스로 만들지도 않음.), 단지 바인딩만 하여
-	 * 이후 요청에 있어서 처리에만 활용한다.
-	 * 
-	 * @param jerseyModuleClassFqns
-	 */
-	private void bindJerseyModules(final List<Object> jerseyModuleClassFqns) {
-		for (final Object jerseyModuleClassFqn : jerseyModuleClassFqns) {
-			try {
-				Class<? extends Module> jerseyModuleClass = (Class<? extends Module>) Class
-						.forName((String) jerseyModuleClassFqn);
-				bind(jerseyModuleClass);
-				logger.info(String.format("jersey-module bound -- %s",
-						jerseyModuleClass));
-			} catch (Exception exc) {
-				logger.warn(String.format("jersey-module fail, skip", exc));
-			}
-		}
-	}
-}

File src/main/java/jhyun/mybatis_with_guice/injections/MyBatisXmlModule.java

-package jhyun.mybatis_with_guice.injections;
-
-import jhyun.mybatis_with_guice.config.AppConfig;
-
-import org.apache.commons.configuration.Configuration;
-import org.mybatis.guice.XMLMyBatisModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Simple MyBatis + Guice Configuration By XML Module.
- * 
- * Guicer의 의해서 생성된다. 상속을 통한 Injection의 용도도 있고(SqlMapper, SqlSession등
- * MyBatis특유의), 설정파일을 읽어 MyBatis을 초기화하는 목적도 있다.
- * 
- * 여기서 SqlMapper등의 Injection을 위해서는 XMLMyBatisModule을 상속하는것으로.
- * 
- * 설정 파일을 읽고, 기본 환경을 설정하는것은 initialize 메서드에서.
- * 
- * @author jhyun
- * @since 2012-08-30
- * 
- * @see Guicer
- * @see AppConfig
- * @see XMLMyBatisModule
- */
-public class MyBatisXmlModule extends XMLMyBatisModule {
-	private static Logger logger = LoggerFactory
-			.getLogger(MyBatisXmlModule.class);
-
-	@Override
-	protected void initialize() {
-		Configuration appConfig = AppConfig.load();
-		final String environment = appConfig.getString("app.environment",
-				"development");
-		logger.debug(String.format("selected-env=[%s]", environment));
-
-		setEnvironmentId(environment);
-		setClassPathResource("mybatis-config.xml");
-	}
-}

File src/main/java/jhyun/mybatis_with_guice/servlets/DefaultWrapperServlet.java

-package jhyun.mybatis_with_guice.servlets;
-
-import java.io.IOException;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-
-import com.google.inject.Singleton;
-
-/**
- * Jersey이 처리하지 않고, 정적 파일이나 다른 요청으로 매핑될 경우에 Redirector.
- * 
- * @author jhyun
- * @since 2012-09-03
- */
-@Singleton
-public class DefaultWrapperServlet extends HttpServlet {
-
-	private static final long serialVersionUID = -2856943540448957911L;
-
-	public void doGet(HttpServletRequest req, HttpServletResponse resp)
-			throws ServletException, IOException {
-		RequestDispatcher rd = getServletContext()
-				.getNamedDispatcher("default");
-
-		HttpServletRequest wrapped = new HttpServletRequestWrapper(req) {
-			public String getServletPath() {
-				return "";
-			}
-		};
-
-		rd.forward(wrapped, resp);
-	}
-}

File src/main/resources/app-config.xml

 	<app>
 		<environment>development</environment>
 		<guice-modules>
-			jhyun.mybatis_with_guice.injections.MyBatisXmlModule,
-			jhyun.mybatis_with_guice.injections.JerseyServletModule
+			jhyun.hotwind.mybatis.MyBatisXmlModule,
+			jhyun.hotwind.jersey.JerseyServletModule
 		</guice-modules>
 		<jersey-modules>
 			jhyun.mybatis_with_guice.controllers.HelloController

File src/main/webapp/WEB-INF/web.xml

 
 	<!-- NOTE: Guice Injector을 ServletContext와 연관짓는다. -->
 	<listener>
-		<listener-class>jhyun.mybatis_with_guice.injections.GuiceJerseyListener
+		<listener-class>jhyun.hotwind.guice.GuiceJerseyListener
 		</listener-class>
 	</listener>
 	

File src/test/java/jhyun/mybatis_with_guice/tests/helpers/JerseyTestingClient.java

 package jhyun.mybatis_with_guice.tests.helpers;
 
-import jhyun.mybatis_with_guice.config.AppConfig;
+import jhyun.hotwind.config.AppConfig;
 
 import org.apache.commons.configuration.Configuration;
 

File src/test/java/jhyun/mybatis_with_guice/tests/test_cases/AppConfigTestCase.java

 package jhyun.mybatis_with_guice.tests.test_cases;
 
 import static org.junit.Assert.assertNotNull;
-import jhyun.mybatis_with_guice.config.AppConfig;
+import jhyun.hotwind.config.AppConfig;
 
 import org.apache.commons.configuration.Configuration;
 import org.junit.Test;

File src/test/java/jhyun/mybatis_with_guice/tests/test_cases/DirtyAndCleanTransactionClientTestCase.java

 
 import javax.ws.rs.core.MediaType;
 
-import jhyun.mybatis_with_guice.injections.Guicer;
+import jhyun.hotwind.guice.Guicer;
 import jhyun.mybatis_with_guice.tests.helpers.JerseyTestingClient;
 import jhyun.mybatis_with_guice.tests.helpers.SimpleTransactionHelper;
-
 import static org.junit.Assert.*;
+
 import org.junit.Test;
 
 import com.google.inject.Inject;

File src/test/java/jhyun/mybatis_with_guice/tests/test_cases/MybatisWithGuiceTestCase.java

 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import jhyun.mybatis_with_guice.injections.Guicer;
+import jhyun.hotwind.guice.Guicer;
 import jhyun.mybatis_with_guice.sqlmaps.HelloMapper;
 
 import org.apache.ibatis.session.SqlSession;

File src/test/java/jhyun/mybatis_with_guice/tests/test_cases/SimpleTransactionClientTestCase.java

 
 import java.util.List;
 
-import jhyun.mybatis_with_guice.injections.Guicer;
+import jhyun.hotwind.guice.Guicer;
 import jhyun.mybatis_with_guice.tests.helpers.SimpleTransactionHelper;
 
 import org.junit.Test;