2015의 게시물 표시

[UnitTest] 에서 andDo(print()) 사용 시 java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted() 에러 조치

문제 : 서블릿 3.0 을 사용하고 있음에도 버전 충돌이 생겨 테스트가 진행이 되지 않음 원인 : servlet 버전이 맞지 않았을 때 발생. spring 4.0 의 spring-test 에서는 servlet 3.0 스펙을 요구함 상태 : servlet-api-3.0 버전을 사용하고, web.xml 에도 3.0사용을 명시를 하였으나, HttpServletRequest.isAsyncStarted() 메서드가 없다는 에러가 계속 발생함. 조치 1 :  Maven reference 에 servlet-2.x 를 사용하고 있는지 확인 누가 사용하는지는 모르지만 servlet-api-2.5.jar 가 들어가 있는 것을 확인 조치 2 :  mvn dependency:tree -Dverbose -Dincludes=javax.servlet 명령어로 메이븐   의존 tree 검색 junit-runner 에서 servelt-api-2.5를 사용하고 잇는 것을 발견.  해당 버전 업데이트 하여 해결

[JDBC] 쿼리 후에 ResultSet 에 데이터가 있는지 확인하는 방법

외부 DB와 연동하는 코드에서 ResultSet에 데이터가 있는지 여부 아래와 같이 확인하였다. ResultSet rs = null; if(rs.next()){     rs.previous()     //조회 된 데이터를 DB에 저장 } MySQL에서 데이터를 불러올 때는 문제가 없었지만 MSSQL에서 커서는 전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다.  라는   에러가 발생하였다. 이는 ResultSet 기본설정이 TYPE_FORWARD_ONLY 로 되어있기 때문이다. 아래와 같이 상수 두개를 선언해 주어 에러가 발생하지 않도록 조치하였다. 조치 방법은 2가지 이다. 1. 기본설정 변경 PreparedStatement pstmt = dbConnFactory.getConnection().prepareStatement(connectorManager.getCollectorConfig().getQuery(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 2. 메서드 사용 rs.isBeforeFirst();  조회 된 데이터가 없으면 false 를 반환한다.

[Spring] Springfox-swagger 적용하여 API문서 자동 생성 하기(asciidoc, markdown)

이미지
pom.xml 에 dependency 및 plugin 추가         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-swagger2</artifactId>             <version>2.3.0</version>             <scope>test</scope>         </dependency>         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-staticdocs</artifactId>             <version>2.3.0</version>             <scope>test</scope>         </dependency>         <dependency>             <groupId>io.github.robwin</groupId>             <artifactId>swagger2markup</artifactId>             <version>0.9.1</version>             <scope>test</scope>         </dependency>         <plugins>             <plugin>                 <groupId>org.asciidoctor</groupId>      

[Android] Duplicate lib file copied in APK-META-INF/license.txt ”error in andorid studio

Android sdudio 로 빌드를 하던 중 아래와 같은 에러가 발생하였다. Duplicate lib file copied in APK-META-INF/license.txt ”error in andorid studio license.txt 부분에는 사실 다른 것들도 올 수 있다. 위와 같은 에러가 발생하는 이유는 2개 이상의 라이브러리들이 license.txt 를 가지고 있어 중복이 생기기 때문이다. build.gradle 에서 문제가 발생하는 부분을 아래와 같이 exclude를 해주면 해결 할 수 있다. packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } stack overflow:  Meta-files doesn't affect any programmatic functions of application. Meta files basically contains Textual information like legal-notice, Licences etc of open sources libraries. Excluding it will not affect any thing. When we use multiple 3rd party open source libraries, sometimes 2 or more projects has same named text files (Example: License.txt or Notice.txt or dependencies.txt). That causes the conflict

Windows 10 부팅 USB 만들기

목차 Windows 10 ios 파일 다운로드 4GB 이상의 USB 준비  Rufus 프로그램을 이용하여 부팅 USB 로 제작 Windows 10 ios 파일 다운로드 https://www.microsoft.com/en-us/software-download/techbench   접속 (MS 공식 사이트) Select Edition 메뉴에서 Windows 10 선택 후 Confirm Select the product language 메뉴에서 사용하고자 하는 언어 선택 32 비트 or 64 비트 선택하여 다운로드 USB 준비  Rufus 프로그램을 이용하여 부팅 USB 로 제작 http://rufus.akeo.ie/  접속 후 안내문에 따라 설치

[Tomcat] - java.lang.ClassNotFoundException: org.apache.catalina.mbeans.ServerLifecycleListener 에러

이미지
Tomcat 6.0 에서 사용하던 server.xml 설정을 Tomcat 7.0에 복사 붙여넣기 하여 사용하였더니  java.lang.ClassNotFoundException: org.apache.catalina.mbeans.ServerLifecycleListener 가 발생하였다.  비교해 보니 다른 설정은 동일한데  6.0 에 있는 아래 설정이 7.0 에는 없다.   <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 대신 하단의 설정이 새로 생겨있다.   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> ServerLifecycleListener 가  ThreadLocalLeakPreventionListener 으로 대체 된 듯 하다.  7.0 changelog를 보면 ServerLifecycleListener 이 제거 되었다고 나온다.  http://telefonkonyv.ke.hu/docs/changelog.html Remove ServerLifecycleListener . This was already removed from server.xml and with the Lifecycle re-factoring is no longer required. (markt) Add additional checks to ensure that sub-classes of org.apache.catalina.util.LifecycleBase  correctly implement the expected state transitions. (markt)

[JAVA8] jdk-1.8.0_5x 버전에서 jmap dump 시 jmap crashes with “can not get class data for xxx Lambda$” 에러 발생 조치방법

  jmap dump 를 이용하여 jvm 메모리 덤프를 뜨려하였으나 람다코드를 사용한 곳에서 에러가 발생하며 실행 취소가 되었다. 처음에는 에러가 발생한 라인의 람다코드만 다시 일반 코드로 변경해 주는 방식으로 처리하였다. 하지만 동일한 에러가 다른 람다코드에서도 발행하였다. 영문도 모른체 람다를 사용한 코드 모두를 변경하기에는 억울하여 검색을 해보니 이미 알려진 Java8의 버그였다. 버그가 수정된 jdk-1.8.0_60 버전으로 업데이트하여 해결하였다.

[Tomcat] HTTPS 설정 하기 (AprProtocol)

Tomcat 에서 https 로 접속하도록 하는 설정 Server Key 생성 Apr 설치  tomcat-native library 설치 톰캣 실행 파일(startup.sh) 에 native library가 설치 된  지정 server.xml 설정 web.xml 설정

[Android] Android GCM 등록방법

이미지
GCM 등록 페이지 https://developers.google.com/cloud-messaging/android/client   오랜만에 안드로이드 푸시 서비스 등록을 하려던 중 이전과 절차가 달라졌다. 기억은 잘 나지 않지만 기존에는"google 개발자 콘솔” 에서 프로젝트를 및 GCM 서비스 사용 여부를 설정하고, project-id 를 sender-id 로 사용 지정하여 사용하였다. 변경 된 방식은 프로젝트에 json 파일을 추가해 주고, Gradle 에도 일부 내용을 추가해야 하는 내용이 있다. GCM 페이지에서 친절하게 알려주기는 하지만 정리를 해본다. GCM Clients > Android > GET A CONFIGURATION FILE 버튼 클릭 App name 은 구글 개발자 콘솔에서 생성한 프로젝트명 , 그 아래는 안드로이드 프로젝트의 기본 패키지 명을 적어준다. Choose and configure services 버튼 클릭. ENABLE GOOGLE CLOUD MESSAGING 버튼 클릭 Generate configuration files 버튼이 활성화 되면 클릭  Json 파일 다운로드 app 모듈에 google-services.json 파일 복사 프로젝트 최상위의 build.gradle 에 추가  classpath 'com.google.gms:google-services:1.3.0-beta1’ app 모듈의 build.gradle 에 추가 compile 'com.google.android.gms:play-services-gcm:7.5.+'