Belirli metni indeksleyen ve daha hızlı arama yapmak için bellekte saklayan bir SearchService grades uygulamasına çalışıyordum. Bu verileri depolamak için, verileri depolamak için Hizmet'te özel bir statik özellik kullanmaya çalışıyordum, ancak özellik değerleri rastgele sıfırlıyordu. Belgeleri yeniden okuduktan sonra, bunun büyük olasılıkla, çalışanların tekil paterninden bu yana vatansız hizmetlerin vatansız olması gerektiği ihtimalini fark ettim. Yine de, statik bir değişkenin nasıl değişebileceğini anladığımdan emin değilim. JVM, iş parçacığı başına hizmet sınıflarının ayrı kopyalarını yükler mi? Kafamı neler olup bittiğine dair emin değilim.Vatansız grails hizmetinde paylaşılan verilerle nasıl başa çıkıyorsunuz?
Yine de, şimdi uygulama genelindeki verileri saklamak için durağan değişkenlere güvenemediğimi biliyorum, uygulama boyunca kullanım için veri depolamak ve erişmek için en iyi yaklaşım nedir, senkronizasyonu koruyor ve ırklardan kaçınıyor musunuz? java.lang.IllegalStateException:
tarafından neden [TEXTSTORE] sınıf Yöntemi Grails uygulama dışında kullanıldı. Alaycı API veya bootstrap Grails kullanarak bir test bağlamında çalışıyorsa doğru şekilde. SearchService $ tt__rebuildIndex (SearchService.groovy de .: SearchService.indexAllDomains (41 SearchService.groovy): en : SearchService $ _indexAllDomains_closure2.doCall (42 SearchService.groovy) en : SearchService.buildIndex (63 SearchService.groovy) en 48) SearchService.afterPropertiesSet (SearchService.groovy de : 35) ... 4 daha
Bu hizmetlerin, kodunuzdaki değişikliklerin hizmetin yeniden yüklenmesine neden olduğunda üretimde veya geliştirme sırasında güvenilmez olduğunu görüyor musunuz? Grails 1.x'ten bu yana hizmetlerde paylaşılan durumu (örneğin arama ya da endeksli veri) tutmanın çeşitli yollarını kullanıyorum ve bunu üretimde hiç görmedim. Bir kez değil. –
Geliştirme aşamasında. Sorun, hizmet tarafından bir NPE hatası atılırsa ve açıkça yakalanmıyorsa (yine de bazı hatalar çalışıyorsa) yinelenen ortaya çıkar. Sınıf böyle bir durumda yeniden yüklendi mi? – SWS3D
Sınıflar, bunları değiştirirseniz geliştirmeye yeniden yüklenir, böylece aslında bunu görmenizin nedeni olabilir. Fasulyenin yaşam döngüsüne girerek hizmetinizi daha güvenilir hale getirmeli ve başladığında veriyi yeniden oluşturmalı/yüklemelidir. Tipik olarak servis uygulamanız olan org.springframework.beans.factory.InitializingBean' ve 'afterPropertiesSet()', bunu yapmanın iyi bir tanıtımıdır. –