You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Robby Pelssers <ro...@ciber.com> on 2009/10/04 19:35:11 UTC
using Spring AOP in cocoon block
Can someone tell me what is needed to get AOP working in a cocoon
block?
* Dependencies
* Block configuration
* ...?
Kind regards,
Robby
RE: using Spring AOP in cocoon block [SOLVED]
Posted by Robby Pelssers <ro...@ciber.com>.
Ok... so here is what I did to get a typical Core Spring AOP example
working in a Cocoon 2.2 block.
1) generate the block using the Cocoon archetype.
2) add the necessary dependencies to the pom.xml
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
3) run "mvn eclipse:eclipse"
4) import the project in eclipse
5) Create an Aspect which logs if the message on the sample MyBean.java
included in the block archetype is set
------------------------------------------------------------------------
------------------------------------
package com.ciber;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class PropertyChangeTracker {
private Logger logger = Logger.getLogger(getClass());
@Before("execution(void com.ciber.MyBean.set*(*))")
public void trackChange(JoinPoint point) {
String name = point.getSignature().getName();
Object newValue = point.getArgs()[0];
logger.info(name + " about to change to " + newValue + "
on " + point.getTarget());
}
}
------------------------------------------------------------------------
------------------------------------
6) add an aspects.xml to META-INF/cocoon/spring
------------------------------------------------------------------------
------------------------------------
<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:pipeline="http://cocoon.apache.org/schema/pipeline"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://cocoon.apache.org/schema/pipeline
http://cocoon.apache.org/schema/pipeline/cocoon-pipeline-1.0.xsd">
<aop:aspectj-autoproxy>
<aop:include name="propertyChangeTracker"/>
</aop:aspectj-autoproxy>
<bean id="propertyChangeTracker"
class="com.ciber.PropertyChangeTracker"/>
</beans>
------------------------------------------------------------------------
------------------------------------
7) change /COB-INF/flow/spring-bean.js and set the message so we can see
if our aspect is invoked
function demo() {
var demoBean = cocoon.getComponent("demo");
demoBean.setMessage("Changed message from flowscript ;-)");
cocoon.sendPage("screens/spring-bean",
{
"message" : demoBean.message
}
);
}
I changed logger.info() to System.out.println() to do a quick test and
the output was what I'd expect:
setMessage about to change to Changed message from flowscript ;-) on
com.ciber.MyBean@16b4e30
Nice stuff....
Finally being able to play around with AOP in cocoon ;-)
Cheers,
Robby Pelssers
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
RE: using Spring AOP in cocoon block
Posted by Robby Pelssers <ro...@ciber.com>.
Hi Soren,
I'm googling like crazy... I already read that thread ;-)
And I added another dependency to my pom.xml:
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
Cool... I just figured out what was happening... My pointcut was also matching non spring beans which resulted in the exception below. Next mail will explain all steps taken to get AOP working.
2009-10-06 14:32:48.032::WARN: Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@18dabf1{/,D:\workspaces\spider\spring\target\rcl\webapp}
java.lang.RuntimeException: Cannot invoke listener org.springframework.web.context.ContextLoaderListener@c7ecd5
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.invoke(ReloadingListener.java:190)
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.contextInitialized(ReloadingListener.java:213)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:540)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:510)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:110)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:357)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:293)
at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:203)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:182)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:451)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:558)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:512)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:482)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:330)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:291)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.ciber.spring.service': Invocation of init method failed; nested exception is java.lang.ClassCastException: $Proxy8
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1260)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:438)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:394)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:736)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at org.apache.cocoon.tools.rcl.springreloader.SynchronizedConfigureableWebApplicationContext.refresh(SynchronizedConfigureableWebApplicationContext.java:254)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.invoke(ReloadingListener.java:157)
... 39 more
Caused by: java.lang.ClassCastException: $Proxy8
at org.apache.cocoon.core.container.spring.logger.LoggerUtils.getChildLogger(LoggerUtils.java:46)
at org.apache.cocoon.servlet.RequestProcessor.<init>(RequestProcessor.java:106)
at org.apache.cocoon.sitemap.SitemapServlet$RequestProcessor.<init>(SitemapServlet.java:100)
at org.apache.cocoon.sitemap.SitemapServlet.init(SitemapServlet.java:75)[INFO] Started Jetty Server
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at org.apache.cocoon.servletservice.spring.ServletFactoryBean.init(ServletFactoryBean.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1325)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1294)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1257)
... 55 more
2009-10-06 14:32:48.094::INFO: Started SelectChannelConnector@0.0.0.0:8888
-----Original Message-----
From: Søren Krum [mailto:soren.krum@uninett.no]
Sent: Tuesday, October 06, 2009 2:28 PM
To: users@cocoon.apache.org
Subject: Re: using Spring AOP in cocoon block
Hi!
did you have a look around here?
http://forum.springsource.org/showthread.php?t=36556
Looks like your instalation for some strange reason does not support
CGLIB2...
Best regards
Søren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
Re: using Spring AOP in cocoon block
Posted by Søren Krum <so...@uninett.no>.
Hi!
did you have a look around here?
http://forum.springsource.org/showthread.php?t=36556
Looks like your instalation for some strange reason does not support
CGLIB2...
Best regards
Søren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
RE: using Spring AOP in cocoon block
Posted by Robby Pelssers <ro...@ciber.com>.
So I added following dependencies to my pom.xml:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.4</version>
</dependency>
When I add following bean to the folder META-INF/cocoon/spring I run into the exception below:
Bean
---------------------------------------------------------------------------------------------------
<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:pipeline="http://cocoon.apache.org/schema/pipeline"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://cocoon.apache.org/schema/pipeline http://cocoon.apache.org/schema/pipeline/cocoon-pipeline-1.0.xsd">
<aop:aspectj-autoproxy/>
</beans>
Any ideas somebody??
Robby
Stacktrace:
---------------------------------------------------------------------------------------------------
2009-10-06 14:11:34.566::WARN: Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@1ff8506{/,D:\workspaces\spider\spring\target\rcl\webapp}
java.lang.RuntimeException: Cannot invoke listener org.springframework.web.context.ContextLoaderListener@c71c00
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.invoke(ReloadingListener.java:190)
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.contextInitialized(ReloadingListener.java:213)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:540)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:510)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:110)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:357)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:293)
at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:203)
at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:182)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:451)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:558)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:512)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:482)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:330)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:291)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:287)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cocoon.core.container.spring.avalon.AvalonBeanPostProcessor': Cannot resolve reference to bean 'org.apache.cocoon.core.container.spring.avalon.ConfigurationInfo' while setting bean property 'configurationInfo'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cocoon.core.container.spring.avalon.ConfigurationInfo': Post-processing of the FactoryBean's object failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:940)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:888)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:594)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:351)
at org.apache.cocoon.tools.rcl.springreloader.SynchronizedConfigureableWebApplicationContext.refresh(SynchronizedConfigureableWebApplicationContext.java:254)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener.invoke(ReloadingListener.java:157)
... 39 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cocoon.core.container.spring.avalon.ConfigurationInfo': Post-processing of the FactoryBean's object failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:140)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:114)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:90)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1269)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:256)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
... 58 more
Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:67)
at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:106)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:433)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299)[INFO] Started Jetty Server
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1340)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:137)
... 65 more
2009-10-06 14:11:34.597::INFO: Started SelectChannelConnector@0.0.0.0:8888
-----Original Message-----
From: Robby Pelssers [mailto:robby.pelssers@ciber.com]
Sent: Tuesday, October 06, 2009 1:10 PM
To: users@cocoon.apache.org
Subject: RE: using Spring AOP in cocoon block
Hi Soren,
When installing a new Cocoon block I see that some Spring dependencies come out-of-the-box:
List of artifacts without a source archive:
...
o org.springframework:spring-core:2.5.1
o org.springframework:spring-context:2.5.1
o aopalliance:aopalliance:1.0
o org.springframework:spring-beans:2.5.1
o org.springframework:spring-aop:2.5.1
o org.springframework:spring-web:2.5.1
...
So this makes me wonder what else is needed in my cocoon-block pom.xml to get started. I do want to use annotations like @Aspect, @Before and @Pointcut instead of declaring my aspects in an xml application context and just do
<aop:aspect-autoproxy>
<aop:include name="someBean"/>
</ aop:aspect-autoproxy>
<bean id="someBean" class="com.xxx.SomeBean"/>
I'll try to get something simple working and when I do I'll write some documentation.
Cheers,
Robby Pelssers
-----Original Message-----
From: Søren Krum [mailto:soren.krum@uninett.no]
Sent: Monday, October 05, 2009 8:28 AM
To: users@cocoon.apache.org
Subject: Re: using Spring AOP in cocoon block
Robby Pelssers wrote:
>
> Can someone tell me what is needed to get AOP working in a cocoon block?
>
> · Dependencies
>
> · Block configuration
>
> · ...?
>
> Kind regards,
>
> Robby
>
Hi!
so long i just worked with transactions as aop in cocoon. But i found
the documentation of spring really complete, it worked out of the box
for me.
http://static.springsource.org/spring/docs/2.0.x/reference/aop.html
May be a good point to start with aop. Check which version pf spring you
shall use and pick the doc after that. Newer in spring means most nicer
;-). Dependencies i used (i hope i did not overlook one):
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>2.5.1</version>
</dependency>
And in the block configuration (what is a own spring configuration file
for me, and i shotened it a bit, but i guess you can get the clue):
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!--
the transactional advice (what 'happens'; see the <aop:advisor/>
bean )
-->
<tx:advice id="applicationTxAdvice"
transaction-manager="applicationTransactionManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<!--
Technically correct, but hibernate does not like it f you try to
create sqlQuery without transaction
-->
<tx:method name="get*" read-only="true" />
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<!--
ensure that the above transactional advice runs for any execution of
an operation defined by the Service interfaces
-->
<aop:config>
<aop:pointcut id="applicationServiceOperation"
expression="execution(*
no.uninett.fas.application.service.*Service.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationServiceOperation" />
</aop:config>
<aop:config>
<aop:pointcut id="applicationHelperOperation"
expression="execution(*
no.uninett.fas.application.ApplicationHelper.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationHelperOperation" />
</aop:config>
<bean id="applicationSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="hibernateDataSource"/>
<property name="mappingResources">
<list>
<value>YOURMAPPINGFILE1</value>
<value>YOURMAPPINGFILE2</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
</bean>
<bean id="applicationTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true">
<property name="sessionFactory">
<ref bean="applicationSessionFactory" />
</property>
</bean>
<bean id="applicationDao"
class="no.uninett.fas.application.service.dao.ApplicationDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationConnectedDao"
class="no.uninett.fas.application.service.dao.ApplicationConnectedDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="treeEntryDao"
class="no.uninett.fas.application.service.dao.TreeEntryDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationService"
class="no.uninett.fas.application.service.ApplicationServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationDao" />
</constructor-arg>
</bean>
<bean id="applicationConnectedService"
class="no.uninett.fas.application.service.ApplicationConnectedServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationConnectedDao" />
</constructor-arg>
</bean>
<bean id="treeEntryService"
class="no.uninett.fas.application.service.TreeEntryServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="treeEntryDao" />
</constructor-arg>
</bean>
<bean id="applicationHelper"
class="no.uninett.fas.application.ApplicationHelper"
scope="prototype">
<constructor-arg index="0">
<ref bean="applicationService" />
</constructor-arg>
<constructor-arg index="1">
<ref bean="applicationConnectedService" />
</constructor-arg>
<constructor-arg index="2">
<ref bean="treeEntryService" />
</constructor-arg>
</bean>
Hope that helps
Søren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
RE: using Spring AOP in cocoon block
Posted by Robby Pelssers <ro...@ciber.com>.
Hi Soren,
When installing a new Cocoon block I see that some Spring dependencies come out-of-the-box:
List of artifacts without a source archive:
...
o org.springframework:spring-core:2.5.1
o org.springframework:spring-context:2.5.1
o aopalliance:aopalliance:1.0
o org.springframework:spring-beans:2.5.1
o org.springframework:spring-aop:2.5.1
o org.springframework:spring-web:2.5.1
...
So this makes me wonder what else is needed in my cocoon-block pom.xml to get started. I do want to use annotations like @Aspect, @Before and @Pointcut instead of declaring my aspects in an xml application context and just do
<aop:aspect-autoproxy>
<aop:include name="someBean"/>
</ aop:aspect-autoproxy>
<bean id="someBean" class="com.xxx.SomeBean"/>
I'll try to get something simple working and when I do I'll write some documentation.
Cheers,
Robby Pelssers
-----Original Message-----
From: Søren Krum [mailto:soren.krum@uninett.no]
Sent: Monday, October 05, 2009 8:28 AM
To: users@cocoon.apache.org
Subject: Re: using Spring AOP in cocoon block
Robby Pelssers wrote:
>
> Can someone tell me what is needed to get AOP working in a cocoon block?
>
> · Dependencies
>
> · Block configuration
>
> · ...?
>
> Kind regards,
>
> Robby
>
Hi!
so long i just worked with transactions as aop in cocoon. But i found
the documentation of spring really complete, it worked out of the box
for me.
http://static.springsource.org/spring/docs/2.0.x/reference/aop.html
May be a good point to start with aop. Check which version pf spring you
shall use and pick the doc after that. Newer in spring means most nicer
;-). Dependencies i used (i hope i did not overlook one):
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>2.5.1</version>
</dependency>
And in the block configuration (what is a own spring configuration file
for me, and i shotened it a bit, but i guess you can get the clue):
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!--
the transactional advice (what 'happens'; see the <aop:advisor/>
bean )
-->
<tx:advice id="applicationTxAdvice"
transaction-manager="applicationTransactionManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<!--
Technically correct, but hibernate does not like it f you try to
create sqlQuery without transaction
-->
<tx:method name="get*" read-only="true" />
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<!--
ensure that the above transactional advice runs for any execution of
an operation defined by the Service interfaces
-->
<aop:config>
<aop:pointcut id="applicationServiceOperation"
expression="execution(*
no.uninett.fas.application.service.*Service.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationServiceOperation" />
</aop:config>
<aop:config>
<aop:pointcut id="applicationHelperOperation"
expression="execution(*
no.uninett.fas.application.ApplicationHelper.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationHelperOperation" />
</aop:config>
<bean id="applicationSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="hibernateDataSource"/>
<property name="mappingResources">
<list>
<value>YOURMAPPINGFILE1</value>
<value>YOURMAPPINGFILE2</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
</bean>
<bean id="applicationTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true">
<property name="sessionFactory">
<ref bean="applicationSessionFactory" />
</property>
</bean>
<bean id="applicationDao"
class="no.uninett.fas.application.service.dao.ApplicationDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationConnectedDao"
class="no.uninett.fas.application.service.dao.ApplicationConnectedDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="treeEntryDao"
class="no.uninett.fas.application.service.dao.TreeEntryDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationService"
class="no.uninett.fas.application.service.ApplicationServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationDao" />
</constructor-arg>
</bean>
<bean id="applicationConnectedService"
class="no.uninett.fas.application.service.ApplicationConnectedServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationConnectedDao" />
</constructor-arg>
</bean>
<bean id="treeEntryService"
class="no.uninett.fas.application.service.TreeEntryServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="treeEntryDao" />
</constructor-arg>
</bean>
<bean id="applicationHelper"
class="no.uninett.fas.application.ApplicationHelper"
scope="prototype">
<constructor-arg index="0">
<ref bean="applicationService" />
</constructor-arg>
<constructor-arg index="1">
<ref bean="applicationConnectedService" />
</constructor-arg>
<constructor-arg index="2">
<ref bean="treeEntryService" />
</constructor-arg>
</bean>
Hope that helps
Søren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org
Re: using Spring AOP in cocoon block
Posted by Søren Krum <so...@uninett.no>.
Robby Pelssers wrote:
>
> Can someone tell me what is needed to get AOP working in a cocoon block?
>
> · Dependencies
>
> · Block configuration
>
> · …?
>
> Kind regards,
>
> Robby
>
Hi!
so long i just worked with transactions as aop in cocoon. But i found
the documentation of spring really complete, it worked out of the box
for me.
http://static.springsource.org/spring/docs/2.0.x/reference/aop.html
May be a good point to start with aop. Check which version pf spring you
shall use and pick the doc after that. Newer in spring means most nicer
;-). Dependencies i used (i hope i did not overlook one):
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>2.5.1</version>
</dependency>
And in the block configuration (what is a own spring configuration file
for me, and i shotened it a bit, but i guess you can get the clue):
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!--
the transactional advice (what 'happens'; see the <aop:advisor/>
bean )
-->
<tx:advice id="applicationTxAdvice"
transaction-manager="applicationTransactionManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<!--
Technically correct, but hibernate does not like it f you try to
create sqlQuery without transaction
-->
<tx:method name="get*" read-only="true" />
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<!--
ensure that the above transactional advice runs for any execution of
an operation defined by the Service interfaces
-->
<aop:config>
<aop:pointcut id="applicationServiceOperation"
expression="execution(*
no.uninett.fas.application.service.*Service.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationServiceOperation" />
</aop:config>
<aop:config>
<aop:pointcut id="applicationHelperOperation"
expression="execution(*
no.uninett.fas.application.ApplicationHelper.*(..))" />
<aop:advisor advice-ref="applicationTxAdvice"
pointcut-ref="applicationHelperOperation" />
</aop:config>
<bean id="applicationSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="hibernateDataSource"/>
<property name="mappingResources">
<list>
<value>YOURMAPPINGFILE1</value>
<value>YOURMAPPINGFILE2</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
</bean>
<bean id="applicationTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true">
<property name="sessionFactory">
<ref bean="applicationSessionFactory" />
</property>
</bean>
<bean id="applicationDao"
class="no.uninett.fas.application.service.dao.ApplicationDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationConnectedDao"
class="no.uninett.fas.application.service.dao.ApplicationConnectedDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="treeEntryDao"
class="no.uninett.fas.application.service.dao.TreeEntryDAOHibernate"
scope="prototype">
<constructor-arg ref="applicationSessionFactory"/>
</bean>
<bean id="applicationService"
class="no.uninett.fas.application.service.ApplicationServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationDao" />
</constructor-arg>
</bean>
<bean id="applicationConnectedService"
class="no.uninett.fas.application.service.ApplicationConnectedServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="applicationConnectedDao" />
</constructor-arg>
</bean>
<bean id="treeEntryService"
class="no.uninett.fas.application.service.TreeEntryServiceImpl"
scope="prototype">
<constructor-arg>
<ref bean="treeEntryDao" />
</constructor-arg>
</bean>
<bean id="applicationHelper"
class="no.uninett.fas.application.ApplicationHelper"
scope="prototype">
<constructor-arg index="0">
<ref bean="applicationService" />
</constructor-arg>
<constructor-arg index="1">
<ref bean="applicationConnectedService" />
</constructor-arg>
<constructor-arg index="2">
<ref bean="treeEntryService" />
</constructor-arg>
</bean>
Hope that helps
Søren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org