Programming/JAVA2013.02.23 14:05

윈도우에서는 문제가 없었는데 iMac을 사용하면서 톰캣을 사용하려고 보니 문제가 생겼다.


첫 페이지는 잘 뜨는데 디비에 접속하는 부분이 있는 로그인을 하게 되면 오류가 발생하는 것이다.

그것도 흔한 OutOfMemory.... 많이 본 내용이라 매번 하던 것 처럼 Eclipse.ini를 변경했다.


--launcher.XXMaxPermSize 256M -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m


이렇게 변경하고 해봐도... 오류는 없어지지 않았다.


아무리 생각해도 tomcat은 이클립스와는 별개여서 다른 설정이 적용되는 것 같다.




톰캣 VM설정에 PermSize를 넣어 주면 정상적으로 동작하게 된다. 


 -XX:PermSize=64m -XX:MaxPermSize=256m


다음엔 꼭 삽질하지 말자!

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2012.10.26 12:14

특정 view가 아닌 URL로 redirect 할 필요가 있다.

아래와 같은 방법으로 하면 된다.

절대 @ResponseBody를 붙이면 안 된다.

@RequestMapping("/redirect")
public String redirect(@RequestParam("url") String url) {
    return "redirect:" + url;
}

출처 : http://stackoverflow.com/questions/9311940/redirect-to-dynamic-url-in-spring-mvc

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2012.10.05 21:31

새로운 회사에 들어 와 새로운 프레임워크를 사용하게 되었습니다.

이미 많이 사용하고 있는 Spring Framework 3 입니다.

한달이 다 되어 가지만 기본 구조도 제대로 모른체 끼어 맞추기 식으로 계속 코딩을 해 왔습니다.

일정을 길게 잡고 해도 눈치가 보이고 스스로 기분이 안 좋아 졌습니다.

내가 이 정도 밖에 안 되나? 라는 생각을 많이 하게 됩니다.

그래서 회사에 있던 '스프링 인 액션' 책을 펼쳤습니다.

책을 읽으면서 정리할 것을 간단히... 아주 간단히 정리해 보려고 합니다.

혼자 맘 내키면 하는거라 언제 정리를 안 하게 될지는 모르겟으나.. 일단 시작합니다.


1. Bean or Java Bean

두개는 같은 말이며 자바에서 컴포넌트를 가르키는 말이다.


2. POJO (Plain-Old Java Object)

기타 다른 것 등을 사용하지 않은 평범한 자바 객체


3. DI (Dependency Injection) - 종속객체 주입

A Class 에서 B Class의 객체를 생성하여 사용하고 있다고 가정하자. 결합도가 높아지며 단위 테스트에도 어려움이 생긴다.

B Class의 객체 생성을 A Class 내부에서 하지 않고 application context 등에서 해준다.

A Class에서 B Class의 객체를 필요로 할때 자동으로 생성해 준다.

결합도를 낮추고 단위 테스트가 쉽게 해준다.


4. 와이어링 (wiring)

애플리케이션 컴포넌트 간의 관계


5. 애플리케이션 컨텍스트 (application context)

빈에 관한 정의를 바탕으로 객체 생성과 와이어링을 책임진다


6. AOP (Aspect Oriented Programming) - 관점지향 프로그래밍

로직과는 상관없는 로깅 같은 코드가 많은 부분에 들어 가 있을 것 이다.

코드를 일차원적인 흐름에서 보는게 아니라 옆면에서 보는 것과 비슷하다

여러 위치에서 수행되는 동일한 코드를 외부에서 정의하여 수행할 수 있도록 해준다.


7. pointcut

AOP 에서 사용하는 용어이다.

junit 에서 when과 비슷하다고 판단된다.

특정 코드를 실행할 위치라고 보면 될것 같다.


8. spring container

spring framework에서 사용되며 객체의 라이프 사이클을 관리한다.

객체 생성에서 부터 소멸까지의 과정을 관리 한다.

DI를 이용해서 컴포넌트를 관리한다.


9. 빈팩토리 (org.springframework.beans.factory.BeanFactory)

spring container 중 하나.

DI에 대한 기본적인 지원을 제공하는 가장 단순한 container.


10. 애플리케이션 컨텍스트 (org.springframework.context.ApplicationContext)

프로퍼티 파일에서 메시지를 읽어서 이벤트 발행 같은 프레임워크 서비스를 제공하는 container.


11. ClassPathXmlApplicationContext / FileSystemXmlApplicationContext / XmlWebApplicationContext

ApplicationContext 파일을 읽어 오는 방법이 다른 3가지 클래스


12. ORM (Object-Relational Mapping) - 객체 관계 매핑

객체와 테이블을 매핑하여 사용할 수 있게 해주는 도구


오늘은 여기 까지...; 



신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2012.09.12 21:12

JUnit test에서 void 매소드를 테스트하고 싶을때 기본적인 when().thenReturn() 으로는 테스트가 불 가능합니다.

다음과 같은 방법을 사용하면 void 매소드도 테스트 가능합니다.

MyClass myClass = mock(MyClass.class);
doCallRealMethod().when(myClass).funA(anyString());


funA - mock object가 실행할 void method

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2012.09.12 21:07

현재 실행 중인 class 파일의 절대 경로 구하기

String path = MyClass.class.getResource(".").getPath();


출처 : http://mrjh.com/wiki/content.php?no=211&page=5

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2012.08.28 20:53

STS를 실행하면 다음과 같은 오류가 발생합니다.

org.eclipse.swt.SWTError: Invalid thread access


이 문제를 해결하기 위해서는 다음의 파일을 삭제해 주면 됩니다.

\workspace\.metadata\.plugins\org.eclipse.core.res ources\.snap

신고
Posted by 초프(초보 프로그래머)
TAG STS, swt
Programming/JAVA2010.03.15 19:13

실수형 데이터에서 소수점을 제한해서 표현하고 싶을때!!!!

예를 들어 소수점 둘째 자리까지만 표기하고 싶을때!! 

그럴때 사용하는 함수가 있습니다. DecimalFormat

여기에 간단한 사용법을 남김과 동시에 버릴 소수점을 어떻게 처리하는지도 비교할수 있도록 같이 올립니다.

setRoundingMode 메소드가 처리하는 방법을 설정하는 함수 입니다.


import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Test {
	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("0.##");
		double num[] = {1.977, 1.975, 1.972};
		RoundingMode[] modes = {RoundingMode.UP, RoundingMode.DOWN, RoundingMode.CEILING, RoundingMode.FLOOR, RoundingMode.HALF_UP, RoundingMode.HALF_DOWN, RoundingMode.HALF_EVEN};
		
		for(int n=0; n<3; n++){
			System.out.println("number : "+num[n]);
			
			for(int i=0; i<7; i++){
				df.setRoundingMode(modes[i]);
				System.out.println(modes[i]+" : "+df.format(num[n]));
			}
			
			System.out.println();
		}
	}
}


출력결과

number : 1.977
UP : 1.98
DOWN : 1.97
CEILING : 1.98
FLOOR : 1.97
HALF_UP : 1.98
HALF_DOWN : 1.98
HALF_EVEN : 1.98

number : 1.975
UP : 1.98
DOWN : 1.97
CEILING : 1.98
FLOOR : 1.97
HALF_UP : 1.98
HALF_DOWN : 1.97
HALF_EVEN : 1.98

number : 1.972
UP : 1.98
DOWN : 1.97
CEILING : 1.98
FLOOR : 1.97
HALF_UP : 1.97
HALF_DOWN : 1.97
HALF_EVEN : 1.97




자세한 사항은 http://java.sun.com/javase/7/docs/api/java/text/DecimalFormat.html 여기서 확인 하세요....

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2009.10.13 00:34

ABC.java


Test.java


- Output -


list를 정렬하는 방법을 찾다가 찾은 방법입니다. CompareTo Method를 이용해서 두 객체의 비교가 일어납니다.

modified mergesort 가 이용되고 stable이 유지되며 O(n^2) 은 피하며 nlog(n)이 보장된다고 합니다.
신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2009.10.13 00:11

 Test.java


ABC.java

- Output -

직접 제작한 클래스의 복사가 가능한 Clone Method를 제작하는 방법 입니다.

clone() Method를 저렇게만 구현하면 기본적인 동작이 가능합니다.
신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2009.05.25 16:39

str_pad는 문자열을 지정한 만큼의 길이가 안되면 지정한 문자로 채우는 것입니다.

$number = 123;
$str = str_pad($number,5,"0",STR_PAD_LEFT) // "00123"


자바에서는 다음과 같이 하면된다.

int number = 123;
String str = String.format("%05d",number); // "00123"

신고
Posted by 초프(초보 프로그래머)