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 + -
显示快捷键?