Skip to content

Commit

Permalink
Rework database schema (eclipse-che#3063)
Browse files Browse the repository at this point in the history
  • Loading branch information
Yevhenii Voevodin committed Nov 23, 2016
1 parent 9b79091 commit fb8a6c8
Show file tree
Hide file tree
Showing 144 changed files with 4,116 additions and 723 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ config/
# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
Expand Down
41 changes: 33 additions & 8 deletions assembly/assembly-wsmaster-war/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,6 @@
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-core</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-jdbc-vendor-h2</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-machine</artifactId>
Expand Down Expand Up @@ -110,6 +102,18 @@
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-commons-inject</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-db</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-db-vendor-h2</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-sql-schema</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>wsmaster-local</artifactId>
Expand Down Expand Up @@ -162,6 +166,10 @@
<groupId>org.everrest</groupId>
<artifactId>everrest-websockets</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
Expand All @@ -182,6 +190,11 @@
<artifactId>che-core-api-factory</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-commons-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
Expand Down Expand Up @@ -210,6 +223,18 @@
<skip>true</skip>
</configuration>
</execution>
<execution>
<id>resource-dependencies</id>
<phase>process-test-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>che-core-sql-schema</includeArtifactIds>
<includes>che-schema/</includes>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,21 @@
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
import com.google.inject.persist.jpa.JpaPersistModule;

import org.eclipse.che.account.api.AccountModule;
import org.eclipse.che.api.agent.server.launcher.AgentLauncher;
import org.eclipse.che.api.core.jdbc.jpa.eclipselink.EntityListenerInjectionManagerInitializer;
import org.eclipse.che.api.core.jdbc.jpa.guice.JpaInitializer;
import org.eclipse.che.api.core.rest.CheJsonProvider;
import org.eclipse.che.api.core.rest.MessageBodyAdapter;
import org.eclipse.che.api.core.rest.MessageBodyAdapterInterceptor;
import org.eclipse.che.api.machine.server.jpa.MachineJpaModule;
import org.eclipse.che.api.machine.shared.Constants;
import org.eclipse.che.api.ssh.server.jpa.SshJpaModule;
import org.eclipse.che.api.user.server.CheUserCreator;
import org.eclipse.che.api.user.server.TokenValidator;
import org.eclipse.che.api.user.server.jpa.UserJpaModule;
import org.eclipse.che.api.workspace.server.WorkspaceConfigMessageBodyAdapter;
import org.eclipse.che.api.workspace.server.WorkspaceMessageBodyAdapter;
import org.eclipse.che.api.workspace.server.jpa.WorkspaceJpaModule;
import org.eclipse.che.api.workspace.server.stack.StackMessageBodyAdapter;
import org.eclipse.che.core.db.schema.SchemaInitializer;
import org.eclipse.che.inject.DynaModule;
import org.eclipse.che.plugin.docker.compose.ComposeModule;
import org.flywaydb.core.internal.util.PlaceholderReplacer;

import javax.sql.DataSource;

import static com.google.inject.matcher.Matchers.subclassesOf;
import static org.eclipse.che.inject.Matchers.names;
Expand All @@ -43,17 +37,24 @@
public class WsMasterModule extends AbstractModule {
@Override
protected void configure() {
// db related components modules
install(new com.google.inject.persist.jpa.JpaPersistModule("main"));
install(new org.eclipse.che.account.api.AccountModule());
install(new org.eclipse.che.api.user.server.jpa.UserJpaModule());
install(new org.eclipse.che.api.ssh.server.jpa.SshJpaModule());
install(new org.eclipse.che.api.machine.server.jpa.MachineJpaModule());
install(new org.eclipse.che.api.workspace.server.jpa.WorkspaceJpaModule());

// db configuration
bind(DataSource.class).toProvider(org.eclipse.che.core.db.h2.H2DataSourceProvider.class);
bind(SchemaInitializer.class).to(org.eclipse.che.core.db.schema.impl.flyway.FlywaySchemaInitializer.class);
bind(org.eclipse.che.core.db.DBInitializer.class).asEagerSingleton();
bind(PlaceholderReplacer.class).toProvider(org.eclipse.che.core.db.schema.impl.flyway.PlaceholderReplacerProvider.class);

install(new org.eclipse.che.plugin.docker.compose.ComposeModule());

bind(org.eclipse.che.api.user.server.CheUserCreator.class);

install(new JpaPersistModule("main"));
bind(JpaInitializer.class).to(org.eclipse.che.api.core.h2.jdbc.jpa.guice.CheJpaInitializer.class).asEagerSingleton();
bind(CheUserCreator.class);
bind(EntityListenerInjectionManagerInitializer.class).asEagerSingleton();
install(new UserJpaModule());
install(new SshJpaModule());
install(new WorkspaceJpaModule());
install(new AccountModule());
install(new MachineJpaModule());
install(new ComposeModule());
bind(TokenValidator.class).to(org.eclipse.che.api.local.DummyTokenValidator.class);
bind(org.eclipse.che.api.local.LocalDataMigrator.class).asEagerSingleton();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,8 @@

<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.exception-handler" value="org.eclipse.che.api.core.h2.jdbc.jpa.eclipselink.H2ExceptionHandler"/>
<property name="eclipselink.exception-handler" value="org.eclipse.che.core.db.h2.jpa.eclipselink.H2ExceptionHandler"/>
<property name="eclipselink.target-server" value="None"/>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
<property name="eclipselink.logging.logger" value="DefaultLogger"/>
<property name="eclipselink.logging.level" value="SEVERE"/>
</properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,3 +210,13 @@ org.everrest.asynchronous.cache.size=1024
# Path to asynchronous service
org.everrest.asynchronous.service.path=/async/


# DB initialization and migration configuration
db.schema.flyway.baseline.enabled=true
db.schema.flyway.baseline.version=5.0.0.8.1
db.schema.flyway.scripts.prefix=
db.schema.flyway.scripts.suffix=.sql
db.schema.flyway.scripts.version_separator=__
db.schema.flyway.scripts.locations=classpath:che-schema

db.jndi.datasource.name=java:/comp/env/jdbc/che

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,16 @@
<groupId>org.eclipse.che.core</groupId>
<version>5.0.0-M8-SNAPSHOT</version>
</parent>
<artifactId>che-core-api-jdbc-vendor-h2</artifactId>
<name>Che Core :: API :: JDBC Vendor H2</name>
<artifactId>che-core-db-vendor-h2</artifactId>
<name>Che Core :: DB :: Vendor H2</name>
<dependencies>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-persist</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.che.core</groupId>
<artifactId>che-core-api-jdbc</artifactId>
<artifactId>che-core-db</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,33 @@
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.h2.jdbc.jpa.guice;
package org.eclipse.che.core.db.h2;

import com.google.inject.persist.PersistService;

import org.eclipse.che.api.core.jdbc.jpa.guice.JpaInitializer;
import org.eclipse.che.core.db.JndiDataSourceProvider;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.inject.Provider;
import javax.sql.DataSource;
import java.nio.file.Paths;

/**
* Provides H2 specific initialization of persistent engine.
* Provides data source for h2 database.
*
* @author Anton Korneta.
* @author Yevhenii Voevodin
*/
@Singleton
public class CheJpaInitializer extends JpaInitializer {
public class H2DataSourceProvider implements Provider<DataSource> {

@Inject
@Named("che.database")
private String storageRoot;

@Inject
private JndiDataSourceProvider jndiDataSourceProvider;

@Override
public void init(PersistService persistService) {
public DataSource get() {
System.setProperty("h2.baseDir", Paths.get(storageRoot).resolve("db").toString());
super.init(persistService);
return jndiDataSourceProvider.get();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.h2.jdbc.jpa.eclipselink;
package org.eclipse.che.core.db.h2.jpa.eclipselink;

import org.eclipse.che.api.core.jdbc.jpa.DuplicateKeyException;
import org.eclipse.che.api.core.jdbc.jpa.IntegrityConstraintViolationException;
import org.eclipse.che.core.db.jpa.DuplicateKeyException;
import org.eclipse.che.core.db.jpa.IntegrityConstraintViolationException;
import org.eclipse.persistence.exceptions.DatabaseException;
import org.eclipse.persistence.exceptions.ExceptionHandler;

Expand Down
Loading

0 comments on commit fb8a6c8

Please sign in to comment.