InitializingBean と DisposableBean を実装するサービスがあります
class MyService implements InitializingBean, DisposableBean {
static transactional = false
def grailsApplication
@Override
void afterPropertiesSet() {
System.setProperty("JMS_TIMEOUT", grailsApplication.config.JMS_TIMEOUT);
// code performing a JDNI lookup
}
}
enter code here
システム プロパティは、サービス内の他のコンポーネントを初期化するために使用されます。Config.groovy に構成を追加しました。
grails.config.locations = [ "file:${basedir}/grails-app/conf/myconfig.properties" ]
これは、アプリケーションの実行時に正常に機能します。ただし、サービスを注入するテスト/統合で統合テストを作成しています。
class MyServiceIntegrationTests extends GrailsUnitTestCase {
def myService
void testMyService() {
}
}
テストを実行すると、次の根本原因で StackTrace が得られます。
Caused by: javax.naming.NameNotFoundException: Name [ConnectionFactory] not bound; 0 bindings: []
at javax.naming.InitialContext.lookup(InitialContext.java:354)
at com.ubs.ecredit.common.jmsclient.DefaultConnector.<init>(DefaultConnector.java:36)
構成をロードできなかったか、統合テストで異なっているようです。サービスがインスタンス化される前に、これらのプロパティが統合テストにも設定されるように、構成またはコードを変更する方法はありますか?
更新: 原因は構成ではなく、JDNI ルックアップと Grails のバグであることが判明しました。参照: http://jira.grails.org/browse/GRAILS-5726