Page 1 of 2 12 LastLast
Results 1 to 10 of 12

Thread: schema aop spring 2 struts actions

  1. #1
    Join Date
    May 2007
    Posts
    6

    Default schema aop spring 2 struts actions

    I am trying to create an aspect that can be cut across my spring loaded struts actions. My struts actions work in spring, but my aop logging example does not.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>
    Example1</display-name>
    <!-- Spring integration -->
    <listener>
    <display-name>spring-applicationContext</display-name>
    <listener-class>org.springframework.web.context.ContextLoade rListener</listener-class>
    </listener>

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>
    <!-- Spring integration end-->

    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>
    org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
    <param-name>debug</param-name>
    <param-value>2</param-value>
    </init-param>
    <init-param>
    <param-name>detail</param-name>
    <param-value>2</param-value>
    </init-param>
    <init-param>
    <param-name>validate</param-name>
    <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>

    <!-- Data Sources -->
    <data-sources></data-sources>

    <!-- Form Beans -->
    <form-beans>
    <form-bean name="form" type="example1.forms.Form"></form-bean>
    <form-bean name="form2" type="example1.forms.Form2"></form-bean>
    </form-beans>

    <!-- Global Exceptions -->
    <global-exceptions></global-exceptions>

    <!-- Global Forwards -->
    <global-forwards></global-forwards>


    <!-- Action Mappings -->
    <action-mappings>
    <action path="/action1" type="org.springframework.web.struts.DelegatingAct ionProxy"
    name="form" scope="request" input="/input.jsp">
    <forward name="success" path="/output.jsp"></forward>
    <forward name="failure" path="/input.jsp"></forward>
    </action>
    <action path="/action2" type="org.springframework.web.struts.DelegatingAct ionProxy"
    scope="request" input="/output.jsp" name="form2">
    <forward name="success" path="/final.jsp"></forward>
    <forward name="failure" path="/output.jsp"></forward>
    </action>
    </action-mappings>

    <!-- Message Resources -->
    <message-resources
    parameter="example1.resources.ApplicationResources " />


    <plug-in className="org.apache.struts.validator.ValidatorPl ugIn">
    <set-property property="pathnames"
    value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
    </plug-in>

    <!-- Spring stuff -->

    <plug-in
    className="org.springframework.web.struts.ContextL oaderPlugIn">
    <set-property property="csntextConfigLocation"
    value="/WEB-INF/action-servlet.xml,/WEB-INF/applicationContext-web.xml" />
    </plug-in>
    <!-- End of Spring Stuff -->

    </struts-config>


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schem...-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schem...ng-aop-2.0.xsd ">

    <aop:config proxy-target-class="true">
    <aop:aspect ref="logging">
    <aopointcut id="test1"
    expression="execution(* example1.actions.*.*(..))" />
    <aop:before pointcut-ref="test1" method="logBefore" />
    <aop:after-returning pointcut-ref="test1" method="logAfter" />
    </aop:aspect>
    </aop:config>

    <bean id="logging" class="example1.logging.LoggingExample" />

    </beans>

    package example1.logging;

    public class LoggingExample {

    public void logBefore () {
    System.out.println("before an action");
    }

    public void logAfter () {
    System.out.println("After an action");
    }

    }

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean name="/action1" class="example1.actions.Action1Action"></bean>
    <bean name="/action2" class="example1.actions.Action2Action"></bean>

    </beans>

    Any assistance would be appreciated.

    Mike

  2. #2
    Join Date
    Mar 2007
    Posts
    515

    Default

    It's the same issue as in this thread ? http://forum.springframework.org/showthread.php?t=36504

    Also, is much more easier to follow if you put your code inside [ CODE][ /CODE] tags.

  3. #3
    Join Date
    May 2007
    Posts
    6

    Default maybe

    If you mean I should use

    Code:
    <aop:config proxy-target-class="true">
    then well, I've already tried that.

    It is similar to the issue posted by Javier Rivas except I am using xml aop config rather than aspectj, I'm not getting an error message, and It's not working.

    Mike


  4. #4

    Arrow

    I tried to do what you're are doing and it didn't work either, and as I didnt have much more time I gave up.

    Although I think I was very to close to get it working when I defined the action beans as AutoproxyCreators in the Spring applicationContext file.

    Take a look at Section 7.9. ot the Reference Documentation:"Using the "autoproxy" facility", I might help you.

    And please, If you get it working post it. I'll try to do some more work this weekend, and if I came up with a solution Ill let you know.

    Regards, Javier Rivas.

  5. #5
    Join Date
    May 2007
    Posts
    6

    Default still trying

    Javier,

    I'm still working on this. I'm trying to get it all done through XML although that is seeming much less likely. I am personally not pressed for time on a solution. I am attempting to write a tutorial on how to use the new features.

    Mike

  6. #6
    Join Date
    May 2007
    Posts
    6

    Default solved...I think

    Javier,

    It looks to me like action-servlet.xml is loaded into a different container than application-context*.xml. When I moved my aop definitions over to action-servlet.xml, they worked just fine.


    Mike

  7. #7

    Default

    Hi Mike,

    Nice one, Ill try that this weekend.

  8. #8

    Default I dont get it working

    Mike, I tried to work out your example doing what you said, but still nothing.

    I agree with you that the action-servlet.xml is loaded into a different container than application-context*.xml., because when I get the Action bean (struts one) from the factory bean in the application-context, the advice is called, and the AOP works as it has to.

    However, when struts is controlling the actions, the AOP advices arent called.

    I have been doing some research and I think that the final classes cant be used with AOP, because as far as I know the CGLIB cant proxy them.
    I dont know, the more I read about the topic, the more confused I am.

    7.5.5. Proxying classes
    CGLIB proxying should generally be transparent to users. However, there are some issues to consider:
    * Final methods can't be advised, as they can't be overridden.

    But on the other hand, as I said, I think that the problem is in which context the beans are loaded, although, putting altogether in the action-servlet.xml didnt work for me.

    Could you post your whole example, so I can see if I am missing something?
    Cheers!
    Last edited by Javier Rivas; May 12th, 2007 at 09:02 AM.

  9. #9

    Default half-solved?

    Mike, Ive just posted a new thread http://forum.springframework.org/showthread.php?t=38663

    please take a look

    P.D. What is that tutorial you're trying to write? Is it an open source tutorial? Well, if you need some help, I wouldnt mind collaborating with you.

    Regards, Javier

  10. #10
    Join Date
    May 2007
    Posts
    6

    Default tutorial

    Javier,

    I am writing the tutorial for my client with Rational Application Developer 7 as the IDE. I can pass that on to you when I get it done, and you can adapt it as you see fit, or I can post it. I am going to post the contents of my working application on a separate message.

    Mike

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •