Jboss 新InitialContext()上的null指针

Jboss 新InitialContext()上的null指针,jboss,nullpointerexception,jboss-eap-6,initial-context,Jboss,Nullpointerexception,Jboss Eap 6,Initial Context,我们使用JBoss EAP 6.2.4,在无状态会话bean中,我们向WMQ队列管理器发送JMS消息 我们的代码如下: @Stateless @LocalBean public class MessageSenderBean { private static ConnectionFactory connectionFactory; private static InitialContext initialContext; @EJB IntegrationPro

我们使用JBoss EAP 6.2.4,在无状态会话bean中,我们向WMQ队列管理器发送JMS消息

我们的代码如下:

@Stateless
@LocalBean
public class MessageSenderBean {

    private static ConnectionFactory connectionFactory;
    private static InitialContext initialContext;

    @EJB
    IntegrationPropertyBean ipb;

    Logger logger = Logger.getLogger(getClass());

    /**
     * Default constructor.
     */
    public MessageSenderBean() {

    }

    @PostConstruct
    public void postConstruct() {
        logger.debug(" MessageSenderBeanPostConstruct called");
        try {
            initialContext = new InitialContext();
            String connectionFactoryName = ipb.getProperty(
                    MessageSenderBean.class, "connectionFactory");
            connectionFactory = (ConnectionFactory) initialContext
                    .lookup(connectionFactoryName);

        } catch (NamingException e) {
            logger.error("Exception occurred: " + e.toString());
            logger.error(e);
        }

    }

    public String sendMessage(String queueName, String content) {
        String result = null;
        Connection connection = null;
        try {
            connection = connectionFactory.createConnection();
        } catch (JMSException e) {
            logger.error("Exception occurred: " + e.toString());
            logger.error(e);
        }

        // prüfen ob InitialContext leer
        try {
            if (initialContext == null)
                initialContext = new InitialContext();
        } catch (NamingException e) {
            logger.error("Exception occurred: " + e.toString());
            logger.error(e);
        }
在服务器启动后,bean在第一个操作中工作得很好,但是在一段时间没有任何操作之后,bean会失去initialContext,并且在新的initialContext()中的附加创建失败

知道为什么吗


感谢Joerg

请记住以下几点:

对象未同步,这意味着不同线程不应同时访问实例。 您已经将initialContext变量声明为类成员(静态),因此,在某些情况下,不同的线程将同时使用它

一个简单的解决方案是将属性声明为实例成员

<!-- language: java -->
private InitialContext initialContext;

私有初始上下文初始上下文;