struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From developer researcher <java.developer.researc...@gmail.com>
Subject Re: Problem using the Spring's AOP in Struts2's Actions with json-plugin
Date Tue, 09 May 2017 21:41:00 GMT
Hi Adam,

I have not tried Jackson and the Spring AOP outside of Struts2. My context
is: modify a Struts web application (with spring-plugin and json-plugin) to
add some functionality (advices) through AOP. I would have to test in
another application to see if there is any problem between Jackson and
Spring AOP proxies.

On the other hand, when you say "*We just set content-type to application
json*" Are you using json-plugin? In my case I have used both "text/html"
and "application/json" (using json-plugin) but in both cases the
serialization is executed by json-plugin automatically.

According to the documentation, the results supported are
https://cwiki.apache.org/confluence/display/WW/Result+Types Have you
implemented a custom result?

Thanks


2017-05-08 21:38 GMT-05:00 Adam Brin <abrin@digitalantiquity.org>:

> We just set content-type to application json and output a stream or a
> string.  In the action, I just convert the object to a stream.
>
> But, here's the question:  does your spring AOP proxy work properly with
> Jackson outside of struts2?
>
>
>
> On Mon, May 8, 2017 at 7:14 PM, developer researcher <
> java.developer.researcher@gmail.com> wrote:
>
> > Hello Adam,
> >
> > Yes, I am using the "ignoreInterfaces" param set to "false". My result
> is:
> > "@Result(name="success",type="json", params={"contentType", "text/html",
> > "ignoreInterfaces", "false"})"
> >
> > The file "struts-2.5.10.1-all.zip" contains the jackson's jars, so I
> guess
> > the json-plugin use jackson.In any case, how would you use your own
> > serialization instead of the provided by json-plugin for actions that
> need
> > AOP?
> >
> > In new tests, the problem is focused on actions with a json result.
> >
> > *1. For **results of **default **type:* If the class extends
> ActionSupport,
> > it is necessary to use "CGLIB proxy", if the class does not extend from
> > ActionSupport it is possible to use both "CGLIB proxy" and "JDK dynamic
> > proxy".
> > *2. For results of json **type **:* without AOP everything works fine,
> with
> > AOP both using "JDK dynamic proxy" and "CGLIB proxy" the action is
> > executed, the advice also but in both cases occurs the
> > OperationNotSupportedException
> >
> > Thanks
> >
> >
> > 2017-05-08 15:50 GMT-05:00 Adam Brin <abrin@digitalantiquity.org>:
> >
> > > Hi,
> > >
> > > I presume you’ve read this: https://struts.apache.org/
> > > docs/json-plugin.html#JSONPlugin-Proxiedobjects
> > >
> > > It may be that the issue is not Struts2, but the JSON library that the
> > > Struts2 Json plugin uses… and thus, you may need to handle the JSON
> > > serialization using Jackson or another library.
> > >
> > >
> > > - adam
> > > --
> > > _________________________________________________________
> > > Adam Brin
> > > Director of Technology, Digital Antiquity
> > > 480.965.1278
> > >
> > > > On May 8, 2017, at 12:27 PM, developer researcher <
> > > java.developer.researcher@gmail.com> wrote:
> > > >
> > > > Hello Martin,
> > > >
> > > > First of all thanks for the reply, but I'm not sure if my queries
> have
> > > been
> > > > understood. I am using Struts 2.5.10.1
> > > >
> > > > My main query is: *Is there a way to use Spring AOP in Struts2
> Actions
> > > > using the "JDK dynamic proxies"? Does anyone have an example?*
> > > >
> > > > Sorry, but I can not find any relationship between your answers and
> the
> > > > exceptions attached in my previous message:
> > > >
> > > > *1. NoSuchMethodException:* The code I'm testing does not have
> anything
> > > > from javax.sql.DataSource
> > > >
> > > > *2. OperationNotSupportedException:* Without using AOP there is no
> > > > exception for some namespace. This is very strange because the code
> in
> > > the
> > > > advice is simply "System.out.println ()" for testing purposes.
> > > >
> > > > Thanks
> > > >
> > > >
> > > > 2017-05-06 8:21 GMT-05:00 Martin Gainty <mgainty@hotmail.com>:
> > > >
> > > >> MG>below
> > > >>
> > > >> ________________________________
> > > >> From: developer researcher <java.developer.researcher@gmail.com>
> > > >> Sent: Friday, May 5, 2017 10:09 PM
> > > >> To: Struts Users Mailing List
> > > >> Subject: Problem using the Spring's AOP in Struts2's Actions with
> > > >> json-plugin
> > > >>
> > > >> Hello,
> > > >>
> > > >> I am using Strust 2 <sp?> with spring-plugin and json-plugin
to use:
> > > >>
> > > >> 1. Injection of dependencies: apparently everything is working well.
> > > >> 2. Spring's AOP: works when applied over methods of injected objects
> > in
> > > >> the Struts Actions but not when applied over methods of actions (my
> > > class
> > > >> extends from ActionSupport and I use the @Action annotation at
> method
> > > level)
> > > >>
> > > >> MG>spring does not know what ActionSupport as it is a Struts classes
> > > >> besides which ActionSupport are not considered
> > > >> MG>spring beans which are simple pojos with a no-arg constructor
> > > >> https://docs.spring.io/spring/docs/current/spring-framework-
> > > >> reference/html/beans.html
> > > >> 7. The IoC container - Spring<https://docs.spring.io/
> > > >> spring/docs/current/spring-framework-reference/html/beans.html>
> > > >> docs.spring.io
> > > >> As the preceding diagram shows, the Spring IoC container consumes
a
> > form
> > > >> of configuration metadata; this configuration metadata represents
> how
> > > you
> > > >> as an application ...
> > > >>
> > > >>
> > > >> This situation has generated the following questions:
> > > >>
> > > >> 1. Are the actions created and managed by Spring or Struts? It's
> > > supposed
> > > >> to be Spring, but I have this doubt because Spring's AOP is supposed
> > to
> > > >> work on Spring beans but in my case it does not work and because I
> do
> > > not
> > > >> use the Spring's @Component annotation in the Action class
> > > >>
> > > >> MG>correct but you can also specify a spring-bean in
> spring-beans.xml
> > in
> > > >> your classpath e.g.:
> > > >> <bean id="springTest" name="springTest"
> class="org.struts.SpringTest"/
> > >
> > > >>
> > > >> 2. Is there a way to use Spring AOP in Struts2 Actions using the
> "JDK
> > > >> dynamic proxies"? I have tested with the following results:
> > > >>
> > > >> a) When Spring uses "JDK dynamic proxies" the Struts2 Action is not
> > > >> executed and the following exception is thrown:
> NoSuchMethodException
> > > (see
> > > >> NoSuchMethodException.txt)
> > > >> b) When Spring uses "CGLIB proxy" in an Action whose result is of
> the
> > > >> default type: the Action works correctly
> > > >> c) When Spring uses "CGLIB proxy" in an Action whose result is of
> type
> > > >> json: the Struts2 Action is executed but the following exception is
> > > thrown:
> > > >> OperationNotSupportedException (see OperationNotSupportedException
> > > .txt).
> > > >> When I do not use AOP this Action works correctly.
> > > >>
> > > >> MG>builder.bind does not recognise json result-set as a valid
> > > >> javax.sql.DataSource..here is an example of builder.bind
> > > >> org.springframework.mock.jndi.SimpleNamingContextBuilder builder =
> > new
> > > >> org.springframework.mock.jndi.SimpleNamingContextBuilder();
> > > >> * DataSource ds = new org.springframework.jdbc.datasource.
> > > >> DriverManagerDataSource(...);
> > > >> * builder.bind("java:comp/env/jdbc/myds", ds);
> > > >>
> > > >> MG>as of now JSON is not a valid javax.sql.DataSourceHere is Doc:
> > > >> <p>In a J2EE container, it is recommended to use a JNDI DataSource
> > > >> provided by
> > > >> * the container. Such a javax.sql.DataSource can be exposed as a
> > > >> javax.sql.DataSource bean in a Spring
> > > >> * ApplicationContext via {@link org.springframework.jndi.
> > > >> JndiObjectFactoryBean},
> > > >> * for seamless switching to and from a local javax.sql.DataSource
> bean
> > > >> like this class.
> > > >> * For tests, you can then either set up a mock JNDI environment
> > through
> > > >> Spring's
> > > >> * {@link org.springframework.mock.jndi.SimpleNamingContextBuilder},
> > or
> > > >> switch the
> > > >> * bean definition to a local javax.sql.DataSource(which is simpler
> and
> > > >> thus recommended).
> > > >> *
> > > >> * <p>If you need a "real" connection pool outside of a J2EE
> container,
> > > >> consider
> > > >> * <a href="http://commons.apache.org/proper/commons-dbcp">Apache
> > > Commons
> > > >> DBCP</a>
> > > >> * or <a href="http://sourceforge.net/projects/c3p0">C3P0</a>.
> > > >> * Commons DBCP's BasicDataSource and C3P0's ComboPooledDataSource
> are
> > > full
> > > >> * connection pool beans, supporting the same basic properties as
> this
> > > >> class
> > > >> * plus specific settings (such as minimal/maximal pool size etc).
> > > >> mg>JSON is not yet a valid javax.sql.DataSource according to Spring
> > > >>
> > > >> MG>also you have not declared a namespace that NamingContext can
> > > reference
> > > >> which is causing exception
> > > >>
> > > >> MG>HTH
> > > >>
> > > >> Thanks
> > > >>
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> > > For additional commands, e-mail: user-help@struts.apache.org
> > >
> > >
> >
>
>
>
> --
> _________________________________________________________
> Adam Brin
> Director of Technology, Digital Antiquity
> 480.965.1278
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message