Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Weblogic 12.2.1上使用带JMS模板的动态代理的Spring AOP时出错_Spring_Spring Aop_Spring Jms_Spring Amqp - Fatal编程技术网

在Weblogic 12.2.1上使用带JMS模板的动态代理的Spring AOP时出错

在Weblogic 12.2.1上使用带JMS模板的动态代理的Spring AOP时出错,spring,spring-aop,spring-jms,spring-amqp,Spring,Spring Aop,Spring Jms,Spring Amqp,当我尝试在同一个项目中使用Spring模板JMS-to-messaging-to-ActiveMQ和Spring-AOP来审核和处理Weblogic 12.2.1上的异常时,我遇到了一个错误。服务器启动时出错 若我将方面配置为使用CGLIB,那个么我从Weblogic得到了异常,而且我更喜欢,若有可能保持使用动态代理。有没有人已经有过这个问题,或者知道是什么导致了这个问题 我的方面配置类: @Configuration @EnableAspectJAutoProxy @lombok.extern

当我尝试在同一个项目中使用Spring模板JMS-to-messaging-to-ActiveMQ和Spring-AOP来审核和处理Weblogic 12.2.1上的异常时,我遇到了一个错误。服务器启动时出错

若我将方面配置为使用CGLIB,那个么我从Weblogic得到了异常,而且我更喜欢,若有可能保持使用动态代理。有没有人已经有过这个问题,或者知道是什么导致了这个问题

我的方面配置类:

@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@EnableJms
@lombok.extern.slf4j.Slf4j
public class MessagingListenerConfig {

    @Autowired
    ConnectionFactory connectionFactory;

    @Bean
    public JmsListenerContainerFactory<?>  jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setConcurrency("1-1");
        return factory;
    }

}
@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@PropertySources({ @PropertySource("classpath:/config/messaging.properties") })
@ComponentScan("br.com.aegea.scab.notification")
@lombok.extern.slf4j.Slf4j
public class MessagingConfig {

    public static final String ERROR_QUEUE = "ERROR_QUEUE";
    public static final String EMAIL_QUEUE = "EMAIL_QUEUE";

    @Autowired
    private Environment environment;

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(environment.getProperty("spring.rabbitMQ.host"));
        connectionFactory.setUsername(environment.getProperty("spring.rabbitMQ.user"));
        connectionFactory.setPassword(environment.getProperty("spring.rabbitMQ.password"));
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new JsonMessageConverter();
    }

    @Bean
    public RabbitOperations emailRabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(EMAIL_QUEUE);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }

    @Bean
    public MessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory());
        listenerContainer.setQueueNames(EMAIL_QUEUE);
        listenerContainer.setMessageConverter(jsonMessageConverter());
        listenerContainer.setMessageListener(messageReceiver());
        listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
        return listenerContainer;
    }

    @Bean
    public MessageListener messageReceiver() {
        return new MessageReceiver();
    }
}
消息侦听器配置类:

@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@EnableJms
@lombok.extern.slf4j.Slf4j
public class MessagingListenerConfig {

    @Autowired
    ConnectionFactory connectionFactory;

    @Bean
    public JmsListenerContainerFactory<?>  jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setConcurrency("1-1");
        return factory;
    }

}
@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@PropertySources({ @PropertySource("classpath:/config/messaging.properties") })
@ComponentScan("br.com.aegea.scab.notification")
@lombok.extern.slf4j.Slf4j
public class MessagingConfig {

    public static final String ERROR_QUEUE = "ERROR_QUEUE";
    public static final String EMAIL_QUEUE = "EMAIL_QUEUE";

    @Autowired
    private Environment environment;

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(environment.getProperty("spring.rabbitMQ.host"));
        connectionFactory.setUsername(environment.getProperty("spring.rabbitMQ.user"));
        connectionFactory.setPassword(environment.getProperty("spring.rabbitMQ.password"));
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new JsonMessageConverter();
    }

    @Bean
    public RabbitOperations emailRabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(EMAIL_QUEUE);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }

    @Bean
    public MessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory());
        listenerContainer.setQueueNames(EMAIL_QUEUE);
        listenerContainer.setMessageConverter(jsonMessageConverter());
        listenerContainer.setMessageListener(messageReceiver());
        listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
        return listenerContainer;
    }

    @Bean
    public MessageListener messageReceiver() {
        return new MessageReceiver();
    }
}
@配置
@使能JMS
@lombok.extern.slf4j.slf4j
公共类MessagingListenerConfig{
@自动连线
连接工厂连接工厂;
@豆子
公共JmsListenerContainerFactory JmsListenerContainerFactory(){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
工厂。设置连接工厂(连接工厂);
factory.setConcurrency(“1-1”);
返回工厂;
}
}
堆栈:

weblogic.application.ModuleException: org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean 命名 'org.springframework.jms.config.internalJmsListenerEndpointRegistry' 应为类型 “org.springframework.jms.config.JmsListenerEndpointRegistry”但是 实际类型为'com.sun.proxy.$Proxy213'


您不显示注入
JmsListenerEndpointRegistry
(或
RabbitTemplate
)的位置,但在使用JDK代理进行代理时,必须通过接口注入

你为什么要向注册处提出建议?你想用这些建议达到什么目的?它不提供很多接口,因此一旦代理,它就不能被引用,除非通过
DisposableBean
SmartLifecycle


可以代理
rabbitmplate
,但需要插入
RabbitOperations
,而不是
rabbitmplate
,我解决了这个问题。我必须将代理更改为AMQP RabbitMQ,并且我需要在所有配置中使用接口而不是类。在它之后,启动负载工作,并且方面也工作

下面是方面配置和消息传递配置

AspectConfig:

@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@EnableJms
@lombok.extern.slf4j.Slf4j
public class MessagingListenerConfig {

    @Autowired
    ConnectionFactory connectionFactory;

    @Bean
    public JmsListenerContainerFactory<?>  jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setConcurrency("1-1");
        return factory;
    }

}
@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@PropertySources({ @PropertySource("classpath:/config/messaging.properties") })
@ComponentScan("br.com.aegea.scab.notification")
@lombok.extern.slf4j.Slf4j
public class MessagingConfig {

    public static final String ERROR_QUEUE = "ERROR_QUEUE";
    public static final String EMAIL_QUEUE = "EMAIL_QUEUE";

    @Autowired
    private Environment environment;

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(environment.getProperty("spring.rabbitMQ.host"));
        connectionFactory.setUsername(environment.getProperty("spring.rabbitMQ.user"));
        connectionFactory.setPassword(environment.getProperty("spring.rabbitMQ.password"));
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new JsonMessageConverter();
    }

    @Bean
    public RabbitOperations emailRabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(EMAIL_QUEUE);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }

    @Bean
    public MessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory());
        listenerContainer.setQueueNames(EMAIL_QUEUE);
        listenerContainer.setMessageConverter(jsonMessageConverter());
        listenerContainer.setMessageListener(messageReceiver());
        listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
        return listenerContainer;
    }

    @Bean
    public MessageListener messageReceiver() {
        return new MessageReceiver();
    }
}
MessagingConfig:

@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@EnableJms
@lombok.extern.slf4j.Slf4j
public class MessagingListenerConfig {

    @Autowired
    ConnectionFactory connectionFactory;

    @Bean
    public JmsListenerContainerFactory<?>  jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setConcurrency("1-1");
        return factory;
    }

}
@Configuration
@EnableAspectJAutoProxy
@lombok.extern.slf4j.Slf4j
public class AspectConfig {

    @Bean
    public LoggingErrorAspect loggingErrorAspect(){
        return new LoggingErrorAspect();
    }
}
@Configuration
@PropertySources({ @PropertySource("classpath:/config/messaging.properties") })
@ComponentScan("br.com.aegea.scab.notification")
@lombok.extern.slf4j.Slf4j
public class MessagingConfig {

    public static final String ERROR_QUEUE = "ERROR_QUEUE";
    public static final String EMAIL_QUEUE = "EMAIL_QUEUE";

    @Autowired
    private Environment environment;

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(environment.getProperty("spring.rabbitMQ.host"));
        connectionFactory.setUsername(environment.getProperty("spring.rabbitMQ.user"));
        connectionFactory.setPassword(environment.getProperty("spring.rabbitMQ.password"));
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new JsonMessageConverter();
    }

    @Bean
    public RabbitOperations emailRabbitTemplate() {
        RabbitTemplate template = new RabbitTemplate(connectionFactory());
        template.setRoutingKey(EMAIL_QUEUE);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }

    @Bean
    public MessageListenerContainer listenerContainer() {
        SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
        listenerContainer.setConnectionFactory(connectionFactory());
        listenerContainer.setQueueNames(EMAIL_QUEUE);
        listenerContainer.setMessageConverter(jsonMessageConverter());
        listenerContainer.setMessageListener(messageReceiver());
        listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
        return listenerContainer;
    }

    @Bean
    public MessageListener messageReceiver() {
        return new MessageReceiver();
    }
}

我试图更改为RabbitMQ,但我遇到了相同的问题:
weblogic.application.ModuleException:org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean名为“emailRabbitTemplate”的预期类型为“org.springframework.amqp.rabbit.core.RabbitTemplate”,但实际类型为“com.sun.proxy.$Proxy182”
Gary,是否有某种方法可以定义方面,使其仅用于特定类?我使用aspect的主要目标是处理常规异常和审核常规操作。您需要在aspect中添加切入点,以指定应用它的位置。有关
@enableAspectProxy
和的,请参阅javadocs。谢谢Gary Russel。我找到了解决办法。