본문 바로가기

Java

AXBoot를 IntelliJ IDEA에서 처음 사용할 때 유의할 점 AXBoot Initializer로 생성한 프로젝트를 IntelliJ IDEA에서 열고 실행하려고 하면, QMenu, QCommonCode 등의 JPA 도메인 클래스 관련 오류가 발생하면서 빌드가 실패한다. 이럴 때는 "View > Tools Windows > Maven Projects" 메뉴를 이용해서 Maven 패널을 열고, Lifecycle 하위의 clean, package 골을 차례로 실행한다. 이 오류는 Querydsl 관련 클래스가 없어서 발생하는데, 위의 과정을 통해서 생성하는 것이다. EOF 더보기
AXBoot-WildFly 9을 사용할 때의 JWTSessionHandler 문제 com.chequer.axboot.admin.utils.JWTSessionHandler는 javax.xml.bind.DatatypeConverter 클래스를 이용하여 BASE64 인코딩/디코딩을 수행합니다. 그런데 WildFly 9 버전의 경우에는 문제가 있습니다. WildFly 9은 JDK의 DatatypeConverter를 사용하는게 아니라 별도의 내장된 버전을 사용하기 때문입니다.좀 더 정확하게는 wildfly-9.0.2.Final/modules/system/layers/base/javax/xml/bind/api/main/jboss-jaxb-api_2.2_spec-1.0.4.Final.jar 파일에 포함된 것을 사용합니다.이 버전은 URL-safe 하지 않은 인코딩을 수행하기 때문에 쿠키를 이용한 .. 더보기
AXBoot Framework - war 파일 형태로 실행 AXBoot Initialzr 로 생성한 프로젝트는 war 파일 형태로 바로 실행이 안된다. 안되길래 그냥 프로젝트 루트에서 $ mvn spring-boot:run 으로 실행했었는데, war 만 배포해서 실행할 일이 생겼다.원인을 찾아보니 별일은 아니었다. 아래와 같이 Spring Boot Maven Plugin 을 pom.xml 의 plugins 부분에 추가하면 된다. 4.0.0 org.springframework.boot spring-boot-maven-plugin 1.5.7.RELEASE repackage 위 코드는 아래의 Spring Boot 공식 문서에서 가져온 것이다.Spring Boot Maven plugin자세한 설명은 가서 보시길. EOF 더보기
WildFly (JBoss)가 자동 적용하는 라이브러리 배제 방법 톰캣에서는 잘 돌아가던 애플리케이션이, WildFly에 배포해서 사용하려고 하면 로깅 부터 시작해서 여러가지 문제가 발생하는 경우가 있다. WildFly의 버전을 올리면 해결되는 경우도 있지만, 버전을 올릴 수 없는 경우에는 WildFly가 제공하는 디펜던시(dependencies)를 배제하여 애플리케이션의 자체 디펜던시를 사용하도록 조정해야 한다.이를 위해서는 WEB-INF/jboss-deployment-structure.xml 파일을 만들고 아래와 같이 배제할 모듈을 명시하면 된다. 배제할 모듈의 이름을 알아 내기 위해서는, $WILDFLY_HOME/modules/system/layers/base 디렉토리 하위의 각 디렉토리에서 module.xml 파일 내용을 확인하면 된다. 추가: 참고로 위의 설정.. 더보기
Spring Boot : auto-configuration 그리고 debug Spring Boot 애플리케이션의 auto-configuration 정보를 확인하거나 DEBUG 레벨의 로그를 확인하려면 아래와 같이 --debug나 -Ddebug 옵션을 주면 됩니다. $ java -jar myapp.jar --debug 그리고 문서에서는 확인이 안되지만 applicaton.properties 파일에, 값 없이 debug 키를 선언해도 됩니다(debug: 혹은 debug=). debug: spring.datasource.url: jdbc:hsqldb:file:D:/tmp/hsqldb/scratchdb spring.jpa.show-sql: true spring.jpa.generate-ddl: true spring.jpa.hibernate.ddl-auto: create 이렇게 debug .. 더보기
Spring Data JPA - LazyInitializationException 개요 요즘 Spring Boot 저장소에 있는 Spring Data JPA 샘플 프로젝트를 살펴 보고 있습니다.테스트 코드를 작성하면서 하나하나 파악하고 있는데, OneToMany로 엮인 다른 엔티티의 목록을 가져오려고 하면 아래와 같은 오류가 발생합니다. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: kr.co.javaworld.jpa.domain.Person.cars, could not initialize proxy - no Session at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitia.. 더보기
Spring Shell Command 구현 개요 HelloWorldCommands 클래스를 통해서 Spring Shell 커맨드 구현 방법을 살펴 보겠습니다. Marker interface HelloWorldCommands는 org.springframework.shell.core.CommandMarker 인터페이스를 구현하고 있습니다. @Component public class HelloWorldCommands implements CommandMarker { } CommandMarker는 마커 인터페이스라서 커맨드 구현체라는 것을 알려주기 위해서 implements 할 뿐입니다. 따라서 구현할 메소드는 없습니다. @Component annotation은 component-scan을 통해 bean으로 등록되라고 붙여 줬습니다. CLI Annotat.. 더보기
Spring Shell 소개 소개 스프링 프로그래밍 모델을 기반으로 손쉽게 커맨드라인 애플리케이션(interactive shell)을 만들 수 있도록 도와주는 프로젝트입니다. 홈페이지(GitHub) https://github.com/spring-projects/spring-shell 샘플 애플리케이션 Spring Shell은 샘플 애플리케이션을 제공합니다. HelloWorld 애플리케이션은 부트스트랩(Bootstrap)/커맨드(Command)/베너(Banner)/프롬프트(Prompt)의 기본 구현 방법을 보여줍니다. 샘플을 통해 Spring Shell을 이해하는게 효과적이기 때문에 이를 통해 Spring Shell 사용 방법을 하나하나 설명토록 하겠습니다. Clone 먼저 Spring Shell 프로젝트를 Clone합니다. ~$ g.. 더보기