Spring 2.5.6 JMX NotificationPublisher, вызывающий NPE
Я получаю Caused by: java.lang.NullPointerException
иногда. Похоже, пружина не умеет впрыскивать org.springframework.jmx.export.notification.NotificationPublisher
должным образом. Я использую Spring 2.5.6 и развернут в WebSphere 7. Как мы можем решить эту проблему NPE?
import javax.management.Notification;
import org.springframework.jmx.export.notification.NotificationPublisher;
import org.springframework.jmx.export.notification.NotificationPublisherAware;
import com.xyz.SpringUtil;
import com.xyz.notification.INotificationMBean;
import com.xyz.security.impl.SpringSecurityHelper;
/**
* provides a central class for the publishing of Notifications. This allows us to centralize all notification
* Listeners configuration in a central location, for this one MBean.
*/
public class NotificationMBean implements INotificationMBean, NotificationPublisherAware {
/** used to publish notifications. This will be set automatically by Spring */
private NotificationPublisher notificationPublisher;
private String proxyUser; // set by Spring - used for RMI-direct calls
private SpringSecurityHelper securityHelper;
protected SpringSecurityHelper getSecurityHelper() {
if (securityHelper == null) {
securityHelper = (SpringSecurityHelper) SpringUtil.getApplicationContext().getBean(
SpringSecurityHelper.SPRING_SECURITY_HELPER);
}
return securityHelper;
}
protected void setSecurityHelper(SpringSecurityHelper securityHelper) {
this.securityHelper = securityHelper;
}
/**
* {@inheritDoc}
*/
public void publishNotification(Notification notif) {
getSecurityHelper().switchUserIfUnauthenticated(getProxyUser());
getNotificationPublisher().sendNotification(notif);
}
/**
* Setter for notificationPublisher.
* @param notificationPublisher NotificationPublisher
*/
public void setNotificationPublisher(NotificationPublisher notificationPublisher) {
this.notificationPublisher = notificationPublisher;
}
/**
* Getter for the notificationPublisher.
* @return NotificationPublisher Returns the notificationPublisher.
*/
private NotificationPublisher getNotificationPublisher() {
return notificationPublisher;
}
/**
* {@inheritDoc}
*/
public String getProxyUser() {
return proxyUser;
}
/**
* {@inheritDoc}
*/
public void setProxyUser(String username) {
this.proxyUser = username;
}
}
1 ответ
Ошибка исчезла после добавления нижеприведенного объявления в мой весенний контекстный файл
<property name="notificationListeners">
<list>
<bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
<constructor-arg>
<ref bean="notificationListenerToDatabase" />
</constructor-arg>
<property name="namingStrategy" ref="mbeanNamingStrategy" />
<property name="mappedObjectNameTypePairs">
<map>
<entry>
<key>
<value>sequenceGeneratorEarNotificationMBean</value>
</key>
<ref bean="NotificationMBean" />
</entry>
</map>
</property>
</bean>
<bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
<constructor-arg>
<ref bean="notificationListenerToTopic" />
</constructor-arg>
<property name="namingStrategy" ref="mbeanNamingStrategy" />
<property name="mappedObjectNameTypePairs">
<map>
<entry>
<key>
<value>sequenceGeneratorEarNotificationMBean</value>
</key>
<ref bean="NotificationMBean" />
</entry>
</map>
</property>
</bean>
<bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
<constructor-arg ref="notificationListenerToExternal" />
<property name="namingStrategy" ref="mbeanNamingStrategy" />
<property name="mappedObjectNameTypePairs">
<map>
<entry key="sequenceGeneratorEarNotificationMBean" value-ref="NotificationMBean" />
</map>
</property>
</bean>
</list>
</property>
</bean>