Datanucleus + OSGi (Equinox) выдает ошибку. Не найден подходящий драйвер для jdbc: mysql: // localhost: 3306 / jdoosgitest - PullRequest
3 голосов
/ 21 марта 2011

Я пытаюсь использовать реализацию datanucleus jdo в среде osgi, но постоянно получаю сообщение об ошибке: Не найден подходящий драйвер для jdbc: mysql: // localhost: 3306 / jdoosgitest

Я перешел по ссылкеhttp://www.datanucleus.org/servlet/wiki/display/USERS/HOWTO+Use+Datanucleus+with+OSGi+and+Spring+DM

Но я не хочу использовать SpringDM.Во-первых, потому что я не знаю Spring и я новичок в OSGi и JDO.

Подробности среды

DataNucleus Связки и изменения в MANIFEST.MF

datanucleus-api-jdo-3.0.0-m2.jar - Eclipse-BuddyPolicy = зарегистрирован

datanucleus-core-3.0.0-m2.jar - Eclipse-BuddyPolicy = зарегистрирован

datanucleus-rdbms-3.0.0-m2.jar - Eclipse-BuddyPolicy = зарегистрирован

jdo-api-3.0.jar - Eclipse-BuddyPolicy = зарегистрирован

Eclipse Bundle And Equinox

org.eclipse.core.contenttype_3.4.1.R35x_v20090826-0451.jar org.eclipse.core.jobs_3.4.100.v20090429-1800.jar org.eclipse.core.runtime_3.5.0.v20090g25.jar.eclipse.equinox.app_1.2.1.R35x_v20091203.jar org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.jar org.eclipse.equinox.preferences_3.2.301.R35ec.4v20091117.xip.egv20090520-1800.jar org.eclipse.osgi_3.5.2.R35x_v20100126.jar org.eclipse.osgi.services_3.2.0.v20090520-1800.jar

MyBundle: TestJdoOSGi

Другая используемая библиотека TestJdoOSGi / lib / mysql-connector-java-5.1.14-bin.jar

TestJdoOSGi / META-INF / MANIFEST.MF -

Eclipse-RegisterBuddy= org.datanucleus.store.rdbms, javax.jdo, org.datanucleus.api.jdo, org.datanucleus

Bundle-ClassPath= bin, lib/mysql-connector-java-5.1.14-bin.jar

Метод, который получает фабрику PersistenceManager

public PersistenceManagerFactory createPMF()
{
        Map defaultProps = new HashMap();
        defaultProps.put("javax.jdo.PersistenceManagerFactoryClass", "org.datanucleus.api.jdo.JDOPersistenceManagerFactory");
        defaultProps.put("datanucleus.metadata.validate", "false");

        defaultProps.put("javax.jdo.option.ConnectionDriverName", "org.gjt.mm.mysql.Driver");

        defaultProps.put("javax.jdo.option.ConnectionURL", "jdbc:mysql://localhost:3306/jdoosgitest");
        defaultProps.put("javax.jdo.option.ConnectionUserName", "root");
        defaultProps.put("javax.jdo.option.ConnectionPassword", "root");
        defaultProps.put("javax.jdo.option.Mapping", "mysql");
        defaultProps.put("datanucleus.autoCreateSchema", "true");
        defaultProps.put("datanucleus.validateTables", "false");
        defaultProps.put("datanucleus.validateConstraints", "false");

        ClassLoader dirverClassLoader = null;
        try {
            dirverClassLoader = Activator.bundleContext.getBundle().loadClass("test.jdo.osgi.MyTest").getClassLoader();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        defaultProps.put("datanucleus.primaryClassLoader", dirverClassLoader);

        ClassLoader factoryClassLoader = getFactoryClassLoader();
        PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(defaultProps, factoryClassLoader);

        return pmf;
}

private ClassLoader getFactoryClassLoader() {
        ClassLoader classloader = null;
        Bundle[] bundles = Activator.bundleContext.getBundles();

        for (int x = 0; x < bundles.length; x++) {

            if ("org.datanucleus.api.jdo".equals(bundles[x].getSymbolicName())) {
                try {
                    classloader = bundles[x].loadClass("org.datanucleus.api.jdo.JDOPersistenceManagerFactory").getClassLoader();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                break;
            }
        }

        return classloader;
    }
...