向OSGi JAX-RS资源添加方面

时间:2014-05-14 11:57:16

标签: java web-services osgi jax-rs aop

我正在寻找一种在OSGI环境中为JAX-RS资源添加某些功能的方法。注释似乎是一种干净的方式,我已经看到它在Spring框架中完成(没有经验)。诸如@Transactional之类的注释,或者(我想要做的事情,需要在用户上设置权限标志)@Permission(CREATE)。但是,我在OSGI环境中对如何执行此操作有点困惑。

添加方面的正常方法(是吗?)是注册包装原始服务的方面服务。如果我正确查找,JAX-RS资源将被跟踪并连接到HttpService。 JAX-RS资源不实现接口,需要动态创建代理。

如何动态生成有效隐藏原始资源的OSGI方面服务/资源,将JAX-RS跟踪器挂钩到HttpService?我对现有的AOP框架没有经验,也几乎没有任何AOP知识。

1 个答案:

答案 0 :(得分:1)

在Java EE和Spring世界中,使用拦截器并根据注释定义其他行为是很常见的。 OSGi中也有一些解决方案,有一个支持EJB注释的RFP。

但是,我有不同的意见。虽然看起来很酷,但它也很神奇。请参阅此"Why not annotations, interceptors and other magic?"文件的README章节,其中写下了我的理由。该项目实现了您希望使用@Transactional注释实现的逻辑,但它仅使用功能接口。

我认为最好在lambda表达式中考虑实现你想要的目标(参见链接背后的java 8示例)。如果它不是Java 8,您仍然可以使用匿名类(请参阅链接后面的jave 7及以上示例)。使用匿名类,您的代码看起来会更难看,但是代码的作用会很清楚。

其他人可能不喜欢我的回答。三年前,我是注释扫描,编织和拦截器的最大粉丝之一。经过几次头痛,我成了这个"魔法"的敌人。概念