| 

.NET C# Java Javascript Exception

Diverse Fragen (Scaffolding, GROM, Interceptors, ...)

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.


Diverse Fragen (Scaffolding, GROM, Interceptors, ...)

phuber - 17.10.2010 17:39
Hallo Ihr Grails Gurus :-)

Ich fange gerade erst mit Grails an und mache gerade ein Backend das von mehreren Frontends verwendet werden wird. Damit ich ein Admin Gui habe will ich die Content-Negotiation verwenden um in 1 Controller alles zu machen (sowohl für html wie auch JSON (später eventuell auch XML)). Ich habe schon ein paar Sachen gemacht und fühle mich grundsätzlich sicher aber ich kenne halt die ganze breite vom Grails Framework noch nicht und kenne wohl auch viele der versteckten tricks noch nicht. Und meine diversen suchen bei Google haben mich leider auch nicht weiter gebracht...

Also hier mal meine grössten fragen:

(1) Hat schon mal jemand den Scaffolding Controller wie oben beschrieben erweitert? Ich habe zwar was gemacht aber weiss nicht ob und wie gut das ist. Wenns was öffentlich verfügbares und bewährtes gibt dann würde ich bevorzugt das einsetzen.

(2) Ich werde Authentifizierung basierend auf user und api keys machen und habe bei fast allen Aufrufen ein User Objekt. Gibt es eine best practice wie ich das mache (In einem Filter natürlich, aber mache ich das besser selber oder soll ich auf ein framework wie apache shiro setzen, für welches auch ein grails plugin gibt)?

(3) Ich will in der DB diverse technische Felder führen: createdBy, createdTS, modifiedBy, modifiedTS, deleted (boolean flag). Wo und wie mache ich einen Interceptor um diese Felder jeweils unmittelbar vor dem persistieren zu aktualisieren? Ich möchte das an 1 Ort für alle Entities machen. Die Felder sind in einer RootEntity von der alle anderen Entities erben, falls das einen Einfluss hat. Ich verwende voraussichtlich die Table Per SubClass Inheritance-Strategie (Default ist tablePerHierarchy was zu 1 grossen Table führen würde und bei ca 20 Entities macht das keinen Sinn)

(4) Es gibt Entities die nur von der "createdBy" Person verändert werden dürfen. Die Ausnahme bildet hier der Admin der natürlich überall eingreifen darf. Das tönt schon leicht nach einem rollenkonzept, das könnte man ebenfalls in einem Filter machen. Erschwerend kommt aber noch hinzu, dass es Entities gibt, die grundsätzlich nicht verändert werden dürfen (gewisse Enumerations und Stammdaten)... ok das könnte man lösen indem der createdBy der Admin ist und der Filter so konfiguriert ist, dass nur der Owner änderungen vornehmen darf. Habe ich das Resultat der Content-Negotiation im Filter zur Verfügung? Eine Access Denied Fehlermeldung soll auch im richtigen Format zurückgeliefert werden.

(5) Die Schnittstelle die ich anbiete wird sich fast sicher über die Zeit weiterentwickeln, ich will darum schon im vornherein auf eine Versionierung vorbereitet sein. Die Idee wäre, dass alle URLs dem REST Standart entsprechen (ausgehend von den diversen grails+rest tutorials) und einen zusätzlichen query-parameter haben, der die api-version enthält. Wie bewege ich grails dazu, dass es, wenn der query parameter "version=1" ist, der MyEntityControllerV1 verwendet wird und bei "version=2" der MyEntityControllerV2? Der V2 Controller erbt vom V1 Controller und enthält nur die Differenzen zur vorherigen Version... Das wäre meine Idee um das umzusetzen aber eventuell gibt es auch andere Ansätze die schon jemand umgesetzt hat... Auch bei unterschiedlichen URLS im stil von /v1/controller/action müsste ich jeden controller von hand konfigurieren... Das einzige wäre /controllerV1/action was ich nicht besonders schön finde weil es controller und version vermischt. Es kann auch sein, dass in einer neuen version der Schnittstelle nur 1 Controller geändert hat, also für 1 Controller gibt es eine V2 und für die restlichen gibt es keinen neuen Controller. Idealerweise würde Grails da natürlich merken dass es keinen V2 gibt und auf den V1 zurückfallen, da dieser nach wie vor aktuell ist.

(6) Wie funktioniert das marshaller framework? Kann ich einfach meine eigenen marshaller schreiben für json und statt dem standart package von grails mein eigenes marshaller package importieren und gut ist? Es gibt eben diverse Attribute die rein intern sind und um die schnittstelle für den user einfacher zu machen will ich nur die nötigsten felder auf der schnittstelle haben. Wie konfiguriere ich meine domain objekte damit der marshaller dann richtig damit umgehen kann? annotationen auf jedem feld? kann ich etwas im selben stil wie die static constraints machen oder diese sogar mit meinem eigenen keyword erweitern um die sichtbarkeit auf der schnittstelle ein- bzw. auszuschalten?

Da mir grails noch ziemlich neu ist wäre ich froh wenn mir ein paar erfahrene grails hacker ein paar tipps geben könnten was geht, was nicht, frameworks usw...
Ich kann zwar autofahren aber erst automat, handgeschaltet geht noch nicht ;-)

Gruss
Patrick


Re: Diverse Fragen (Scaffolding, GROM, Interceptors, ...)

koeberle - 18.10.2010 10:18
Zum Thema Nutzerverwaltung schau dir mal das Plugin an: Spring Secure


Re: Diverse Fragen (Scaffolding, GROM, Interceptors, ...)

phuber - 23.10.2010 13:34
werd ich tun, danke :)


Re: Diverse Fragen (Scaffolding, GROM, Interceptors, ...)

phuber - 03.11.2010 14:54
kleines update meinerseits:

> (1) Hat schon mal jemand den Scaffolding
> Controller wie oben beschrieben erweitert? Ich
> habe zwar was gemacht aber weiss nicht ob und wie
> gut das ist. Wenns was öffentlich verfügbares und
> bewährtes gibt dann würde ich bevorzugt das
> einsetzen.

scaffolding ist tot, billiges crud wird nicht ausreichen und ich schreibe momentan custom controllers

> (2) Ich werde Authentifizierung basierend auf user
> und api keys machen und habe bei fast allen
> Aufrufen ein User Objekt. Gibt es eine best
> practice wie ich das mache (In einem Filter
> natürlich, aber mache ich das besser selber oder
> soll ich auf ein framework wie apache shiro
> setzen, für welches auch ein grails plugin gibt)?

apikey wird in einem servletfilter geprüft. usertoken prüfung kommt noch

> (3) Ich will in der DB diverse technische Felder
> führen: createdBy, createdTS, modifiedBy,
> modifiedTS, deleted (boolean flag). Wo und wie
> mache ich einen Interceptor um diese Felder
> jeweils unmittelbar vor dem persistieren zu
> aktualisieren? Ich möchte das an 1 Ort für alle
> Entities machen. Die Felder sind in einer
> RootEntity von der alle anderen Entities erben,
> falls das einen Einfluss hat. Ich verwende
> voraussichtlich die Table Per SubClass
> Inheritance-Strategie (Default ist
> tablePerHierarchy was zu 1 grossen Table führen
> würde und bei ca 20 Entities macht das keinen
> Sinn)

ist auf eis

> (4) Es gibt Entities die nur von der "createdBy"
> Person verändert werden dürfen. Die Ausnahme
> bildet hier der Admin der natürlich überall
> eingreifen darf. Das tönt schon leicht nach einem
> rollenkonzept, das könnte man ebenfalls in einem
> Filter machen. Erschwerend kommt aber noch hinzu,
> dass es Entities gibt, die grundsätzlich nicht
> verändert werden dürfen (gewisse Enumerations und
> Stammdaten)... ok das könnte man lösen indem der
> createdBy der Admin ist und der Filter so
> konfiguriert ist, dass nur der Owner änderungen
> vornehmen darf. Habe ich das Resultat der
> Content-Negotiation im Filter zur Verfügung? Eine
> Access Denied Fehlermeldung soll auch im richtigen
> Format zurückgeliefert werden.

ist noch offen

> (5) Die Schnittstelle die ich anbiete wird sich
> fast sicher über die Zeit weiterentwickeln, ich
> will darum schon im vornherein auf eine
> Versionierung vorbereitet sein. Die Idee wäre,
> dass alle URLs dem REST Standart entsprechen
> (ausgehend von den diversen grails+rest tutorials)
> und einen zusätzlichen query-parameter haben, der
> die api-version enthält. Wie bewege ich grails
> dazu, dass es, wenn der query parameter
> "version=1" ist, der MyEntityControllerV1
> verwendet wird und bei "version=2" der
> MyEntityControllerV2? Der V2 Controller erbt vom
> V1 Controller und enthält nur die Differenzen zur
> vorherigen Version... Das wäre meine Idee um das
> umzusetzen aber eventuell gibt es auch andere
> Ansätze die schon jemand umgesetzt hat... Auch bei
> unterschiedlichen URLS im stil von
> /v1/controller/action müsste ich jeden controller
> von hand konfigurieren... Das einzige wäre
> /controllerV1/action was ich nicht besonders schön
> finde weil es controller und version vermischt. Es
> kann auch sein, dass in einer neuen version der
> Schnittstelle nur 1 Controller geändert hat, also
> für 1 Controller gibt es eine V2 und für die
> restlichen gibt es keinen neuen Controller.
> Idealerweise würde Grails da natürlich merken dass
> es keinen V2 gibt und auf den V1 zurückfallen, da
> dieser nach wie vor aktuell ist.

momentan in der url /V1/ eingebaut aber fix gemapt, noch unklar wie das in zukunft aussehen wird wenn eine neue api version dazu kommt

> (6) Wie funktioniert das marshaller framework?
> Kann ich einfach meine eigenen marshaller
> schreiben für json und statt dem standart package
> von grails mein eigenes marshaller package
> importieren und gut ist? Es gibt eben diverse
> Attribute die rein intern sind und um die
> schnittstelle für den user einfacher zu machen
> will ich nur die nötigsten felder auf der
> schnittstelle haben. Wie konfiguriere ich meine
> domain objekte damit der marshaller dann richtig
> damit umgehen kann? annotationen auf jedem feld?
> kann ich etwas im selben stil wie die static
> constraints machen oder diese sogar mit meinem
> eigenen keyword erweitern um die sichtbarkeit auf
> der schnittstelle ein- bzw. auszuschalten?

ist tot, ich baue mit verschachtelte maps zusammen die ich danach als json rendern lasse


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Diverse Fragen (Scaffolding, GROM, Interceptors, ...)" 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.