spring3.2 java config Servler3

17
Servlet3-javaConfig 한방 스팀팩 JBOSS USER GROUP 이용혁 1398일요일

description

Servlet3 JavaConfig for Spring3.2 include Mybatis, MongoDB, infinispan5.3 Cache, Sitemesh

Transcript of spring3.2 java config Servler3

Page 1: spring3.2 java config Servler3

Servlet3-javaConfig 한방 스팀팩

JBOSS USER GROUP 이용혁

13년 9월 8일 일요일

Page 2: spring3.2 java config Servler3

Agenda✓ servlet3

✓ javaConfig

✓ Spring3.2

✓ properties

✓ datasource

✓ mybatis3

✓ mongoDB

✓ cache - infinispan

✓ sitemesh

✓ DEMO

✓ Q & A

✓ Thanks

13년 9월 8일 일요일

Page 3: spring3.2 java config Servler3

Servlet3✓ @WebServlet

✓ @WebFilter

✓ @WebInitParam

✓ @WebListener

✓ @MultipartConfig

http://download.oracle.com/otn-pub/jcp/servlet-3.0-fr-eval-oth-JSpec/servlet-3_0-final-spec.pdf?AuthParam=1378521700_c856fbccc3460a9c9e8be159abb92ee9

13년 9월 8일 일요일

Page 4: spring3.2 java config Servler3

javaConfig<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/app-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

web.xml

13년 9월 8일 일요일

Page 5: spring3.2 java config Servler3

javaConfig with Springpublic class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return null; }

@Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; }

@Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter[] { characterEncodingFilter, new SiteMeshFilter()}; }}

WebInitializer.java

13년 9월 8일 일요일

Page 7: spring3.2 java config Servler3

Spring 3.2.? with javaConfig@EnableWebMvc@ComponentScan(basePackages = "com.playfam.web")public class WebConfig extends WebMvcConfigurerAdapter {

@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); }

@Override public void addInterceptors(InterceptorRegistry registry) {

LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); registry.addInterceptor(localeChangeInterceptor); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { Charset s = Charset.forName("UTF-8"); converters.add(new StringHttpMessageConverter(s)); }

@Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setMaxUploadSize(5*1024*1024); return multipartResolver; } }

13년 9월 8일 일요일

Page 8: spring3.2 java config Servler3

properties@Configuration@PropertySource({ "classpath:db.${spring.profiles.active:local}.properties", "classpath:conf.${spring.profiles.active:local}.properties" })public class PropertiesConfig {

@Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer(); }}

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:db.${spring.profiles.active}.properties</value> <value>classpath:conf.${spring.profiles.active}.properties</value> </list> </property> </bean>

13년 9월 8일 일요일

Page 9: spring3.2 java config Servler3

datasource<tx:annotation-driven/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="${db.mssql.driverClassName}"/> <property name="url" value="${db.mssql.url}"/> <property name="username" value="${db.mssql.username}"/> <property name="password" value="${db.mssql.password}"/> <property name="maxActive" value="${db.mssql.maxActive}" /> <property name="maxIdle" value="${db.mssql.maxIdle}" /> <property name="maxWait" value="${db.mssql.maxWait}" /> <property name="defaultAutoCommit" value="${db.mssql.defaultAutoCommit}" /> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>

13년 9월 8일 일요일

Page 10: spring3.2 java config Servler3

datasource@Configuration@EnableTransactionManagementpublic class DatabaseConfig { @Profile({ "local", "dev", "stg" }) static class Local {

@Autowired Environment env; @Bean public DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); try{ ds.setDriverClassName(env.getProperty("db.mysql.driverClassName")); ds.setUrl(env.getProperty("db.mysql.url")); ds.setUsername(env.getProperty("db.mysql.username")); ds.setPassword(env.getProperty("db.mysql.password")); }catch(Exception e){ e.printStackTrace(); } return ds; } }

@Bean @Autowired public DataSourceTransactionManager txManager(DataSource dataSource){ DataSourceTransactionManager txManager = new DataSourceTransactionManager(); txManager.setDataSource(dataSource); return txManager; }}

@Profile({ "real" }) @Resource(name="jdbc/MyDB") static class Prod { @Bean public DataSource dataSource() { final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); dsLookup.setResourceRef(true); DataSource dataSource = dsLookup.getDataSource("java:comp/dnv/jdbc/MyDB"); return dataSource; } }

13년 9월 8일 일요일

Page 11: spring3.2 java config Servler3

mybaties3.?@Configuration//@MapperScan("classpath:com/playfam/web/model/mapper/**/*.xml")public class MybatisConfig { @Bean @Autowired public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{ SqlSessionFactoryBean sb = new SqlSessionFactoryBean(); sb.setDataSource(dataSource); sb.setMapperLocations(

new PathMatchingResourcePatternResolver().getResources("classpath:com/playfam/web/model/mapper/*.xml"));

sb.setConfigLocation(new DefaultResourceLoader().getResource("classpath:config_mybatis.xml")); return sb.getObject(); }

@Bean @Autowired public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory){ SqlSessionTemplate s = new SqlSessionTemplate(sqlSessionFactory); return s; }}

기존설정 유지

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/playfam/model/mapper/**/*.xml" /> <property name="configLocation" value="classpath:config_mybatis.xml" /> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> </bean>

13년 9월 8일 일요일

Page 12: spring3.2 java config Servler3

mongoDB

@Configurationpublic class MongoConfig { @Autowired Environment env; @Bean public MongoTemplate mongoTemplate() { return new MongoTemplate( env.getProperty("db.mongo.dbName"), env.getProperty("db.mongo.user"), env.getProperty("db.mongo.pass"), env.getProperty("db.mongo.host"), Integer.parseInt(env.getProperty("db.mongo.port")), Boolean.parseBoolean(env.getProperty("db.mongo.autoConnectRetry")), Integer.parseInt(env.getProperty("db.mongo.connectionsPerHost")), Integer.parseInt(env.getProperty("db.mongo.connectTimeout")), Integer.parseInt(env.getProperty("db.mongo.maxWaitTime")), Integer.parseInt(env.getProperty("db.mongo.threadsAllowedToBlockForConnectionMultiplier")), Integer.parseInt(env.getProperty("db.mongo.socketTimeout")) ); }}

<bean id="mongoTemplate" class="com.itembay.common.mongo.MongoTemplate"> <constructor-arg name="dbName" value="${db.mongo.name}"/> <constructor-arg name="username" value="${db.mongo.user}"/> <constructor-arg name="password" value="${db.mongo.pass}"/> <constructor-arg name="host" value="${db.mongo.host}"/> <constructor-arg name="port" value="${db.mongo.port}"/> <constructor-arg name="autoConnectRetry" value="${db.mongo.autoConnectRetry}"/> <constructor-arg name="connectionsPerHost" value="${db.mongo.connectionsPerHost}"/> <constructor-arg name="connectTimeout" value="${db.mongo.connectTimeout}"/> <constructor-arg name="maxWaitTime" value="${db.mongo.maxWaitTime}"/> <constructor-arg name="threadsAllowedToBlockForConnectionMultiplier" value="${db.mongo.threadsAllowedToBlockForConnectionMultiplier}"/> <constructor-arg name="socketTimeout" value="${db.mongo.socketTimeout}"/> <constructor-arg name="cacheConfigPath" value="${cache.prop.path}"/> </bean>

13년 9월 8일 일요일

Page 13: spring3.2 java config Servler3

mongoDBpublic class MongoTemplate { private static DB db; private static MongoClient mongoClient; public MongoTemplate(String dbName, String username, String password, String host, int port, boolean autoConnectRetry, int connectionsPerHost, int connectTimeout, int maxWaitTime, int threadsAllowedToBlockForConnectionMultiplier, int socketTimeout) { if(mongoClient == null){ Builder b = MongoClientOptions.builder(); b.autoConnectRetry(autoConnectRetry); b.connectionsPerHost(connectionsPerHost); b.connectTimeout(connectTimeout); b.maxWaitTime(maxWaitTime); b.threadsAllowedToBlockForConnectionMultiplier(threadsAllowedToBlockForConnectionMultiplier); b.socketTimeout(socketTimeout); MongoClientOptions options = b.build(); try { List<ServerAddress> list = new ArrayList<ServerAddress>(); for(String h : host.split(";")){ list.add(new ServerAddress(h.split(":")[0], Integer.parseInt(h.split(":")[1]))); } mongoClient = new MongoClient(list,options); mongoClient.setWriteConcern(WriteConcern.SAFE); db = mongoClient.getDB(dbName); db.authenticate(username, password.toCharArray()); } catch (Exception e) { e.printStackTrace(); } } } public static DBCollection getDBCollection(String collectionName){ return db.getCollection(collectionName); }}

13년 9월 8일 일요일

Page 14: spring3.2 java config Servler3

cache - infinispan@Configuration@EnableCachingpublic class InfinispanConfig { @Bean public SpringRemoteCacheManagerFactoryBean cacheManager() throws Exception{ SpringRemoteCacheManagerFactoryBean cacheManager = new SpringRemoteCacheManagerFactoryBean(); String active = System.getProperty("spring.profiles.active", "local"); cacheManager.setConfigurationPropertiesFileLocation(

new DefaultResourceLoader().getResource("classpath:hotrod-client-"+active+".properties"));

return cacheManager; }} @Autowired CacheManager cacheManager;

@Test public void test() throws Exception { //obtain a handle to the remote default cache Cache cache = cacheManager.getCache("default"); //now add something to the cache and make sure it is there cache.put("car", "ferrari"); assert cache.get("car").get().equals("ferrari"); cache.evict("car"); assert cache.get("car").equals(null); }

https://docs.jboss.org/author/display/ISPN/Using+Infinispan+as+a+Spring+Cache+provider

13년 9월 8일 일요일

Page 15: spring3.2 java config Servler3

cache - infinispan✓ @Cacheable

✓ @CachePut

✓ @CacheEvict

@Cacheable(value = "authCache", key = "#key")public DBObject getAuthInfo(String key) throws Exception

@CachePut(value = "authCache", key = "#key")public DBObject generateAuthInfo(String key) throws Exception

@CacheEvict(value = "authCache", key = "#key")public void removeAuthInfo(String key) throws Exception

13년 9월 8일 일요일

Page 16: spring3.2 java config Servler3

sitemesh@Override

protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter[] { characterEncodingFilter, new SiteMeshFilter()}; }

<?xml version="1.0" encoding="UTF-8"?><decorators defaultdir="/WEB-INF/decorators/">

<excludes> <pattern>/rss/*</pattern> <pattern>/test/*</pattern> <pattern>*.json</pattern> </excludes>

<decorator name="default" page="mobileLayout.jsp"> <pattern>/</pattern> </decorator> <decorator name="mobile" page="webLayout.jsp"> <pattern>*.m</pattern> </decorator> <decorator name="app" page="appLayout.jsp"> <pattern>*.app</pattern> </decorator>

</decorators>

13년 9월 8일 일요일