private static void write(BCClass bc, PCEnhancer enhancer, Map<Class, byte[]> map, Class cls, List subs, List ints) throws IOException { if (bc == enhancer.getManagedTypeBytecode()) { // if it was already defined, don't put it in the map, // but do set the metadata accordingly. if (enhancer.isAlreadyRedefined()) ints.add(bc.getType()); else if (JavaVersions.VERSION >= 5) map.put(bc.getType(), bc.toByteArray()); } else { if (!enhancer.isAlreadySubclassed()) { // this is the new subclass ClassLoader loader = GeneratedClasses.getMostDerivedLoader( cls, PersistenceCapable.class); subs.add(GeneratedClasses.loadBCClass(bc, loader)); } } }
/** * If this is a generated subclass, look up the corresponding Class * object via metadata. */ private Class<?> lookupClass(String className) throws ClassNotFoundException { try { return Class.forName(className); } catch (ClassNotFoundException e) { if (PCEnhancer.isPCSubclassName(className)) { String superName = PCEnhancer.toManagedTypeName(className); ClassMetaData[] metas = conf.getMetaDataRepositoryInstance() .getMetaDatas(); for (int i = 0; i < metas.length; i++) { if (superName.equals( metas[i].getDescribedType().getName())) { return PCRegistry.getPCType( metas[i].getDescribedType()); } } // if it's not found, try to look for it anyways return Class.forName(className); } else { throw e; } } } }
/** * Write the generated bytecode. */ public void record() throws IOException { if (_managedType != _pc && getRedefine()) record(_managedType); record(_pc); if (_oids != null) for (Iterator itr = _oids.iterator(); itr.hasNext();) record((BCClass) itr.next()); }
for (Iterator iter = classes.iterator(); iter.hasNext(); ) { final Class cls = (Class) iter.next(); final PCEnhancer enhancer = new PCEnhancer(conf, cls); enhancer.setBytecodeWriter(new BytecodeWriter() { public void write(BCClass bc) throws IOException { ManagedClassSubclasser.write(bc, enhancer, map, enhancer.setRedefine(true); enhancer.setCreateSubclass(true); enhancer.setAddDefaultConstructor(true); configureMetaData(enhancer.getMetaData(), conf, redefine, false); unspecified = collectRelatedUnspecifiedTypes(enhancer.getMetaData(), classes, unspecified); int runResult = enhancer.run(); if (runResult == PCEnhancer.ENHANCE_PC) { try { enhancer.record(); } catch (IOException e) {
return null; PCEnhancer enhancer = new PCEnhancer(_repos.getConfiguration(), new Project().loadClass(new ByteArrayInputStream(bytes), _tmpLoader), _repos); enhancer.setAddDefaultConstructor(_flags.addDefaultConstructor); enhancer.setEnforcePropertyRestrictions (_flags.enforcePropertyRestrictions); if (enhancer.run() == PCEnhancer.ENHANCE_NONE) return null; return enhancer.getPCBytecode().toByteArray(); } catch (Throwable t) { _log.warn(_loc.get("cft-exception-thrown", className), t);
else bc = project.loadClass((Class) o); enhancer = new PCEnhancer(conf, bc, repos, loader); if (writer != null) enhancer.setBytecodeWriter(writer); enhancer.setDirectory(flags.directory); enhancer.setAddDefaultConstructor(flags.addDefaultConstructor); status = enhancer.run(); if (status == ENHANCE_NONE) { if (log.isTraceEnabled()) } else if (status == ENHANCE_AWARE) { persAwareClasses.add(o); enhancer.record(); } else { enhancer.record();
public boolean run(Options opts) throws IOException { OpenJPAConfiguration conf = new OpenJPAConfigurationImpl(); try { return PCEnhancer.run(conf, args, opts); } finally { conf.close(); } } });
PCEnhancer enhancer = new PCEnhancer(_repos, bc, meta); int result = enhancer.run(); if (result != PCEnhancer.ENHANCE_PC) throw new InternalException(_loc.get("interface-badenhance",
/** * If <code>className</code> is a dynamically-created persistence-capable * subclass name, returns the name of the class that it subclasses. * Otherwise, returns <code>className</code>. * * @since 1.1.0 */ public static String toManagedTypeName(String className) { if (isPCSubclassName(className)) { className = className.substring( Strings.getPackageName(PCEnhancer.class).length() + 1); className = className.substring(0, className.lastIndexOf("$")); // this is not correct for nested PCs className = className.replace('$', '.'); } return className; }
for (Iterator iter = classes.iterator(); iter.hasNext(); ) { final Class cls = (Class) iter.next(); final PCEnhancer enhancer = new PCEnhancer(conf, cls); enhancer.setBytecodeWriter(new BytecodeWriter() { public void write(BCClass bc) throws IOException { ManagedClassSubclasser.write(bc, enhancer, map, enhancer.setRedefine(true); enhancer.setCreateSubclass(true); enhancer.setAddDefaultConstructor(true); configureMetaData(enhancer.getMetaData(), conf, redefine, false); unspecified = collectRelatedUnspecifiedTypes(enhancer.getMetaData(), classes, unspecified); int runResult = enhancer.run(); if (runResult == PCEnhancer.ENHANCE_PC) { try { enhancer.record(); } catch (IOException e) {
return null; PCEnhancer enhancer = new PCEnhancer(_repos.getConfiguration(), new Project().loadClass(new ByteArrayInputStream(bytes), _tmpLoader), _repos); enhancer.setAddDefaultConstructor(_flags.addDefaultConstructor); enhancer.setEnforcePropertyRestrictions (_flags.enforcePropertyRestrictions); if (enhancer.run() == PCEnhancer.ENHANCE_NONE) return null; return enhancer.getPCBytecode().toByteArray(); } catch (Throwable t) { _log.warn(_loc.get("cft-exception-thrown", className), t);
else bc = project.loadClass((Class) o); enhancer = new PCEnhancer(conf, bc, repos, loader); if (writer != null) enhancer.setBytecodeWriter(writer); enhancer.setDirectory(flags.directory); enhancer.setAddDefaultConstructor(flags.addDefaultConstructor); status = enhancer.run(); if (status == ENHANCE_NONE) { if (log.isTraceEnabled()) } else if (status == ENHANCE_AWARE) { persAwareClasses.add(o); enhancer.record(); } else { enhancer.record();
public boolean run(Options opts) throws IOException { OpenJPAConfiguration conf = new OpenJPAConfigurationImpl(); try { return PCEnhancer.run(conf, args, opts); } finally { conf.close(); } } });
PCEnhancer enhancer = new PCEnhancer(_repos, bc, meta); int result = enhancer.run(); if (result != PCEnhancer.ENHANCE_PC) throw new InternalException(_loc.get("interface-badenhance",
/** * If <code>className</code> is a dynamically-created persistence-capable * subclass name, returns the name of the class that it subclasses. * Otherwise, returns <code>className</code>. * * @since 1.1.0 */ public static String toManagedTypeName(String className) { if (isPCSubclassName(className)) { className = className.substring( ClassUtil.getPackageName(PCEnhancer.class).length() + 1); className = className.substring(0, className.lastIndexOf("$")); // this is not correct for nested PCs className = className.replace('$', '.'); } return className; }
for (Iterator iter = classes.iterator(); iter.hasNext(); ) { final Class cls = (Class) iter.next(); final PCEnhancer enhancer = new PCEnhancer(conf, cls); enhancer.setBytecodeWriter(new BytecodeWriter() { public void write(BCClass bc) throws IOException { ManagedClassSubclasser.write(bc, enhancer, map, enhancer.setRedefine(true); enhancer.setCreateSubclass(true); enhancer.setAddDefaultConstructor(true); configureMetaData(enhancer.getMetaData(), conf, redefine, false); unspecified = collectRelatedUnspecifiedTypes(enhancer.getMetaData(), classes, unspecified); int runResult = enhancer.run(); if (runResult == PCEnhancer.ENHANCE_PC) { try { enhancer.record(); } catch (IOException e) {
return null; PCEnhancer enhancer = new PCEnhancer(_repos.getConfiguration(), new Project().loadClass(new ByteArrayInputStream(bytes), _tmpLoader), _repos); enhancer.setAddDefaultConstructor(_flags.addDefaultConstructor); enhancer.setEnforcePropertyRestrictions (_flags.enforcePropertyRestrictions); if (enhancer.run() == PCEnhancer.ENHANCE_NONE) return null; return enhancer.getPCBytecode().toByteArray(); } catch (Throwable t) { _log.warn(_loc.get("cft-exception-thrown", className), t);
else bc = project.loadClass((Class) o); enhancer = new PCEnhancer(conf, bc, repos, loader); if (writer != null) enhancer.setBytecodeWriter(writer); enhancer.setDirectory(flags.directory); enhancer.setAddDefaultConstructor(flags.addDefaultConstructor); status = enhancer.run(); if (status == ENHANCE_NONE) { if (log.isTraceEnabled()) } else if (status == ENHANCE_AWARE) { persAwareClasses.add(o); enhancer.record(); } else { enhancer.record();
private static void write(BCClass bc, PCEnhancer enhancer, Map<Class, byte[]> map, Class cls, List subs, List ints) throws IOException { if (bc == enhancer.getManagedTypeBytecode()) { // if it was already defined, don't put it in the map, // but do set the metadata accordingly. if (enhancer.isAlreadyRedefined()) ints.add(bc.getType()); else if (JavaVersions.VERSION >= 5) map.put(bc.getType(), bc.toByteArray()); } else { if (!enhancer.isAlreadySubclassed()) { // this is the new subclass ClassLoader loader = GeneratedClasses.getMostDerivedLoader( cls, PersistenceCapable.class); subs.add(GeneratedClasses.loadBCClass(bc, loader)); } } }
public boolean run(Options opts) throws IOException { OpenJPAConfiguration conf = new OpenJPAConfigurationImpl(); try { return PCEnhancer.run(conf, args, opts); } finally { conf.close(); } } });