ambermappedcomponent.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,961 行 · 第 1/4 页

JAVA
1,961
字号
    out.println("java.sql.PreparedStatement pstmt = __caucho_session.prepareStatement(sql);");    out.println("int index = 1;");    ArrayList<AmberField> fields = _entityType.getFields();    for (int i = 0; i < fields.size(); i++) {      AmberField field = fields.get(i);      field.generateUpdate(out, "mask", "pstmt", "index");    }    out.println();    _entityType.getId().generateSet(out, "pstmt", "index");    out.println();    out.println("pstmt.executeUpdate();");    out.println();    generateLogFine(out, " amber update");    // println();    // println("pstmt.close();");    out.popDepth();    out.println("}");    out.popDepth();    out.println("}");  }  /**   * Generates the after-commit   */  void generateAfterCommit(JavaWriter out,                           boolean isEntityParent)    throws IOException  {    // XXX: needs to handle this with subclasses    // but there is an issue in the enhancer fixup    // removing the "super." call.    // if (_entityType.getParentType() != null) {    //   out.println();    //   out.println("public void __caucho_super_afterCommit()");    //   out.println("{");    //   out.println("  super.__caucho_afterCommit();");    //   out.println("}");    // }    out.println();    out.println("public void __caucho_afterCommit()");    out.println("{");    out.pushDepth();    // ejb/06c9    out.println("com.caucho.amber.entity.EntityState state = __caucho_state;");    out.println();    out.println("__caucho_state = com.caucho.amber.entity.EntityState.P_NON_TRANSACTIONAL;");    out.println();    out.println("if (__caucho_session == null) {");    int dirtyCount = _entityType.getDirtyIndex();    for (int i = 0; i <= dirtyCount / 64; i++) {      out.println("  __caucho_updateMask_" + i + " = 0L;");    }    out.println("  return;");    out.println("}");    out.println();    // jpa/0h20, jpa/0l20, jpa/0l43    out.println("if (__caucho_cacheItem == null)");    out.println("  return;");    out.println();    // ejb/06c9    out.println("if (state.isDeleting())");    out.println("  return;");    out.println();    // ejb/06--, ejb/0a-- and jpa/0o04    int group = 0;    out.print(getClassName() + " item = (" + getClassName() + ")");    out.println("__caucho_cacheItem.getEntity();");        out.println("Object pk = __caucho_getPrimaryKey();");    out.println("item.__caucho_setPrimaryKey(pk);");        _entityType.generateCopyLoadObject(out, "item", "super", group);    out.println("item.__caucho_loadMask_" + group + " |= __caucho_loadMask_" + group + " & 1L;");    out.println("__caucho_session.getPersistenceUnit().updateCacheItem((com.caucho.amber.type.EntityType) __caucho_home.getRootType(), pk, __caucho_cacheItem);");    out.popDepth();    out.println("}");  }  /**   * Generates the after-rollback   */  void generateAfterRollback(JavaWriter out)    throws IOException  {    out.println();    out.println("public void __caucho_afterRollback()");    out.println("{");    out.pushDepth();    out.println("__caucho_state = com.caucho.amber.entity.EntityState.P_NON_TRANSACTIONAL;");    int loadCount = _entityType.getLoadGroupIndex();    for (int i = 0; i <= loadCount / 64; i++) {      out.println("__caucho_loadMask_" + i + " = 0L;");    }    int dirtyCount = _entityType.getDirtyIndex();    for (int i = 0; i <= dirtyCount / 64; i++) {      out.println("__caucho_dirtyMask_" + i + " = 0L;");    }    out.popDepth();    out.println("}");  }  String getDebug()  {    return "this";  }  /**   * Generates the update   */  void generateCreate(JavaWriter out)    throws IOException  {    boolean isAbstract      = Modifier.isAbstract(_entityType.getBeanClass().getModifiers());        boolean isGeneratedValue = false;    // jpa/0gg0    if (_entityType.getId() != null && ! isAbstract) {      ArrayList<IdField> fields = _entityType.getId().getKeys();      IdField idField = fields.size() > 0 ? fields.get(0) : null;      boolean hasReturnGeneratedKeys = false;      try {        hasReturnGeneratedKeys = _entityType.getPersistenceUnit().hasReturnGeneratedKeys();      } catch (Exception e) {        // Meta-data exception which is acceptable or        // no data-source configured. The latter will        // be thrown on web.xml validation. (ejb/06m0)      }      if (idField != null && idField.isAutoGenerate())        isGeneratedValue = true;      if (! hasReturnGeneratedKeys &&          idField != null && idField.getType().isAutoIncrement()) {        out.println();        out.println("private static com.caucho.amber.field.Generator __caucho_id_gen;");        out.println("static {");        out.pushDepth();        out.println("com.caucho.amber.field.MaxGenerator gen = new com.caucho.amber.field.MaxGenerator();");        out.print("gen.setColumn(\"");        out.printJavaString(idField.getColumns().get(0).generateInsertName());        out.println("\");");        out.print("gen.setTable(\"");        out.printJavaString(_entityType.getName());        out.println("\");");        out.println("gen.init();");        out.popDepth();        out.println("}");      }    }    // jpa/0ga2    out.println();    out.println("public boolean __caucho_lazy_create(com.caucho.amber.manager.AmberConnection aConn, com.caucho.amber.type.EntityType home)");    out.println("  throws java.sql.SQLException");    out.println("{");    out.pushDepth();    int loadCount = 0;    // jpa/0ge2: MappedSuperclassType    if ((_entityType.getTable() == null) || (_entityType.getId() == null)) {      out.println("return false;");      out.popDepth();      out.println("}");    }    else {      out.println("if (__caucho_session != null)");      out.println("  return true;");      out.println();      // commented out: jpa/0h25      // out.println("  throw new com.caucho.amber.AmberException(\"object \" + " + getDebug() + " + \" is already persistent.\");");      out.println("__caucho_state = com.caucho.amber.entity.EntityState.P_PERSISTING;");      loadCount = _entityType.getLoadGroupIndex();      for (int i = 0; i <= loadCount / 64; i++) {        out.println("__caucho_loadMask_" + i + " = 0L;");        // XXX: jpa/0l21        EntityType parentType = _entityType;        do {          out.println("__caucho_loadMask_" + i + " |= " + parentType.getCreateLoadMask(i) + ";");        } while ((parentType = parentType.getParentType()) != null);      }      out.println();      out.println("__caucho_session = aConn;");      out.println("__caucho_home = home;");      _entityType.generatePrePersist(out);      //out.println();      //out.println("__caucho_home.prePersist(this);");      out.println();            // jpa/0r20      for (Method method : _entityType.getPrePersistCallbacks()) {        out.println(method.getName() + "();");      }      if (isGeneratedValue) {        // jpa/0g50: generated id needs to flush the insert statement at persist() time.        out.println("__caucho_create(aConn, home);");      }      else {        // jpa/0j5e: persist() is lazy but should cascade to add entities to the context.        //out.println();        //out.println("__caucho_cascadePrePersist(aConn);");        out.println("__caucho_cascadePostPersist(aConn);");      }      out.println("__caucho_home.postPersist(this);");      for (Method method : _entityType.getPostPersistCallbacks()) {        out.println(method.getName() + "();");      }      out.println();      out.println("return true;");      out.popDepth();      out.println("}");    }    out.println();    out.println("public boolean __caucho_create(com.caucho.amber.manager.AmberConnection aConn, com.caucho.amber.type.EntityType home)");    out.println("  throws java.sql.SQLException");    out.println("{");    out.pushDepth();    // jpa/0ge2: MappedSuperclassType    if ((_entityType.getTable() == null) || (_entityType.getId() == null)) {      out.println("return false;");      out.popDepth();      out.println("}");      return;    }    out.println("if (__caucho_state != com.caucho.amber.entity.EntityState.P_PERSISTING)");    out.println("  return false;");    out.println();    out.println("__caucho_state = com.caucho.amber.entity.EntityState.P_PERSISTED;");    out.println();    out.println("__caucho_cascadePrePersist(aConn);");    int dirtyCount = _entityType.getDirtyIndex();    for (int i = 0; i <= dirtyCount / 64; i++) {      out.println("__caucho_dirtyMask_" + i + " = 0L;");    }    AmberTable table = _entityType.getTable();    String sql = null;    out.println("String sql;");    boolean isAutoInsert = false;        if (_entityType.getId() != null	&& ! isAbstract	&& _entityType.getId().isIdentityGenerator()) {      isAutoInsert = true;    }        out.println("int index = 1;");    _entityType.getId().generateCheckCreateKey(out);    out.println("java.sql.PreparedStatement pstmt;");    // jpa/0gg0, jpa/0gh0    if (isAutoInsert) {      out.println("if (__caucho_home.isIdentityGenerator()) {");      out.pushDepth();            out.print("sql = \"");      out.printJavaString(_entityType.generateAutoCreateSQL(table));      out.println("\";");      out.println("pstmt = aConn.prepareInsertStatement(sql, true);");      out.popDepth();      out.println("} else {");      out.pushDepth();    }    out.print("sql = \"");    out.printJavaString(_entityType.generateCreateSQL(table));    out.println("\";");        out.println("pstmt = aConn.prepareInsertStatement(sql, false);");        if (isAutoInsert) {      out.popDepth();      out.println("}");    }    _entityType.getId().generateSetInsert(out, "pstmt", "index");    _entityType.generateInsertSet(out, table, "pstmt", "index", "super");    out.println();    out.println("pstmt.executeUpdate();");    out.println();    _entityType.getId().generateSetGeneratedKeys(out, "pstmt");    EntityType parentType = _entityType;    do {      for (AmberTable subTable : parentType.getSecondaryTables()) {        sql = parentType.generateCreateSQL(subTable);        out.println();        out.print("sql = \"");        out.printJavaString(sql);        out.println("\";");        out.println("pstmt = aConn.prepareStatement(sql);");        out.println("index = 1;");        out.println();        parentType.getId().generateSetInsert(out, "pstmt", "index");        parentType.generateInsertSet(out, subTable, "pstmt", "index", "super");        out.println();        out.println("pstmt.executeUpdate();");        out.println();        parentType.getId().generateSetGeneratedKeys(out, "pstmt");      }    } while ((parentType = parentType.getParentType()) != null);    // println("pstmt.close();");    out.println("__caucho_cacheItem = new com.caucho.amber.entity.CacheableEntityItem(home.getHome(), new " + getClassName() + "());");    out.println(getClassName() + " cacheEntity = (" + getClassName() + ") __caucho_cacheItem.getEntity();");    out.println("cacheEntity.__caucho_home = home;");    Id id = _entityType.getId();    out.println("Object pk = null;");    if (! id.isEmbeddedId()) {      ArrayList<IdField> keys = id.getKeys();      for (IdField key : keys) {        String value;        if (keys.size() == 1)          value = key.getType().generateCastFromObject("(pk = __caucho_getPrimaryKey())");        else          value = key.generateGet("super");        out.println(key.generateSet("cacheEntity", value) + ";");      }    }    else {      // jpa/0gh0      id.generateCopy(out, "cacheEntity", "this");      // out.println("pk = __caucho_compound_key;");      // out.println(id.getEmbeddedIdField().generateStatementSet("cacheEntity", "__caucho_compound_key") + ";");    }    out.println("try {");    out.pushDepth();    // jpa/0o01    out.println("Object child;");    // jpa/0l21    for (int i = 0; i <= loadCount; i++) {      _entityType.generateCopyLoadObject(out, "cacheEntity", "super", i);    }    out.popDepth();    out.println("} catch (RuntimeException e) {");    out.println("  throw e;");    out.println("} catch (Exception e) {");    out.println("  throw new com.caucho.amber.AmberRuntimeException(e);");    out.println("}");    parentType = _entityType;    // jpa/0l21    for (int i = 0; i <= loadCount / 64; i++) {      out.println("cacheEntity.__caucho_loadMask_" + i + " = 0L;");      do {        out.println("cacheEntity.__caucho_loadMask_" + i + " |= " + parentType.getCreateLoadMask(i) + ";");      }      while ((parentType = parentType.getParentType()) != null);    }    out.println();    out.println("if (pk == null)");    out.println("  pk = __caucho_getPrimaryKey();");    // jpa/0i5e, jpa/1641    // caching entity must only occur after the commit completes to    // handle rollbacks and also so the cache doesn't have an    // item in the middle of a transaction    /*      out.println();      out.println("aConn.getPersistenceUnit().putEntity((com.caucho.amber.type.EntityType) __caucho_home.getRootType(),");      out.println("                                     pk, __caucho_cacheItem);");    */    out.println();    generateLogFine(out, " amber create");    out.println();    out.println("return false;");    out.popDepth();    out.println("}");  }  /**   * Generates the delete   */  void generateDelete(JavaWriter out)    throws IOException  {  }  /**   * Generates the foreign delete   */  void generateDeleteForeign(JavaWriter out)    throws IOException  {    out.println();    out.println("public void __caucho_invalidate_foreign(String table, Object key)");    out.println("{");    out.pushDepth();    _entityType.generateInvalidateForeign(out);    out.popDepth();    out.println("}");  }  /**   * Generates the create   */  void generateMerge(JavaWriter out)    throws IOException  {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?