标签: load-time-weaving

使用@ChangeTracking关系保存ManyToMany会抛出PersistenceException

当我试图保存ManyToMany关系时,我得到一个数据库异常:

Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "INVERSES_ID"; SQL statement:
INSERT INTO m2m_owner_inverse (inverses_ID, owners_ID) VALUES (?, ?) [23502-184]
Error Code: 23502
Call: INSERT INTO m2m_owner_inverse (inverses_ID, owners_ID) VALUES (?, ?)
    bind => [null, 1]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我在日志中看到插入了两个实例:

[EL Fine]: sql: 2016-02-22 13:18:32.67--ClientSession(1546269015)--Connection(1894667608)--INSERT INTO M2MOWNER (NAME) VALUES (?)
    bind => [null]
[EL Fine]: sql: 2016-02-22 13:18:32.676--ClientSession(1546269015)--Connection(1894667608)--CALL IDENTITY()
[EL Fine]: sql: 2016-02-22 13:18:32.716--ClientSession(1546269015)--Connection(1894667608)--INSERT INTO M2MINVERSE (NAME) VALUES (?) …
Run Code Online (Sandbox Code Playgroud)

java jpa eclipselink load-time-weaving

8
推荐指数
0
解决办法
256
查看次数

使用Tomcat和Spring配置AspectJ LTW时出现问题

我在Tomcat 6 webapp中使用Spring进行加载时编织时遇到了一些问题.我只想将它用于事务(因此自我调用遵循事务注释,而不是AOP代理).似乎正在加载织布工,但我的注释类实际上并没有被编织.当我单步执行代码时,我在SQL日志中看不到任何事务边界,正如我在常规AOP代理配置中看到的那样.这是我的设置:

在server.xml中:

<Context path="/api" allowLinking="true" reloadable="false" docBase="/usr/local/apache-tomcat-6.0.18/webapps/API/ROOT" workDir="/usr/local/apache-tomcat-6.0.18/webapps/API/ROOT/work">
    <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

我有tom-tomcat-weaver.jar tomcat/lib目录,以及我的Tomcat类路径上的以下jar:

tomcat/webapps/API/ROOT/WEB-INF/lib/aspectjweaver.jar tomcat/webapps/API/ROOT/WEB-INF/lib/spring-aspects.jar

这是在bean配置文件中定义带注释的服务类:

<tx:annotation-driven transaction-manager="txManager" mode="aspectj"/>
Run Code Online (Sandbox Code Playgroud)

在我的上下文中的许多其他bean配置文件之一:

<aop:aspectj-autoproxy>
    <aop:include name="methodTimer"/>
</aop:aspectj-autoproxy>


<context:load-time-weaver aspectj-weaving="on"/>
<context:annotation-config />

<bean name="methodTimer" class="tv.current.web.aop.MethodTimer" />
Run Code Online (Sandbox Code Playgroud)

我希望MethodTimer使用常规AOP代理,而不是LTW - LTW应该仅适用于@Transactional注释.如下所述:http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-aj-configure.如果我注释掉<aop:aspectj-autoproxy>元素,我不会得到任何我看到的编织信息日志消息.说到这里,他们在这里; 你可以看到方面正在加载,但实际上没有任何东西被编织:

Aug 28, 2009 6:34:42 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
[TomcatInstrumentableClassLoader@34fe7e0e] info AspectJ Weaver Version 1.6.5 built on Thursday Jun 18, 2009 at 03:42:32 GMT
[TomcatInstrumentableClassLoader@34fe7e0e] info register classloader org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader@34fe7e0e
[TomcatInstrumentableClassLoader@34fe7e0e] info using configuration …
Run Code Online (Sandbox Code Playgroud)

aop spring transactions aspectj load-time-weaving

7
推荐指数
2
解决办法
7281
查看次数

AspectJ加载时织入用于签名罐

是否有人成功使用带有签名的jar的AspectJ加载时编织?

我有一个例外,不知道如何解决它(使用AspectJ 1.6.8-16.10测试):

Exception in thread "main" java.lang.NoClassDefFoundError: com/package/clazz$AjcClosure1
    at com.package.test.main(test.java:55)
Caused by: java.lang.ClassNotFoundException: com.package.clazz$AjcClosure1
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

坦率地说,事件我不确定它是否在技术上可行,但我知道类似的问题(使用来自已签名的java类的动态生成的java代码)是为Hibernate项目完成的(即使用Javassist而不是CGLIB).细节在这里.

java aop tomcat aspectj load-time-weaving

7
推荐指数
1
解决办法
958
查看次数

在运行时编织方面

我正在寻找一种Java解决方案,它允许我在运行时使用AOP在已经运行的代码之上编写新代码.关键是不要求重启JVM.另外,我想在运行时删除编织,让旧代码在编织之前运行.

我在想AspectJ加载时编织+运行时类加载/卸载会做到这一点.有人试过吗?有什么建议?谢谢.

java aop aspectj runtime load-time-weaving

7
推荐指数
2
解决办法
8238
查看次数

使用aop.xml在AspectJ中加载时间编织

根据我的理解,为了使用aop.xml文件进行加载时间编织,它必须放在META-INF中.有没有办法绕过这个并在任何目录中使用aop.xml(或任何xml文件)?谢谢.

java aop aspectj load-time-weaving

6
推荐指数
1
解决办法
3293
查看次数

如何使用Spring和Tomcat设置加载时编织而不在命令行上使用-javaagent

我使用的是Spring 3.2.9,Tomcat 6.0.44

我正在尝试配置我的应用程序的Spring检测提供程序(例如spring-instrumentation.jar)进行加载时编织,当它部署在Tomcat上时.

我要求不要在命令行上使用"-javaagent:/path/path/spring-instrument.jar"来进行配置.

我已经读过,我可以通过修改应用程序的Tomcat配置的<Context>元素来配置Spring检测(在Tomcat的server.xml或我的web应用程序的context.xml中).将适当的<Context>元素添加到server.xml会导致我的应用程序正确配置为与Spring的检测提供程序一起运行.将它添加到context.xml(见下文)不会导致工作设置.

我有一个META-INF/aop.xml文件,如下所示:

    <aspectj>
        <weaver options="-verbose -showWeaveInfo -debug">
            <include within="com.mv.xx.services..*"/>
            <exclude within="com.mv.xx.aop..*"/>
        </weaver>
        <aspects>
            <aspect name="com.mv.xx.aop.MyAspect"/>
        </aspects>
    </aspectj>
Run Code Online (Sandbox Code Playgroud)

我还指定我想通过将其添加到我的Spring上下文配置来使用加载时编织:

 <context:load-time-weaver />
Run Code Online (Sandbox Code Playgroud)

我将这个jar添加到我的应用程序的类路径:spring-instrument-tomcat.jar

我做了什么:

启动Tomcat时,如果我使用-javaagent参数在命令行上识别spring-instrument.jar的位置,如下所示:

-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)

一切正常.


接下来,我从命令行中删除了"-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar".在Tomcat的server.xml文件(位于$ CATALINE_HOME/conf中)中,我向<Host>元素添加了一个<Context>元素,如下所示:

<Context path="/myApp" docBase="myApp">
    <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

使用此配置,一切都正常.但是我要求不修改Tomcat的server.xml,因为我无法控制server.xml(DevOps会这样做,并且不愿修改它).


接下来,我从Tomcat的server.xml中删除了<Context>元素.根据Spring文档,我可以在我的webapp中添加/META-INF/context.xml,并将以前在Tomcat的server.xml中的<Context>元素放入context.xml中,如下所示:

        <Context>
            <Context path="/myApp" docBase="myApp">
                <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
            </Context>
        </Context>
Run Code Online (Sandbox Code Playgroud)

但是,当我重新启动Tomcat时,我在日志中收到一条错误消息:

    SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating …
Run Code Online (Sandbox Code Playgroud)

spring tomcat spring-aop context.xml load-time-weaving

6
推荐指数
1
解决办法
4472
查看次数

如何使Tomcat与META-INF/context.xml中定义的TomcatInstrumentableClassLoader一起使用WEB-INF/lib/spring-instrument-tomcat.jar

我构建了一个简单的应用程序,它在服务器端使用Spring Data 3.1.0.RELEASE和Eclipselink 2.4 - 它托管在Tomcat 7.0.27中.在mywebapp/META-INF/context.xml中,我有Spring类加载器

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
Run Code Online (Sandbox Code Playgroud)

如果我把spring-instrument-tomcat.jar$TOMCAT_HOME/lib则在Tomcat运行mywebapp很好,但如果我把spring-instrument-tomcat.jar$TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib- Tomcat的,出现异常死亡

java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
Run Code Online (Sandbox Code Playgroud)

Context loader参数useSystemClassLoaderAsParent设置false也没有帮助.

我不想在Tomcat中拥有任何(自定义)全局库(在现实生产系统中使用全局库并不容易)因此我试图将所有需要的东西本地化(简单)但是很大的战争档案.有关如何实现这种封装的任何想法?

tomcat classloader context.xml load-time-weaving spring-data

5
推荐指数
1
解决办法
2万
查看次数

如果没有 -javaagent vm 选项,Spring AspectJ 编织如何工作?

我知道 Spring 避免使用-javaagentvm 选项来使其 AspectJ 加载时间编织工作,而是依赖类加载器来启动代理。

我认为 Java 规范规定使用 Java 代理的唯一方法是通过-javaagentvm 选项。

我错了吗?有人可以将我引导到官方 Java 规范/文档来澄清我的审讯吗?

java aspectj spring-aop javaagents load-time-weaving

5
推荐指数
1
解决办法
3493
查看次数

Spring Boot - 无法使用aspectj编织加载时间来工作

谁能告诉我为什么在使用弹簧靴时不会触发方面?我正在尝试使用 aspectj 设置加载时间编织,以便我可以建议私有方法。

这是准系统项目的链接 - https://github.com/satb/spring_aop_test_project.git

使用“-javaagent:path/to/spring-instrument-4.1.0.RELEASE.jar”(或计算机上其他版本的lib)运行“App”类并运行curl命令

curl -i http://localhost:8080/test-app/motd
Run Code Online (Sandbox Code Playgroud)

MyAspect 类有一个建议,应该在调用 MyService 的私有方法时执行。但在这种情况下,什么也不会发生。

但是,当应用程序启动时,我看到如下消息:

[AppClassLoader@58644d46] warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified.
Run Code Online (Sandbox Code Playgroud)

我尝试按照这里的建议让它工作,但这没有帮助 -将 @Autowired 与 AspectJ 和 Springboot 一起使用

aop spring load-time-weaving spring-boot

5
推荐指数
1
解决办法
1万
查看次数

JPA 使用 hibernate,将 AvailableSettings.USE_CLASS_ENHANCER 属性设置为 true 会引发 java.lang.ClassCircularityError

我设置了 spring 应用程序。一切正常。但是当我将 Hibernate AvailableSettings.USE_CLASS_ENHANCER 属性设置为 true 时,我得到java.lang.ClassCircularityError.

这是我的配置。首先,我使用的是 log4j2。这是我的 log4j2 文件。

log4j-xinclude-appenders.xml:

<appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <RollingFile name="WroxFileAppender" fileName="${filename}.log" filePattern="${filename}-%d{MM-dd-yyyy}-%i.log">      
        <PatternLayout pattern= "%d{HH:mm:ss.SSS} [%t] %X{id} %X{username} %-5level %c{36} %l: %msg%n" />

        <Policies>
            <SizeBasedTriggeringPolicy size="10 MB" />
        </Policies>

        <DefaultRolloverStrategy min="1" max="4" />
    </RollingFile>      
</appenders>
Run Code Online (Sandbox Code Playgroud)

log4j-xinclude-loggers.xml:

<loggers>
    <root level="warn">
        <!--  
        <appender-ref ref="Console" />
        <appender-ref ref="WroxFileAppender" />
        -->
    </root>

    <logger name="my.package" level="info" />
    <logger name="org.apache" level="info" />
    <logger name="org.springframework" level="info" /> 
    <logger …
Run Code Online (Sandbox Code Playgroud)

spring-mvc hibernate-entitymanager maven-3 load-time-weaving tomcat8

5
推荐指数
0
解决办法
636
查看次数