package pt.ist.fenixframework.pstm; import org.apache.ojb.broker.metadata.ConnectionPoolDescriptor; import org.apache.ojb.broker.metadata.JdbcConnectionDescriptor; import org.apache.ojb.broker.metadata.SequenceDescriptor; import org.apache.ojb.broker.util.configuration.impl.OjbConfiguration; import pt.ist.fenixframework.FenixFramework; import pt.ist.fenixframework.backend.fenixjvstm.FenixJvstmConfig; public class MetadataManager { private static MetadataManager instance; private org.apache.ojb.broker.metadata.MetadataManager ojbMetadataManager; private MetadataManager(final FenixJvstmConfig config) { try { // create the OJB's MetadataManager, but use the correct // OJB.properties file System.setProperty(OjbConfiguration.OJB_PROPERTIES_FILE, "pt/ist/fenixframework/OJB.properties"); this.ojbMetadataManager = org.apache.ojb.broker.metadata.MetadataManager.getInstance(); // config the OJB's database descriptor JdbcConnectionDescriptor jcd = makeJdbcDescriptor(config); this.ojbMetadataManager.connectionRepository().addDescriptor(jcd); this.ojbMetadataManager.setDefaultPBKey(jcd.getPBKey()); // generate the OJB's mappings OJBMetadataGenerator.updateOJBMappingFromDomainModel(FenixFramework.getDomainModel()); } catch (Exception e) { // transform any exception during the initialization phase into an // Error throw new Error(e); } } public static void init(final FenixJvstmConfig config) { synchronized (MetadataManager.class) { if (instance == null) { instance = new MetadataManager(config); } } } public static org.apache.ojb.broker.metadata.MetadataManager getOjbMetadataManager() { return instance != null ? instance.ojbMetadataManager : null; } public static JdbcConnectionDescriptor makeJdbcDescriptor(FenixJvstmConfig config) { JdbcConnectionDescriptor jcd = new JdbcConnectionDescriptor(); jcd.setJcdAlias("OJB/repository.xml"); jcd.setDefaultConnection(true); jcd.setDbms("MySQL"); jcd.setJdbcLevel("1.0"); jcd.setDriver("com.mysql.jdbc.Driver"); jcd.setProtocol("jdbc"); jcd.setSubProtocol("mysql"); jcd.setDbAlias(config.getDbAlias()); jcd.setUserName(config.getDbUsername()); jcd.setPassWord(config.getDbPassword()); jcd.setEagerRelease(false); jcd.setBatchMode(false); jcd.setUseAutoCommit(2); jcd.setIgnoreAutoCommitExceptions(false); ConnectionPoolDescriptor cpd = jcd.getConnectionPoolDescriptor(); cpd.setMaxActive(61); cpd.setMaxIdle(5); cpd.setMaxWait(5000); cpd.setMinEvictableIdleTimeMillis(600000); cpd.setNumTestsPerEvictionRun(10); cpd.setTestOnBorrow(true); cpd.setTestOnReturn(false); cpd.setTestWhileIdle(false); cpd.setTimeBetweenEvictionRunsMillis(-1L); cpd.setWhenExhaustedAction((byte) 1); cpd.setValidationQuery("select 1"); cpd.setLogAbandoned(false); cpd.setRemoveAbandoned(false); cpd.setRemoveAbandonedTimeout(300); SequenceDescriptor sd = new SequenceDescriptor(jcd); jcd.setSequenceDescriptor(sd); sd.setSequenceManagerClass(org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl.class); sd.addAttribute("grabSize", "200"); return jcd; } }