@hghg2

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

hibernateを使用してec2とrds(mysql)を接続したい。 しかし、「Unable to build Hibernate SessionFactory」とエラーが出ます。

解決したいこと

hibernateを使用してec2とrds(mysql)を接続したい。
しかし、「Unable to build Hibernate SessionFactory」とエラーが出ます。

環境

エラーが出ているwebアプリケーションの内容です。
言語:java17
コンテナ:tomcat8.5.75
ビルドツール:maven
DB:mysql(rds)
サーバー:EC2(aws)
その他使用している技術:hibernate など

発生している問題・エラー

mysqlを使用したデータの登録、参照、削除などが可能なwebアプリケーション(アプリA)を作成中です。
現状はローカル環境では、動作が上手くいっています。が、ec2にデプロイしたところエラーが発生しています。
ec2にアプリケーションを配置し、rds内のmysqlに接続する構成です。

AWS Icons.png

データの登録時に下記エラーが出ます。

HTTPステータス 500 – Internal Server Error
タイプ 例外報告

メッセージ [PersistenceUnit: hotel_booking_system] Unable to build Hibernate SessionFactory

説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。

例外

javax.persistence.PersistenceException: [PersistenceUnit: hotel_booking_system] Unable to build Hibernate SessionFactory
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:970)
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:895)
	org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	utils.DBUtil.getEntityManagerFactory(DBUtil.java:16)
	utils.DBUtil.createEntityManager(DBUtil.java:12)
	controllers.login.LoginServlet.doPost(LoginServlet.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	filters.EncodingFilter.doFilter(EncodingFilter.java:40)
根本原因

org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
	org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:128)
	org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:300)
	org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460)
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
	org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	utils.DBUtil.getEntityManagerFactory(DBUtil.java:16)
	utils.DBUtil.createEntityManager(DBUtil.java:12)
	controllers.login.LoginServlet.doPost(LoginServlet.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	filters.EncodingFilter.doFilter(EncodingFilter.java:40)
根本原因

org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:91)
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
	org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:385)
	org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:519)
	org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
	org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:128)
	org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:300)
	org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460)
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
	org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	utils.DBUtil.getEntityManagerFactory(DBUtil.java:16)
	utils.DBUtil.createEntityManager(DBUtil.java:12)
	controllers.login.LoginServlet.doPost(LoginServlet.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	filters.EncodingFilter.doFilter(EncodingFilter.java:40)
根本原因

java.lang.reflect.InvocationTargetException
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
	org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:385)
	org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:519)
	org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
	org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:128)
	org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:300)
	org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460)
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
	org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	utils.DBUtil.getEntityManagerFactory(DBUtil.java:16)
	utils.DBUtil.createEntityManager(DBUtil.java:12)
	controllers.login.LoginServlet.doPost(LoginServlet.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	filters.EncodingFilter.doFilter(EncodingFilter.java:40)
根本原因

java.lang.NullPointerException: Cannot invoke "java.lang.reflect.AccessibleObject.setAccessible(boolean)" because "ao" is null
	javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:103)
	javassist.util.proxy.DefineClassHelper.toClass3(DefineClassHelper.java:151)
	javassist.util.proxy.DefineClassHelper.toClass2(DefineClassHelper.java:134)
	javassist.util.proxy.DefineClassHelper.toClass(DefineClassHelper.java:95)
	javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:131)
	javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:530)
	javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:515)
	javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:451)
	javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:422)
	org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:75)
	org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
	org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:156)
	org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:58)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)
	org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
	org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:385)
	org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:519)
	org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
	org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
	org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:128)
	org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:300)
	org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460)
	org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
	org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
	utils.DBUtil.getEntityManagerFactory(DBUtil.java:16)
	utils.DBUtil.createEntityManager(DBUtil.java:12)
	controllers.login.LoginServlet.doPost(LoginServlet.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	filters.EncodingFilter.doFilter(EncodingFilter.java:40)

DB周りで関係のありそうなソースコード

アプリAのソースコード
resources/META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="hotel_booking_system" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<class>models.Guest</class>
		<class>models.Booking</class>
		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://<DB接続先>?reconnect=true&amp;useSSL=false&amp;useUnicode=true&amp;characterSetResults=utf8"/>
			<property name="javax.persistence.jdbc.user" value="<ユーザ名>"/>
			<property name="javax.persistence.jdbc.password" value="<パスワード>"/>
      <property name="javax.persistence.schema-generation.database.action" value="create"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>
</persistence>

GuestsCreateServlet.java(DB登録クラス)

package controllers.guests;

import java.io.IOException;
import java.sql.Timestamp;
import java.util.List;

import javax.persistence.EntityManager;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import models.Guest;
import models.validators.GuestValidator;
import utils.DBUtil;
import utils.EncryptUtil;

/**
 * Servlet implementation class GuestsCreateServlet
 */
@WebServlet("/guests/create")
public class GuestsCreateServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  /**
   * @see HttpServlet#HttpServlet()
   */
  public GuestsCreateServlet() {
    super();
    // TODO Auto-generated constructor stub
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *      response)
   */

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String _token = request.getParameter("_token");
    if (_token != null || _token.equals(request.getSession().getId())) {
      EntityManager em = DBUtil.createEntityManager();

      Guest g = new Guest();

      g.setName(request.getParameter("name"));
      g.setPassword(
          EncryptUtil.getPasswordEncrypt(
              request.getParameter("password"),
              (String) this.getServletContext().getAttribute("pepper")));

      g.setPhone(request.getParameter("phone"));
      g.setMail(request.getParameter("mail"));

      Timestamp currentTime = new Timestamp(System.currentTimeMillis());
      g.setCreated_at(currentTime);
      g.setUpdated_at(currentTime);

      g.setAdmin_flag(1);

      List<String> errors = GuestValidator.validate(g, true);
      if (errors.size() > 0) {
        em.close();

        request.setAttribute("_token", request.getSession().getId());
        request.setAttribute("guest", g);
        request.setAttribute("errors", errors);

        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/guests/new.jsp");
        rd.forward(request, response);
      } else {
        em.getTransaction().begin();
        em.persist(g);
        em.getTransaction().commit();
        em.close();

        request.getSession().setAttribute("flush", "登録を完了致しました。");
        response.sendRedirect(request.getContextPath() + "/new/or/login");

      }

    }

  }
}

DBUtil.java(DBユーティリティクラス)

package utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DBUtil {
	private static final String PERSISTENCE_UNIT_NAME = "<DB名>";
	private static EntityManagerFactory emf;

	public static EntityManager createEntityManager() {
		return getEntityManagerFactory().createEntityManager();
	}
	private static  EntityManagerFactory getEntityManagerFactory() {
		if(emf == null){
			emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
		}

		return emf;
	}

}

自分で試したこと

ec2とRDSの接続が上手くいっていないのか、確認したところ接続はできました。
やはりアプリケーションに問題があるようです。

どうすれば、解決できるでしょうか???

0 likes

No Answers yet.

Your answer might help someone💌