@Override public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { JsonType jtype; JavaTypeDescriptor jdesc; try { jtype = JsonType.INSTANCE; jdesc = JsonJavaTypeDescriptor.INSTANCE; } catch (Throwable t) { // Avoid logging system for a project so small System.err.println("JSON type contribution failed! Message: " + t.getMessage()); t.printStackTrace(System.err); return; } JavaTypeDescriptorRegistry.INSTANCE.addDescriptor(jdesc); typeContributions.contributeType(jtype); }
@Override public void start() { // don't judge me, bukkit doesn't want to resolve those so we need to manually load them Class[] iDontEvenKnow = new Class[]{CoreMessageLogger_$logger.class, Log_$logger.class, ConnectionPoolingLogger_$logger.class, EntityManagerMessageLogger_$logger.class, ConnectionAccessLogger_$logger.class}; boolean shouldCreateTable = config.persistence.initialTableCreation; if (shouldCreateTable) { config.persistence.initialTableCreation = false; configHandler.saveGlobalConfig(); } StandardServiceRegistry registry = new StandardServiceRegistryBuilder() // credentials and stuff .applySetting("hibernate.connection.username", config.persistence.user) .applySetting("hibernate.connection.password", config.persistence.pass) .applySetting("hibernate.connection.driver_class", config.persistence.driver) .applySetting("hibernate.connection.url", config.persistence.url + "?useSSL=false") .applySetting("hibernate.dialect", config.persistence.dialect) // misc settings .applySetting("hibernate.hbm2ddl.auto", shouldCreateTable ? "create" : "update") .applySetting("hibernate.show_sql", config.persistence.showSQL + "") //TODO apparently this is an anti-pattern [0], but it fixes an issue so ¯\_(ツ)_/¯ // [0]: https://vladmihalcea.com/2016/09/05/the-hibernate-enable_lazy_load_no_trans-anti-pattern/ .applySetting("hibernate.enable_lazy_load_no_trans", true) .applySetting("hibernate.connection.autocommit", true) // connection pool .applySetting("hibernate.connection.pool_size", config.persistence.pool_size + "") //TODO figure out how to use hikari with hibernate //.applySetting("hibernate.connection.provider_class","com.zaxxer.hikari.hibernate.HikariConnectionProvider") .build(); JavaTypeDescriptorRegistry.INSTANCE.addDescriptor(ComponentTypeDescriptor.INSTANCE); MetadataSources sources = new MetadataSources(registry); Timings.time("RegisterDBEntities", () -> new Reflections("").getTypesAnnotatedWith(Entity.class).forEach(sources::addAnnotatedClass)); try { Metadata metadata = sources.buildMetadata(); sessionFactory = metadata.buildSessionFactory(); } catch (Exception e) { StandardServiceRegistryBuilder.destroy(registry); e.printStackTrace(); } }