Java alternatives를 이용한 버전 변경

Published on: 2015.06.24 22:31 by krespo

기존에 설치되어있던 자바의 버전을 변경을 할때 CentOS, RHEL같은 OS에서는 JAVA_HOME환경변수만 잡아주더라도 java -version 으로 커맨드를 날려보면 제대로 변경이 안된다. 이때는 alternatives를 이용하여 자바의 버전을 변경하자.




$ su
# alternatives --install /usr/bin/java java ${새로운 자바가 설치된 경로}/bin/java 0
# alternatives --config java 
를 입력하면 현재 설치된 자바 버전이 쭉나오는데 alternatives --install로 지정한 번호를 입력하면 된다. 그 후 java -version으로 버전이 제대로 변경이 되어있는지 확인하면 끝
신고
Name
Password
Homepage
Secret

[Grails] Domain 클래스의 일부만 유효성 검사(Validation) 하기

Published on: 2014.05.30 17:36 by krespo

Grails에서 Domain의 Validation(유효성 검사)는 3번에 걸처 수행됩니다.


1. request의 파라미터에서 Domain object 로 변환될 때

2. Domain.validation() 메소드를 실행시킬 때

3. Domain.save() 와 같이 디비에 저장하는 메소드를 실행시킬 때


위와 같은 단계를 진행해 오면서 Domain class의 모든 필드들에 대한 유효성 검사를 하고, 유효성 검사에 문제가 생기면 Domain의 errors 필드에 유효성 검사 에러메세지가 저장되게 됩니다.


그러나 때에 따라 일부 필드들만 유효성 검사를 진행해야 하는 경우가 있는데, 이경우는 아래와 같이 하면 됩니다.



class Person {
	String ssn;
	String name;
	String address;

	static constraints = {
		ssn nullable:false
		name nullable:false
		address nullable:true
	}
}

Person person = new Person()
person.validation(['ssn', 'name']) //ssn과 name만 유효성 검사를 진행하고 address에 대한 validation은 진행하지 않게 됩니다.

//만약 클래스의 모든 필드 중 일부 필드에 대한 유효성검사만 제외하고 싶으면
def allField = Person.declaredFields.collectMany {!it.synthetic ? [it.name] : []}		//Person 도메인의 모든 필드를 리스트로 가져온다.
person.validation(allField - ['name', 'address'])	// 모든필드에서 name, address를 제외한 나머지 필드 즉 ssn만 validation을 진행한다.

//일부만 유효성 검사를 거친 도메인 오브젝트를 저장하려면 validate:false 를 사용하면 된다.

Person pserson = new Person()
person.validation(person.validation(allField - ['name', 'address']))
person.save(validate: false)
신고
Name
Password
Homepage
Secret

[Grails] H2 DB 외부에서 접속하기(Server Mode)

Published on: 2014.05.30 16:51 by krespo

Grails에서 따로 추가적으로 설정하지 않으면 H2 DB가 embeded 모드로 실행이 되게 됩니다. embeded mode로 실행하게 되면 H2 DB와 함께 실행되는 웹어플리케이션의 접근속도는 빠르지만, 외부의 다른 어플리케이션 혹은 DB Client 어플리케이션에서 접근할 수가 없습니다.


동일한 DB를 여러 어플리케이션에서 공유해서 쓴다거나, DB Client 프로그램을 사용하려면 H2 DB를 embeded mode가 아닌 server mode로 실행을 해야 합니다. server mode는 H2 프로세스가 웹 어플리케이션과 분리되어, 여러어플리케이션에서 동일한 디비를 공유하여 사용할 수 있습니다.


설정방법

1. DataSource.groovy 의 dataSource 부분에 url을 선언합니다.

production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:/db/file/path;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE;"
            //이하 설정 생략...
        }
}

URL 부분을 위와 같이 설정합니다. 위의 설정에서 Server mode라고 해서 특별히 달라지거나 할것은 없습니다. 단지 위의 내용에서 /db/file/path 을 각 서버 환경의 디비 파일을 저장할 경로를 지정해 주면 끝납니다. 위의 URL만 설정을 하면 H2 DB는 embeded mode로 실행되기 때문에 추가적으로 설정해야 합니다.


2. grails-app/conf/spring/resources.groovy에 h2Server bean을 생성합니다.

import grails.util.Environment
import org.h2.tools.Server

// Place your Spring DSL code here
beans = {
	//서버모드로 실행하기
    if(Environment.current == Environment.PRODUCTION) {
        h2Server(Server, "-tcp, -tcpAllowOthers, -tcpPort, 8043") { bean ->
            bean.factoryMethod = "createTcpServer"
            bean.initMethod = "start"
            bean.destroyMethod = "stop"
        }
    }
}

위와 같이 h2Server 라는 이름을 가진 Spring bean을 생성해 주면됩니다. 여기서 눈여겨 봐야 할 부분은 -tcpPort 뒤의 숫자입니다. 해당 숫자는 실제 외부에서 접속할때 사용하는 TCP포트 번호가 됨으로 사용자에 따라 지정해 주면 됩니다.


저는 서버모드는 실제 서비스 환경에서만 필요함으로 Environment.current == Environment.PRODUCTION 이 로직을 추가해 주었습니다.



이렇게 설정하면 H2 DB는 Server Mode로 동작하게 됩니다.


해당 디비를 외부에서 접속하려면


jdbc:h2:tcp://h2ServerDomain:${resources.groovy에서 지정한 TCP 포트번호}/{DataSource.groovy에서 설정한 DB파일 경로}


로 지정하면 됩니다.






신고
Name
Password
Homepage
Secret

[Ubuntu] Ubuntu 14.04 업그레이드 이후 transmission-daemon실행 안될때

Published on: 2014.04.19 23:20 by krespo

홈서버의 os로 사용하고 있던 Ubuntu 13.10을 14.04로 업데이트 하고난 이후 부터 transmission-daemon이 실행되지 않았습니다.


예전에는


$sudo service transmission-daemon start

이런식으로 실행했는데 실행이 안되더군요. 그래서 확인해본 결과 아래처럼 실행하면 된다고 하네요~

$sudo transmission-daemon -g /etc/transmission-daemon

이렇게 실행시키고 만약 부팅시에 자동으로 실행시키길 원한다면 위의 명령어 그대로 /etc/rc.local에 exit 0이전에 추가해 주면 됩니다.


/etc/rc.local에 추가하여 실행시키게 되면 root권한으로 실행이 되는데, 특정 user로 실행이 되도록 하려면


sudo -u 사용자명 transmission-daemon -g /etc/transmission-daemon

으로 설정하면 됩니다.




신고
Name
Password
Homepage
Secret

[JSON] Array 형태의 JSON String을 Java의 ArrayList generic형태로 변환하기

Published on: 2014.04.09 23:48 by krespo

json라이브러리중에 GSON 라이브러리를 사용해서 Array 형태의 JSON  String을 ArrayList<Object> 형태로 자동 변환을 해보도록 하겠습니다.


1.JSON

[
	{
		title:'초보를 위한 Java'
		, author:'홍길동'
		, isbn : 'A000022200f'
	}
	, {
		title:'Java 개발자'
		, author:'이몽룡'
		, isbn : 'A1111100ff0'
	}
]

2. Java

class Book {
	private String title;
	private String author;
	private String isbn;
}

3. JSON to ArrayList

Gson gson = new Gson();
Type type = new TypeToken>() {}.getType();
                           
List bookList = gson.fromJson(jsonString, type);




신고
asdfsdfa | 2016.02.16 14:20 신고 | PERMALINK | EDIT/DEL | REPLY
import는 무엇을해야하나요?ㅜㅜ TYpe
krespo | 2016.02.22 15:17 신고 | PERMALINK | EDIT/DEL
import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;

입니다~
Name
Password
Homepage
Secret