Как использовать jcabi-аспекты с платформой Play
Я не могу найти ни одного примера jcabi-аспектов в Play! приложение.
Вот мой Build.scala
файл
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "test-for-fun"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
"com.jcabi" % "jcabi-aspects" % "1.0-SNAPSHOT",
"org.aspectj" % "aspectjrt" % "1.6.12" % "runtime",
javaCore,
javaJdbc,
javaEbean
)
val main = play.Project(appName, appVersion, appDependencies).settings(
resolvers += "oss.sonatype.org" at "https://oss.sonatype.org/content/repositories/snapshots/"
)
}
И вот как я называю @Loggable
package controllers;
import play.*;
import play.mvc.*;
import com.jcabi.aspects.Loggable;
import views.html.*;
public class Application extends Controller {
@Loggable(Loggable.INFO)
public static Result index() {
return ok(index.render("Your new application is ready."));
}
}
Если вы можете предоставить какие-либо советы, пожалуйста.
Моя главная цель - выполнить логирование с помощью AOP, так что если вы знаете другой способ, используя Play! пожалуйста.
Спасибо
1 ответ
I was actually looking into the same thing today and got it working with my scala project (which uses SBT, though I've been running stuff through intellij). I think you're going to have to do a few things:
Как упомянуто здесь, вы захотите добавить -javaagent:~/path-to/aspectjweaver.jar для любой команды java, которую вы запускаете. Смотрите здесь пример того, как добавить флаг javaagent для проекта воспроизведения.
Включите некоторые дополнительные зависимости:
libraryDependencies + = "org.aspectj"% "aspectjweaver"% "1.7.2"
libraryDependencies + = "org.aspectj"% "aspectjrt"% "1.7.2"
libraryDependencies + = "com.jcabi"% "jcabi-aspect"% "0.8"
libraryDependencies + = "com.jcabi"% "jcabi-log"% "0.8"
Создайте META-INF/aop.xml в своей папке ресурсов для своего проекта. Это то, что определяет время выполнения для аспекта j. Посмотрите эту суть для примера.
Скопируйте класс MethodLogger из jcabi-aspect v0.8 (и Mnemos.java и NamedThreads.java) в ваш com.yourcompany.yourpackage. Причина этого (насколько я могу судить) заключается в том, что пакеты jcabi компилируются особым образом, и мы вместо этого хотим выполнять ткачество во время выполнения, так что это обходит это. Редактировать: возможно, это из-за того, что я использую Java 7 и плагины компилируются в Java 6- я вижу некоторые предупреждения при сборке в SBT.
Я был бы рад услышать, если у кого-то есть лучший способ, но это, по крайней мере, кажется, работает.