Java OpenShift云上的NullPointerException

Java OpenShift云上的NullPointerException,java,mysql,hibernate,Java,Mysql,Hibernate,这是我的java代码: response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); Gson gson = new Gson(); Session session = null; Transaction tx = null; try { session = HibernateUtil.getSessionFactory().openSession(); tx = ses

这是我的java代码:

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
Gson gson = new Gson();

Session session = null;
Transaction tx = null;
try {
    session = HibernateUtil.getSessionFactory().openSession();
    tx = session.beginTransaction();
    List currencies = session.createQuery("from Currency").list();
    response.getWriter().write(gson.toJson(currencies));
    tx.commit();
} catch (HibernateException e) {
    if (tx != null) tx.rollback();
} finally {
    session.close();
}
在我的计算机上运行此代码时,我没有收到任何错误。但当我在OpenShift cloud上运行它时,我会收到NullPointerException。行会话中出现异常。关闭()

我在OpenShift中使用的盒带是Tomcat 7(JBoss EWS 2.0)、MySQL 5.5和phpMyAdmin 4.0

hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property>
<property name="hibernate.connection.url"> jdbc:mysql://$OPENSHIFT_MYSQL_DB_HOST:$OPENSHIFT_MYSQL_DB_PORT/program </property>
<property name="hibernate.connection.username">login</property>
<property name="hibernate.connection.password">passwd</property>
<property name="show_sql">true</property>
<mapping resource="com.gmail.user.persistence/Currency.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

org.hibernate.dialogue.mysqldialogue
com.mysql.jdbc.Driver
jdbc:mysql://$OPENSHIFT\u mysql\u DB\u主机:$OPENSHIFT\u mysql\u DB\u端口/程序
登录
passwd
真的
我需要一个如何修理它的建议


谢谢你

别吃了!将代码更改为:

catch (HibernateException e) {
   LOG.warn("",e);
   if (tx != null) tx.rollback();
}

然后您将知道会话为null的原因。

从“finally”块中删除“session.close();”。因为会话已经关闭,所以当编译器尝试运行finally块时,它会出现null指针异常,

发布堆栈跟踪。更好的方法是,附加到实例并使用调试器逐步执行。如果会话已关闭,则会出现异常,因为
会话已关闭
,而不是NullPointerException。要检查会话是否尚未关闭,我们可以使用
session.isOpen()
method。在此之后,我删除了
session.close()
,出现了一个关于mysql端口的错误。我将hibernate.cfg.xml连接url从
jdbc:mysql://$OPENSHIFT\u mysql\u DB\u HOST:$OPENSHIFT\u mysql\u DB\u PORT/program
更改为
jdbc:mysql://127.7.242.2:3306/program
现在我没有收到任何错误。我从phpMyAdmin获得了IP和端口。非常感谢你!