Re: [Stripes-users] retrieve StripesFilter configuration outside of an Stripes request

2016-08-01 Thread VANKEISBELCK Remi
Hi again,

Ok, seems too complicated.

Another way maybe : use the StripesFilter instance that is bound to the
ServletContext. In net.sourceforge.stripes.controller.StripesFilter#init :

this.servletContext.setAttribute(StripesFilter.class.getName(), this);


So I guess that you can retrieve the filter's configuration by :

StripesFilter sf = (StripesFilter)servletContext.getAttribute(StripesFilter.
class.getName())
Configuration c = sf.getInstanceConfiguration();

Now for the multiple configs, I'm not aware of any docs, users, or even use
cases for the feature.
I don't see the need for a webapp with multiple runtime configs, especially
in Stripes which does everything once at startup time... I think it's a
relic from ancient ages where containers were not managing classloader
isolation very well...
If you find any use for this, please tell me, I'd like to know :P

HTH

Rémi

2016-08-01 19:03 GMT+02:00 Juan Pablo Santos Rodríguez <
juanpablo.san...@gmail.com>:

> Hi Remi,
>
> quite there, but still not sure if there is a better way to do this.
>
> ConfigurableComponent is used on two separate places:
> - to instantiate core parts of Stripes (i.e. object factory, action bean
> resolver, property binder, context factory, etc.). Stripes only allows to
> have on of each one of those parts, so if I want to access there Stripes'
> configuration I have to replace one of those core, default classes with a
> custom one. Not very appealing. Also, at that stage, Stripes Configuration
> hasn't finished, so depending on which part you substitute, you may not
> have all the information you need from Stripes configuration.
>
> - to initialize Interceptors which also implement ConfigurableComponent. I
> went this way, hoping that I could declare an Interceptor without
> annotating it with @Intercepts (so it would be called only when
> initializated), but if the Interceptor isn't annotated, then it gets
> ignored. So I've ended up with an empty intercepts() method which get's
> called on every request, but at least I'm able to get the required
> configuration at init() time. Not the cleanest thing, but it gets things
> done. I also looked at ObjectPostProcessors, but they're instantiated too
> early to be able to have a look at url bindings.
>
> Ideally, to support this kind of use cases, it would be nice to have some
> sort of CustomConfigurableComponent (empty interface extending
> ConfigurableComponent) which Stripes could use to initialize all classes
> implementing it after it's done with the other ConfigurableComponents.
> Thoughts?
>
> Finally, just out of curiosity, regarding multiple configs: I've come
> accross some comments on StripesFilter saying that it's possible, is there
> any more documentation about this feature? I've had a quick look at
> StripesFilter code, so most probably are more comments or javadocs
> elsewhere.
>
>
> thanks in advance,
> juan pablo
>
>
>
> On Thu, Jul 28, 2016 at 3:09 PM, VANKEISBELCK Remi  wrote:
>
>> Hi Juan Pablo,
>>
>> Maybe keep the configuration it as a static field of a
>> @ConfigurableComponent ?
>>
>> Note that it'll work only if you have one config. Stripes config allows
>> to do lots of fancy stuff that I personally never used, but who knows, that
>> door is open :P
>>
>> Cheers
>>
>> Rémi
>>
>>
>>
>> 2016-07-28 14:27 GMT+02:00 Juan Pablo Santos Rodríguez <
>> juanpablo.san...@gmail.com>:
>>
>>> Hi,
>>>
>>> we're currently developing some MBeans for some administrative tasks and
>>> we would like to expose all registered ActionBeans URLs through JMX.
>>> Obtaining them is easy, if you have a request routed through StripesFilter:
>>>
>>> Map< String, Object > stripesUrlBindings() {
>>> final Map< String, Object > stripesUrlBindings = new HashMap<>();
>>> if( StripesFilter.getConfiguration() != null &&
>>> StripesFilter.getConfiguration().getActionResolver() instanceof
>>> AnnotatedClassActionResolver ) {
>>> final AnnotatedClassActionResolver acar = (
>>> AnnotatedClassActionResolver
>>> )StripesFilter.getConfiguration().getActionResolver();
>>> final Map< String, Class< ? extends ActionBean > >
>>> stripesOriginalUrlBindings = acar.getUrlBindingFactory().getPathMap();
>>> for( final Map.Entry< String, Class< ? extends ActionBean >
>>> > entry : stripesOriginalUrlBindings.entrySet() ) {
>>> final Map< String, String > map = new LinkedHashMap<>();
>>> map.put( "actionbean",
>>> entry.getValue().getCanonicalName() );
>>> stripesUrlBindings.put( "{[" + entry.getKey() +
>>> "],methods=[*]}", map );
>>> }
>>> }
>>> return stripesUrlBindings;
>>> }
>>>
>>> However, a JMX call is not going to be routed through the StripesFilter
>>> so StripesFilter.getConfiguration() yields null, and an error stating that
>>> the request hasn't been routed through Stripes is logged.
>>>
>>> any ideas on how to proceed?
>>>
>>>
>>> thanks in advance,
>>> juan pab

Re: [Stripes-users] retrieve StripesFilter configuration outside of an Stripes request

2016-08-01 Thread Juan Pablo Santos Rodríguez
Hi Remi,

quite there, but still not sure if there is a better way to do this.

ConfigurableComponent is used on two separate places:
- to instantiate core parts of Stripes (i.e. object factory, action bean
resolver, property binder, context factory, etc.). Stripes only allows to
have on of each one of those parts, so if I want to access there Stripes'
configuration I have to replace one of those core, default classes with a
custom one. Not very appealing. Also, at that stage, Stripes Configuration
hasn't finished, so depending on which part you substitute, you may not
have all the information you need from Stripes configuration.

- to initialize Interceptors which also implement ConfigurableComponent. I
went this way, hoping that I could declare an Interceptor without
annotating it with @Intercepts (so it would be called only when
initializated), but if the Interceptor isn't annotated, then it gets
ignored. So I've ended up with an empty intercepts() method which get's
called on every request, but at least I'm able to get the required
configuration at init() time. Not the cleanest thing, but it gets things
done. I also looked at ObjectPostProcessors, but they're instantiated too
early to be able to have a look at url bindings.

Ideally, to support this kind of use cases, it would be nice to have some
sort of CustomConfigurableComponent (empty interface extending
ConfigurableComponent) which Stripes could use to initialize all classes
implementing it after it's done with the other ConfigurableComponents.
Thoughts?

Finally, just out of curiosity, regarding multiple configs: I've come
accross some comments on StripesFilter saying that it's possible, is there
any more documentation about this feature? I've had a quick look at
StripesFilter code, so most probably are more comments or javadocs
elsewhere.


thanks in advance,
juan pablo



On Thu, Jul 28, 2016 at 3:09 PM, VANKEISBELCK Remi  wrote:

> Hi Juan Pablo,
>
> Maybe keep the configuration it as a static field of a
> @ConfigurableComponent ?
>
> Note that it'll work only if you have one config. Stripes config allows to
> do lots of fancy stuff that I personally never used, but who knows, that
> door is open :P
>
> Cheers
>
> Rémi
>
>
>
> 2016-07-28 14:27 GMT+02:00 Juan Pablo Santos Rodríguez <
> juanpablo.san...@gmail.com>:
>
>> Hi,
>>
>> we're currently developing some MBeans for some administrative tasks and
>> we would like to expose all registered ActionBeans URLs through JMX.
>> Obtaining them is easy, if you have a request routed through StripesFilter:
>>
>> Map< String, Object > stripesUrlBindings() {
>> final Map< String, Object > stripesUrlBindings = new HashMap<>();
>> if( StripesFilter.getConfiguration() != null &&
>> StripesFilter.getConfiguration().getActionResolver() instanceof
>> AnnotatedClassActionResolver ) {
>> final AnnotatedClassActionResolver acar = (
>> AnnotatedClassActionResolver
>> )StripesFilter.getConfiguration().getActionResolver();
>> final Map< String, Class< ? extends ActionBean > >
>> stripesOriginalUrlBindings = acar.getUrlBindingFactory().getPathMap();
>> for( final Map.Entry< String, Class< ? extends ActionBean > >
>> entry : stripesOriginalUrlBindings.entrySet() ) {
>> final Map< String, String > map = new LinkedHashMap<>();
>> map.put( "actionbean",
>> entry.getValue().getCanonicalName() );
>> stripesUrlBindings.put( "{[" + entry.getKey() +
>> "],methods=[*]}", map );
>> }
>> }
>> return stripesUrlBindings;
>> }
>>
>> However, a JMX call is not going to be routed through the StripesFilter
>> so StripesFilter.getConfiguration() yields null, and an error stating that
>> the request hasn't been routed through Stripes is logged.
>>
>> any ideas on how to proceed?
>>
>>
>> thanks in advance,
>> juan pablo
>>
>>
>> --
>>
>> ___
>> Stripes-users mailing list
>> Stripes-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/stripes-users
>>
>>
>
>
> --
>
> ___
> Stripes-users mailing list
> Stripes-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/stripes-users
>
>
--
___
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users