2012-01-19 1 views
1

다음은 시나리오입니다. 내 Grails 응용 프로그램 외부에 url/username/password/등이 들어있는 파일이 있습니다. 정보를 제공하여 개발자가 제작을위한 연결 정보를 볼 수 없도록합니다. 나는 수행하여 Config.groovy 파일에이 정보를 포함하고있어 : 내가있는 ConfigurationHolder 인 것으로 나타났습니다 2.0 Grails를 업그레이드 한 후Grails 2.0은 POGO의 외부 파일에서 설정 값을 사용합니다.

import org.codehaus.groovy.grails.commons.ConfigurationHolder 
... 
ConfigurationHolder.config.url 
ConfigurationHolder.config.userName 
ConfigurationHolder.config.password 

:

grails.config.locations << "file:" + "C:/directory/from/env/variable/data.properties" 

는 그럼 난을 통해 POGO이 정보에 액세스하고 더 이상 사용되지 않습니다. 그래서 문서를 보러갔습니다 : ( http://grails.org/doc/latest/guide/conf.html) 그것을 고치려고 시도했습니다. 문서에서는 grailsApplication을 사용하여 설정 값을 얻는다 고 말합니다. 내 문제는 내가 POGO에있어 grailsApplication의 Grails autowiring이 호출되지 않는다는 것이다. 제 질문은 두 부분으로 이루어져 있습니다 :

1) POGO 내부에있는 동안 파일에서 구성 정보를 얻는 더 좋은 방법이 있습니까?

2) 더 좋은 방법이 없다면 grailsApplication을 POGO에 어떻게 주입합니까?

추가 정보 : Grails GLDAPO 플러그인 (http://gldapo.codehaus.org/)을 사용하여 LDAP 디렉토리와 인터페이스합니다.할 정적 메서드를 가질 수있는 이러한 개체 (내가/src/groovy 아래에 배치 한) 도메인 개체 같은 방식으로 작동하도록 노력하고있어. 당신이 제안하고있는 패턴으로 나는 데이터를 가져 오기 위해 서비스를해야만한다. 어느 쪽이 좋을까요? Groovy가 아닙니다.

답변

5

업데이트 된 질문에 기초한 새로운 답변입니다.

몇 가지 옵션이 있습니다. 하나는 BootStrap.groovy에서 이러한 클래스의 메타 클래스, 즉에 grailsApplication 와이어이다 : 이것은 grailsApplication 속성으로 액세스 할 수있는 getGrailsApplication 방법을 추가

class BootStrap { 

    def grailsApplication 

    def init = { servletContext -> 
     YourClass.metaClass.getGrailsApplication = { -> grailsApplication } 
    } 
} 

.

또 다른 옵션은 BootStrap에 그 이러한 클래스에 정적 grailsApplication 필드를 추가하고 설정하는 것입니다 :

class BootStrap { 

    def grailsApplication 

    def init = { servletContext -> 
     YourClass.grailsApplication = grailsApplication 
    } 
} 

또한 홀더 클래스를 생성 대해 설명 this blog post 및 재정의 생성자에 대해 설명 this one를 참조하십시오.

+0

귀하의 의견에 @BurtBeckwith 감사합니다! –

0

적어도 간접적으로 grailsApplication bean을 종속성 삽입 할 수있는 이슈에서 호출해야합니다. def grailsApplication을 서비스 나 Quartz 작업 또는 POGO를 호출하는 항목에 추가하고 grailsApplication.config를 필요로하는 메소드 호출이나 setter에서 한번 호출하면된다.

+0

답장을 보내 주셔서 감사합니다. 몇 가지 추가 정보를 추가했습니다. 어쨌든 서비스를 통해 데이터 액세스를 구현하지 않아도되는지 확인할 수 있습니까? 귀하의 의견을 너무 주셔서 감사합니다! –