2010-08-29 38 views
2

我有一个GWT应用程序,其RPC服务由GWTHandler bean处理,以便它可以顺利地与Spring集成。该应用程序工作。没有问题。GWT Spring集成 - 如何做AOP日志记录?

我的问题是我不能用Spring做任何AOP日志记录。我喜欢使用AOP从GWT界面记录用户活动。 (当然,我可以按照以前的方式为用户执行的每个操作调用RPC服务并记录这些操作,但这不是AOP方式)。我必须在AOP中这样做,因为这是客户的要求。

我尝试使用普通的切入点模式“执行(* (..))”的普通Spring AOP。它能够捕获除GWT服务之外的所有方法。换句话说,它是无用的。我当然可以使用AOP登录后端Spring DAO,但我怎么知道它来自哪个RPC服务?这些DAO被许多类和方法使用(不是GWT专有的)。

我试过探索GWT-ENT包。看上去不错。但是,它适用于客户端,而您的类必须实现Aspectable。这意味着需要对我的GWT应用程序上的所有客户端类进行更改。此外,您不能使用私有方法,因为使用GWT-ENT处理AOP,您需要通过GWT.create而不是new()来创建类。私有方法抛出错误。我设置了一个简单的应用程序,真正的私有方法不起作用。

我试着搜索GWT-SL包(我的GWTHandler来自哪里)。他们提到了关于AOP的一些事情,但信息非常稀缺。谷歌没有给我任何解决方案或例子。

我试过了所有我能想到的东西,并用我所有的努力搜索了Google,但是我找不到解决我的问题的方法。

我想要做的就是通过AOP从我的GWT服务记录方法。假设客户转到“报告”选项卡。然后他点击删除按钮记录。我想通过AOP登录该活动。

我正在使用GWT(与SmartGWT)和Spring/Hibernate堆栈。

+0

经过一番调查,我决定在DAO层而不是GWT(表现层/服务层)中进行AOP日志记录,因为我们不关心用户的视觉按钮选择删除记录。如果他删除了一条记录,它将只使用特定的DAO。所以AOP记录DAO层是有意义的。此外,我意识到我遇到困难的另一个原因是因为处理我正在使用的项目的前一位程序员混合了服务和DAO层。两者之间应该有清晰的分离。 – chris 2010-08-30 13:21:48

回答

0

Spring AOP只会在Spring上下文中建议bean的公共方法,所以GWT基础结构不在,除非您通过Spring容器特别实例化它。

你可以使用编译时编织AspectJ将你的AOP连接到任何东西,但它可能会有点混乱。除非你正在编译有问题的GWT类,否则它也不能确定。

+0

GWT服务是由第三方类(GWTHandler,类似于Spring的SimpleURLHandler - 忘记了确切的名称)连接的Spring bean。现在,我正在重新评估应该在哪里进行AOP日志记录。我认为最好是我只记录DAO而不是GWT服务(因为几乎不可能记录它们)。一旦一切变得清晰,我会再次回复。 – chris 2010-08-30 04:23:58

0

我要回答我的问题。

而不是在GWT服务器实现上执行AOP日志记录(理论上应该工作,但实际上它不工作),我决定做DAO层上的AOP日志记录。只要确保你记录了DAO而不是Hibernate Session