2011년 12월 11일 일요일

javax.validation.ValidationException: Unable to find a default provider

If you are using Maven, you must add a dependency to the Hibernate Validator Annotation Processor.


<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator-annotation-processor</artifactId>
  <version>4.1.0.Final</version>
</dependency>

Add - com.springsource.org.hibernate.validator.jar

2011년 12월 7일 수요일

Spring Web.xml and Annotation Configurer


 <servlet>
     <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

   <servlet-mapping>
     <servlet-name>dispatcher</servlet-name>
     <url-pattern>/*</url-pattern>
   </servlet-mapping>

---------------------------------------------------------------------------------

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import
       org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;



public class WebAppInitializer implements WebApplicationInitializer {


       @Override
public void onStartup(ServletContext servletContext) throws ServletException {




        AnnotationConfigWebApplicationContext dispatcherContext =
                                                          new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);

ServletRegistration.Dynamic dispatcher =
servletContext.addServlet("dispatcher",
                                                 new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");

       }

}

Spring ContextInfomation example



HomeController


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;



@Controller
public class HomeController {

@RequestMapping (value="/test", method=RequestMethod.GET)
public ModelAndView test (){
System.out.println("Welcome Home Controller!");
UserImpl user = new UserImpl();

System.out.println( user.getUser());

ModelAndView model = new ModelAndView("Test");
model.addObject("message", "한글메시지 model.addObject 로 전달");
model.addObject("userMessage",user);
return model;
}
}




<%@page import="org.springframework.web.servlet.ModelAndView"%>
<%@page import="org.springframework.web.servlet.ViewRendererServlet"%>
<%@page import="org.springframework.web.context.WebApplicationContext"%>
<%@page import="org.springframework.web.servlet.support.RequestContextUtils"%>
<%@page import="java.util.Locale"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="org.springframework.context.ApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ include file="/WEB-INF/jsp/include.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
      <p>sample Data </p><c:out value="${testData}"></c:out>
   
      <fmt:message key="main.title.name"></fmt:message>
      <fmt:message key="main.header"></fmt:message>    
<%
        Enumeration<?> e = request.getAttributeNames();
        HashMap<String,Object> map = new HashMap<String,Object>();

        out.println ("Locale is " + response.getLocale());
        out.println ("<table border='1'>");

        while (e.hasMoreElements()){
    String temp = e.nextElement().toString();
    map.put(temp, request.getAttribute(temp));
       out.println ("<tr><td>" + temp + "</td><td>" +  map.get(temp)  + "</td></tr>");
         }

        out.println ("</table>");

       WebApplicationContext webContext =
                            RequestContextUtils.getWebApplicationContext(request);

   
      SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd : HH:mm:ss");
%>  
</body>
</html>

Spring 3.x Annotation WebApplicaitonInitializer / without web.xml


package com.domain.config;


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class WebAppInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {

AnnotationConfigWebApplicationContext rootContext =
                                           new AnnotationConfigWebApplicationContext();
rootContext.register(AppConfig.class);

servletContext.addListener(new ContextLoaderListener(rootContext));

AnnotationConfigWebApplicationContext dispatcherContext =
                                           new   AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);

ServletRegistration.Dynamic dispatcher =
                       ServletContext.addServlet("dispatcher", new  DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}

}



package com.domain.config;

public class AppConfig {

}


package com.domain.config;



import java.util.List;

import javax.inject.Inject;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.tiles2.TilesConfigurer;


@Configuration
@EnableWebMvc
@ComponentScan (basePackages = "com.domain")
public class DispatcherConfig extends WebMvcConfigurerAdapter {

@Inject
private Environment environment;
private final Log logger = LogFactory.getLog(getClass());
// implementing WebMvcConfigurer

@Bean 
public ViewResolver viewResolver (){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
//-----------------------------------------//
// Configures Tiles at application startup //
//-----------------------------------------//
@Bean
public TilesConfigurer tilesConfigurer(){
TilesConfigurer configurer = new TilesConfigurer();
configurer.setDefinitions(new String[]{
 "/WEB-INF/layouts/tiles.xml"
//  "/WEB-INF/views/**/tiles.xml"
});
configurer.setCheckRefresh(true);
return configurer;
}

//-------------------------------------------------------//
// Messages to support internationalization/localization //
//-------------------------------------------------------//
@Bean
public MessageSource messageSource (){
ReloadableResourceBundleMessageSource messageSource 
                 = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/messages/messages");
if (environment.acceptsProfiles("embedded")){
messageSource.setCacheSeconds(0);
}
return messageSource;
}

public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
public Validator getValidator() {
logger.info("Validation check ---------------------");
LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean();
ReloadableResourceBundleMessageSource messageSource = 
                                                                          new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/messages/validation");
if (environment.acceptsProfiles("embedded")) {
messageSource.setCacheSeconds(0);
}
logger.info(messageSource);
factory.setValidationMessageSource(messageSource);
return factory;
}
// com.springsource.org.codehaus.jackson
// com.springsource.org.codehaus.jackson.mapper
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJacksonHttpMessageConverter());
}
}


package com.domain.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.domain.data.UserImpl;

@Controller
public class HomeController {

@RequestMapping (value="/", method=RequestMethod.GET)
public ModelAndView Home (){
ModelAndView model = new ModelAndView ("Home");
model.addObject("message","messageObject");
return model;
}
}


WebContent/WEB-INF/views/Home.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"  pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    HomeController Message get  ${message}
    <h1>Welcome Spring Annotation Base Web Configuration </h1>
</body>
</html>


2011년 11월 20일 일요일

SpringFramework MVC Example

스프링 프레임웍 은 유연하게 결합한 웹 응용프로그램을 구축하는데 도움을 준다.
MVC (모델뷰컨트롤러) 디자인패턴은 비지니스로직, 프리센테이션 로직 과 탐색로직을 분리
구현하는데 도움이 된다.

2011년 11월 19일 토요일

SpringFramework Java Config Import Example

UserConfig.java


package com.domain;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.domain.User;
@Configuration
public class UserConfig {

     @Bean (name="user")
     public User user (){
           return new User();
     }
}

ProductConfig.java

package com.domain;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.domain.Product;
@Configuration
public class ProductConfig {

     @Bean (name="product")
     public Product  product (){
           return new Product();

     }

}

AppConfig.java
package com.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import ({UserConfig.class,ProductConfig.class})
public class AppConfig {
   
}







MainApp.java

package com.domain;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.config.AppConfig;

public class MainApp {

    public static void main(String[] args) {
             // ApplicationContext context =
             //           new ClassPathXmlApplicationContext ("beans.xml");
              ApplicationContext context =
                           new AnnotationConfigApplicationContext (AppConfig.class);
   
              User user = (User) context.getBean ("user");
              user.printMsg ("User Message");

              Product product = (Product) context.getBean ("product");
              product.printMsg ("Product Message");

        
    }
}

User.java and Product.java

public class User {
     public void printUser(String message){
          System.out.println ("User Message : " + message);
     }
}

또는 XML 로 처리 할수 있다

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


   
    <import resource="User.xml"/>
    <import resource="Product.xml"/>

</beans>

2011년 11월 18일 금요일

SpringFramework JavaConfiguration Example

HelloWorld.java

pakage com.domain.xxx;

public interface HelloWorld {
   void  printHelloWorld (String message);
}

HelloWorldImpl.java

public class HelloWorldImpl implements HelloWorld {
    @Override
    public void printHelloWorld (String message){
        System.out.println ("Sring 3 : java Configuration Example  Message : " + message);
    }
}

AppConfig.java

@Configuration
public class AppConfig {
    @Bean (name="helloWorld")
     public HelloWorld helloWorld () {
        return new HelloWorld();
     }
}

Main.java
public class Main {
    public  static void main(String[] args) {
       /* ---------------------------------------------------------------
       *   ApplicationContext context =
       *                    new ClassPathXmlApplicationContext ("SpringBeans.xml");
       * -------------------------------------------------------------- */
        ApplicationContext context =
                new AnnotationConfigApplicationContext    (AppConfig.class);

        HelloWorld hello = (HelloWorld) context.getBean ("helloWorld");
        hello.printHelloWorld("Message");

    }
}

필요Lib : CGLib (Spring Dependencies / net.sourceforget.cglib package )


2011년 11월 12일 토요일

SpringFramework Injection di property

User.java   method
package com.domain;

public class User {
   
// name , age , country 에 beans.xml 에서 bean property 를 이용하여 값을 설정 할수있다
    private String name;
    private int    age;
    private String country;
   
   
   
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
   

    public String toString (){
        return "Name : " + name + " : " + age + " : " + country;
    }
   
}




beans.xml

  <bean id="user" class="com.domain.User">
       <property name="name"    value="홍길동"></property>
       <property name="age"     value="20"></property>
       <property name="country" value="조선"></property>
   </bean>

SpringFramework Construct Injection

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="com.domain.User" >
       <!-- Contruct  Injection  -->
       <constructor-arg index="0" value="홍길동"></constructor-arg>
       <constructor-arg index="1" value="10"></constructor-arg>
       <constructor-arg index="2" value="한국"></constructor-arg>
    </bean>
</beans>

applicationContext-2.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="user2" class="com.domain.User" >
      <!-- Contruct  Injection  -->
      <constructor-arg value="name"></constructor-arg>
      <constructor-arg value="12"></constructor-arg>
      <constructor-arg value="Korea"></constructor-arg>    
   
   </bean>

</beans>

User.java   method
package com.domain;

public class User {
   
    private String name;
    private int    age;
    private String country;
   
   // Construct Injection 에 사용되는 Method
    public User(String name,int age,String country){
        this.name = name;
        this.age  = age;
        this.country = country;
    }
   
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
   

    public String toString (){
        return "Name : " + name + " : " + age + " : " + country;
    }
   
}

UserApp.java

package com.service;

import javax.annotation.Resources;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

import com.domain.User;

public class UserApp {

   
    public static void main (String[] args){
       //  static Log
        final Log logger = LogFactory.getLog(UserApp.class);
       
        logger.info("Logger Start ");
       
   //   ------------------ 방법 1 ----------------------------------//
   //  FileSystemResource ("") 경로에 주의                                          //
   //     Resource res = new FileSystemResource("src/beans.xml");
   //     XmlBeanFactory factory = new XmlBeanFactory(res);


   //  ------------------- 방법 2 ----------------------------------//   
   //  클래스 패스의 경로에 위치                                                         //
   //   ClassPathResource resource = new ClassPathResource ("beans.xml");
   //   XmlBeanFactory factory = new XmlBeanFactory(resource);
   
   // ----------------------- 방법 3 --------------------------------//   
        ClassPathXmlApplicationContext appContext =
                  new ClassPathXmlApplicationContext (new String[] {
                      "applicationContext.xml" , "applicationContext-2.xml"     
                  });
        BeanFactory factory = (BeanFactory) appContext;
       
        User user = (User) factory.getBean("user");
        User user2 = (User) factory.getBean("user2");

   // ------------------------- 방법 4 -------------------------------//
   //     ApplicationContext context = new ClassPathXmlApplicationContext ("beans.xml");
   //     User user = (User) context.getBean("user");

        logger.info ("User Class method Start" + user.toString());
        System.out.println(user.toString());
        System.out.println(user2.toString());
       
       
       
    }
}


2011년 11월 11일 금요일

SpringFramework BeanFactory 1

User.java

public class User {
     private String name;
     private int      age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
}


UserApplication.java

package com.domain.example 


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public UserApplication {

    
       public static void main (String[] args){
        
       // POJO Style Java Code  
       //  User user = new User();
       // System.out.println ("User Name is :" + user.getName +
        //                           "Age                :" + user.getAge );


       //------------------------------------------------------//
       // SpringFramework Bean Factory  Java Code                       //
       //------------------------------------------------------//

       ApplicationContext context = ClassPathXmlApplicationContext ("beans.xml"); 
       User  user = (User) context.getBean("user");
       System.out.println ("User name is : " + user.getName);


      }
}

 beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">

     <bean id="user" class="com.domain.example.User" />

</beans>