Вот другой подход.
Попробуйте удалить кластер из программы, которую вы запускаете. Когда вы закончите свои вычисления, пусть ваша программа сама вызовет команду удаления кластера.
print("Try to delete cluster %s " % job_args['cluster_name'] )
result = subprocess.call(['gcloud',
'dataproc',
'clusters',
'delete',
job_args['cluster_name'],
'--quiet',
'--async'])
print("Sent command result: %s" % str(result))
You could have the Class passed as a constructor argument.
public class HibernateDao <T, ID extends Serializable> implements GenericDao<T, ID> {
private final Class<? extends T> type;
public HibernateDao(Class<? extends T> type) {
this.type = type;
}
// ....
}
Есть способ определить класс
аргумента типа T
с помощью отражения:
private Class<T> persistentClass = (Class<T>)
((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Вот как я его использую:
public class GenericDaoJPA<T> implements GenericDao<T> {
@PersistenceContext
protected EntityManager entityManager;
protected Class<T> persistentClass = figureOutPersistentClass();
private Class<T> figureOutPersistentClass() {
Class<T> clazz = (Class<T>)((ParameterizedType) (getClass().getGenericSuperclass())).getActualTypeArguments()[0];
log.debug("persistentClass set to {}", clazz.getName());
return clazz;
}
public List<T> findAll() {
Query q = entityManager.createQuery("SELECT e FROM " + persistentClass.getSimpleName() + " e");
return (List<T>) q.getResultList();
}
}
Я полагаю, это работает, только когда ваш ConcreteEntityDao
является прямым суперклассом HibernateDao
.
Я нашел его здесь: www.greggbolinger .com / blog / 2008/04/17 / 1208457000000.html