예제 #1
0
  private void validateDbImportConfiguration(DbImportConfiguration config, Injector injector)
      throws MojoExecutionException {
    DataNodeDescriptor dataNodeDescriptor = config.createDataNodeDescriptor();
    DataSource dataSource = null;
    DbAdapter adapter = null;

    try {
      dataSource = injector.getInstance(DataSourceFactory.class).getDataSource(dataNodeDescriptor);
      adapter =
          injector
              .getInstance(DbAdapterFactory.class)
              .createAdapter(dataNodeDescriptor, dataSource);

      if (!adapter.supportsCatalogsOnReverseEngineering()
          && reverseEngineering.getCatalogs() != null
          && !reverseEngineering.getCatalogs().isEmpty()) {
        String message =
            "Your database does not support catalogs on reverse engineering. "
                + "It allows to connect to only one at the moment. Please don't note catalogs as param.";
        throw new MojoExecutionException(message);
      }
    } catch (Exception e) {
      throw new MojoExecutionException(
          "Error creating DataSource ("
              + dataSource
              + ") or DbAdapter ("
              + adapter
              + ") for DataNodeDescriptor ("
              + dataNodeDescriptor
              + ")",
          e);
    }
  }
예제 #2
0
  public void execute() throws MojoExecutionException, MojoFailureException {

    Log logger = new MavenLogger(this);

    DbImportConfiguration config = toParameters();
    config.setLogger(logger);
    Injector injector = DIBootstrap.createInjector(new ToolsModule(logger), new DbImportModule());

    validateDbImportConfiguration(config, injector);

    try {
      injector.getInstance(DbImportAction.class).execute(config);
    } catch (Exception ex) {
      Throwable th = Util.unwindException(ex);

      String message = "Error importing database schema";

      if (th.getLocalizedMessage() != null) {
        message += ": " + th.getLocalizedMessage();
      }

      getLog().error(message);
      throw new MojoExecutionException(message, th);
    }
  }
  @Test
  public void testSaveAs_RecoverFromSaveError() throws Exception {

    FileProjectSaver saver =
        new FileProjectSaver() {

          @Override
          void saveToTempFile(SaveUnit unit, PrintWriter printWriter) {
            throw new CayenneRuntimeException("Test Exception");
          }
        };

    Module testModule =
        new Module() {

          @Override
          public void configure(Binder binder) {
            binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
            binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
            binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
            binder.bind(DataChannelDescriptorLoader.class).to(XMLDataChannelDescriptorLoader.class);
            binder.bind(ProjectLoader.class).to(DataChannelProjectLoader.class);
            binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
          }
        };

    Injector injector = DIBootstrap.createInjector(testModule);
    injector.injectMembers(saver);

    String testConfigName = "PROJECT2";
    String baseUrl = getClass().getPackage().getName().replace('.', '/');
    URL url =
        getClass().getClassLoader().getResource(baseUrl + "/cayenne-" + testConfigName + ".xml");

    Resource source = new URLResource(url);
    Project project = injector.getInstance(ProjectLoader.class).loadProject(source);

    File outFile = setupTestDirectory("testSaveAs_RecoverFromSaveError");
    assertEquals(0, outFile.list().length);

    try {
      saver.saveAs(project, new URLResource(outFile.toURL()));
      fail("No exception was thrown..");
    } catch (CayenneRuntimeException e) {
      // expected

      assertEquals(0, outFile.list().length);
    }
  }
  @Test
  public void testSaveAs() throws Exception {

    FileProjectSaver saver = new FileProjectSaver();

    Module testModule =
        new Module() {

          @Override
          public void configure(Binder binder) {
            binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
            binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);

            binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
            binder.bind(DataChannelDescriptorLoader.class).to(XMLDataChannelDescriptorLoader.class);
            binder.bind(ProjectLoader.class).to(DataChannelProjectLoader.class);
            binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
          }
        };

    Injector injector = DIBootstrap.createInjector(testModule);
    injector.injectMembers(saver);

    String testConfigName = "PROJECT2";
    String baseUrl = getClass().getPackage().getName().replace('.', '/');
    URL url =
        getClass().getClassLoader().getResource(baseUrl + "/cayenne-" + testConfigName + ".xml");

    Resource source = new URLResource(url);
    Project project = injector.getInstance(ProjectLoader.class).loadProject(source);

    File outFile = setupTestDirectory("testSave");

    saver.saveAs(project, new URLResource(outFile.toURL()));

    File rootFile = new File(outFile, "cayenne-PROJECT2.xml");
    assertTrue(rootFile.exists());
    assertTrue(rootFile.length() > 0);

    File map1File = new File(outFile, "testProjectMap2_1.map.xml");
    assertTrue(map1File.exists());
    assertTrue(map1File.length() > 0);

    File map2File = new File(outFile, "testProjectMap2_2.map.xml");
    assertTrue(map2File.exists());
    assertTrue(map2File.length() > 0);
  }
예제 #5
0
 @Override
 protected void attachToRuntime(Injector injector) {
   super.attachToRuntime(injector);
   this.transactionFactory = injector.getInstance(TransactionFactory.class);
 }
예제 #6
0
  /**
   * Attaches this context to the CayenneRuntime whose Injector is passed as an argument to this
   * method.
   *
   * @since 3.1
   */
  protected void attachToRuntime(Injector injector) {

    // TODO: nested contexts handling??
    attachToChannel(injector.getInstance(DataChannel.class));
    setQueryCache(new NestedQueryCache(injector.getInstance(QueryCache.class)));
  }