使用Java

时间:2017-07-31 04:44:25

标签: java mysql hibernate google-app-engine servlets

我有一个SQL实例“MySQL 2nd Gen 5.7”,它必须处理来自Google App Engine的简单更新查询操作。

此Google App Engine标准Java项目服务已创建 JDK 1.8, Eclipse Oxygen, Hibernate 3, 和经典的servlet包括在内。

每当我从计算机运行项目时,连接都将正常运行,程序将无错误地执行。但是当我将其部署到Google创建新版本时,如果我尝试它,查询页面将加载30秒,直到出现错误500。 错误详情:

网站显示:

  

错误:服务器错误

     

服务器遇到错误,无法完成您的请求。   请在30秒后再试一次。

显示堆栈跟踪:

  

hbt.HibernateUtil中的java.lang.ExceptionInInitializerError。   (HibernateUtil.java:21)在dao.TurnoDAO.getTurno(TurnoDAO.java:69)at at   RegularizarTurno.doPost中的controlador.Main.getTurno(Main.java:32)   (RegularizarTurno.java:33)在javax.servlet.http.HttpServlet.service   (HttpServlet.java:637)在javax.servlet.http.HttpServlet.service   (HttpServlet.java:717)

问题是SessionFactory不会创建,因为项目无法连接到数据库,在我的计算机中也是如此。 因此,正如在Google文档中所说,如果服务在同一个GoogleProject中运行,则无法访问问题,答案不应该是权限方式。

package hbt;

import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration;

导入实体。*;

public class HibernateUtil{
private static final SessionFactory sessionFactory;
static {
    try {
        AnnotationConfiguration config = new AnnotationConfiguration();
        config.addAnnotatedClass(Turno.class); 
        config.addAnnotatedClass(Persona.class);        


        sessionFactory = config.buildSessionFactory();

   }catch (Throwable ex){
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex); //LINE 21
    }
}  
public static SessionFactory getSessionFactory(){
    return sessionFactory;
}
}

因此,IP地址工作正常,权限应该没问题,与编码相关的一切都很好(因为在2台PC上测试过)。我错过了什么?我应该要求特殊权限吗?提前致谢

1 个答案:

答案 0 :(得分:0)

答案:有一个奇怪的权限问题,即GAE不允许访问具有相同项目ID的数据库。它通过允许所有网络访问数据库来解决。风险很大,我们仍然需要有密码的用户才能进入。非常感谢。