| 

.NET C# Java Javascript Exception

Singletons

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Singletons

originalOne1984 - 16.05.2010 13:59
Hallo zusammen,

Wie lange bleiben denn Singleton-Instanzen in Grails im Speicher? Beziehen sie sich auf die Laufzeit einer Request-Response-Auswertung oder werden sie während der gesamten Laufzeit des Servers im Speicher gehalten (und können somit zu Thread-Problemen führen)?

Grüße,
Thomas


Re: Singletons

milkyman - 19.05.2010 10:04
Es gibt halt solchen und solchen Murks. :-)

Ich glaube an Thread-Safe denkt nicht jeder direkt beim Singleton, daher wollte ich nochmal drauf hinweisen, dass man das beachten sollte.

Bye,
Horst


Re: Singletons

milkyman - 25.05.2010 07:58
Kannst du bitte mal schreiben, was du machen willst. Dann lässt sich auch eher einschätzen, wie das technisch zu lösen ist.

"Requestbezogenes Singleton" hört sich etwas ungewöhnlich an.

Bye,
Horst


Re: Singletons

mpuhlmann - 25.05.2010 11:22
Hallo,

es gibt die Möglichkeit im Spring Kontext Beans zu definieren, welche pro http Request neu initialisiert werden, also im HTTP Request Scope stecken. Eventuell ist das ja ne Lösung für dich.

Hier mal ein kleines Beispiel

Die Bean als Groovy Klasse (abgelegt in src/groovy) - kann aber genauso ne Java Klasse sein:
class RequestScopedBean {

	def counter = 0;
	
	def increment() {
		counter++
	}
}

Der Controller:
class CounterController {
	
	def requestScopedBean
	
	def index = {
		render(text: "Value: ${requestScopedBean?.counter}")
	}
	
	def increment = {
		requestScopedBean.increment()
		render(text: "Value: ${requestScopedBean?.counter}")
	}
}

Die Spring Konfiguration (grails-app/conf/spring/resources.groovy):
beans = {  
    requestScopedBean(RequestScopedBean) {bean ->
    	bean.scope = 'request' // hierüber kann der Scope der Bean gesetzt werden
    	counter = 10 // initialer Counter-Wert
    }
}

Wenn man nun den Controller über <app-ctx>/counter aufruft, erhält man "Value: 10" als Antwort, während man unter <app-ctx>/counter/increment immer die Antwort "Value: 11" erhält.

Kommentiert man jetzt in der Spring Konfiguration bean.scope = ... aus, erhält man - wie sollte es anders sein - für die obigen Aufrufe, einen Fortlaufenden Counter.

Gruss

Marco


Re: Singletons

originalOne1984 - 28.05.2010 00:43
Genau das habe ich benötigt. Danke!


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Singletons" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.