jBPM3.2.2ソース分析---org.jbpm.db*
パッケージ名から、このパッケージの類似性はデータベースに関連していることがわかります....
/* *jBPM3.2.2*/クラスリスト:-contextSession.java -GraphSession.java -Hibernate.queries.hbm.xml -JbpmSchema.java -JbpmSession.java -JbpmSessionFactory.java -JobSession.java -LoggingSession.java -TaskMgmtSession.JAva--hibernate包下---AccessType.java ---ConverterEnumType.java ---Converters.java ---HibernateHelper.java ---jbpm.converter.properties ---JbpmNamingStrategy.java ---StringMax.java --compatibility ---JbpmSchemaUpdate.java
まずSession類の山を見てみましょう
名前から見ると、JbpmSessioFactoryはsession工場で、中にはsessionに関する方法がいくつか提供されています.Hibernateを遊んだことがある人はこのクラスをよく知っているはずです(HibernateのsessionFactory)、ここではあまり言わないで、getInstance()という方法を見てみましょう.
getInstance()は静的メソッドで、JbpmSessionFactoryインスタンスを返します.コードは次のとおりです.
JbpmSessionはHibernateのSessionのパッケージです.GraphSessionこれは私たちが最も長く使っているsessionです.プロセス定義の配置、プロセス定義の検索、プロセスインスタンスのロードなど、特に役に立ちます.では、よく分析してください.
まず、導入プロセス定義の方法を見てみましょう.
findLatestProcessDefinition()という方法を見てみましょう.
他の方法は多く言わないで、大同小異です.
ContextSessionは2つのコンストラクション関数のみを提供します.LoggingSessionはログの保存、ロード、クエリーを担当し、コードを見てみましょう.loadProcesslog()方法:
TaskMgmtSessionはタスクインスタンスを検索、ロードするsessionであり、タスクインスタンスを検索、ロードするために様々な方法を提供し、方法は他のsessionの方法と差が少なく、検索中はくどくない.
次に、sessionFactory、configurationのいくつかの操作を提供するHibernateHelper(Hibernateアシスタント)を見てみましょう.clearHibernateCache()メソッドのコードを見てみましょう.
JbpmNamingStrategy(jbpmネーミングポリシークラス)は、属性、テーブル、フィールドのネーミングを提供するJbpmネーミングクラスです.
/* *jBPM3.2.2*/クラスリスト:-contextSession.java -GraphSession.java -Hibernate.queries.hbm.xml -JbpmSchema.java -JbpmSession.java -JbpmSessionFactory.java -JobSession.java -LoggingSession.java -TaskMgmtSession.JAva--hibernate包下---AccessType.java ---ConverterEnumType.java ---Converters.java ---HibernateHelper.java ---jbpm.converter.properties ---JbpmNamingStrategy.java ---StringMax.java --compatibility ---JbpmSchemaUpdate.java
まずSession類の山を見てみましょう
名前から見ると、JbpmSessioFactoryはsession工場で、中にはsessionに関する方法がいくつか提供されています.Hibernateを遊んだことがある人はこのクラスをよく知っているはずです(HibernateのsessionFactory)、ここではあまり言わないで、getInstance()という方法を見てみましょう.
getInstance()は静的メソッドで、JbpmSessionFactoryインスタンスを返します.コードは次のとおりです.
public static JbpmSessionFactory getInstance() {
if (instance==null) {
// Jndi
if (jndiName!=null) {
try {
// fetch the JbpmSessionFactory from JNDI
log.debug("fetching JbpmSessionFactory from '"+jndiName+"'");
//
InitialContext initialContext = new InitialContext();
// jndiName
Object o = initialContext.lookup(jndiName);
// o JbpmSessionFactory
instance = (JbpmSessionFactory) PortableRemoteObject.narrow(o, JbpmSessionFactory.class);
} catch (Exception e) {
throw new JbpmException("couldn't fetch JbpmSessionFactory from jndi '"+jndiName+"'");
}
} else { // else there is no JNDI name configured
// create a new default instance.
log.debug("building singleton JbpmSessionFactory");
// jndi , session
instance = buildJbpmSessionFactory();
}
}
// session
return instance;
}
JbpmSessionはHibernateのSessionのパッケージです.GraphSessionこれは私たちが最も長く使っているsessionです.プロセス定義の配置、プロセス定義の検索、プロセスインスタンスのロードなど、特に役に立ちます.では、よく分析してください.
まず、導入プロセス定義の方法を見てみましょう.
public void deployProcessDefinition(ProcessDefinition processDefinition) {
//
String processDefinitionName = processDefinition.getName();
//
if (processDefinitionName!=null) {
//
ProcessDefinition previousLatestVersion = findLatestProcessDefinition(processDefinitionName);
//
if (previousLatestVersion!=null) {
//
processDefinition.setVersion( previousLatestVersion.getVersion()+1 );
} else {
// , 1
processDefinition.setVersion(1);
}
// Jbpm
session.save(processDefinition);
} else {
throw new JbpmException("process definition does not have a name");
}
}
findLatestProcessDefinition()という方法を見てみましょう.
public ProcessDefinition findLatestProcessDefinition(String name) {
ProcessDefinition processDefinition = null;
try {
// hibernate.queries.hbm.xml (hibernate.queries.hbm.xml session hql )
Query query = session.getNamedQuery("GraphSession.findLatestProcessDefinitionQuery");
query.setString("name", name);
query.setMaxResults(1);
processDefinition = (ProcessDefinition) query.uniqueResult();
} catch (Exception e) {
System.out.flush();
System.err.flush();
try {
Thread.sleep(200);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
e.printStackTrace(); log.error(e);
System.out.flush();
System.err.flush();
jbpmSession.handleException();
throw new JbpmException("couldn't find process definition '" + name + "'", e);
}
return processDefinition;
}
他の方法は多く言わないで、大同小異です.
ContextSessionは2つのコンストラクション関数のみを提供します.LoggingSessionはログの保存、ロード、クエリーを担当し、コードを見てみましょう.loadProcesslog()方法:
public ProcessLog loadProcessLog(long processLogId) {
ProcessLog processLog = null;
try {
// ID processLogId
processLog = (ProcessLog) session.load(ProcessLog.class, new Long(processLogId));
} catch (Exception e) {
log.error(e);
jbpmSession.handleException();
throw new JbpmException("couldn't load process log '"+processLogId+"'", e);
}
return processLog;
TaskMgmtSessionはタスクインスタンスを検索、ロードするsessionであり、タスクインスタンスを検索、ロードするために様々な方法を提供し、方法は他のsessionの方法と差が少なく、検索中はくどくない.
次に、sessionFactory、configurationのいくつかの操作を提供するHibernateHelper(Hibernateアシスタント)を見てみましょう.clearHibernateCache()メソッドのコードを見てみましょう.
public static void clearHibernateCache(SessionFactory sessionFactory) {
//
sessionFactory.evictQueries();
// Map
Map classMetadata = sessionFactory.getAllClassMetadata();
Iterator iter = classMetadata.keySet().iterator();
while (iter.hasNext()) {
String entityName = (String) iter.next();
log.debug("evicting entities "+entityName);
// CLASS
Class entityClass = ClassLoaderUtil.loadClass(entityName);
//
sessionFactory.evict(entityClass);
}
// collection Map
Map collectionMetadata = sessionFactory.getAllCollectionMetadata();
iter = collectionMetadata.keySet().iterator();
while (iter.hasNext()) {
String collectionName = (String) iter.next();
log.debug("evicting collection "+collectionName);
//
sessionFactory.evictCollection(collectionName);
}
}
JbpmNamingStrategy(jbpmネーミングポリシークラス)は、属性、テーブル、フィールドのネーミングを提供するJbpmネーミングクラスです.