Apache Felix не может получить доступ к Postgres JDBC

Я скачал Postgresql-9.2-1003.jdbc3.jar и поместил его в каталог felix\bundle.

Моя программа обращается к EMP таблицы Postgres и печатает ее. Я пытаюсь сделать это на сервере Felix OSGi. Есть две части моей программы:

  1. Программа Part-1, которая просто подключается к драйверу Postgres JDBC и открывает базу данных:

    пакет com.myprogram.myemp;

    импорт java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.postgresql.Driver;

    открытый класс ConnectPostgres {

    static final String DB_URL = "jdbc:postgresql://localhost:5432/scott";
    static final String UNAME = "postgres";
    static final String PWORD = "password";
    
    
    public void myMain() {
        Connection conn = null;
        ResultSet rs = null;
        Statement st = null;
        String JDBC_DRIVER = Driver.class.getName();
    
        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, UNAME, PWORD);
            st = conn.createStatement();
            rs = st.executeQuery("select * from EMP");
            while (rs.next()) {
                System.out.println ("EMP Name:" + rs.getLong("EMPNO") + " " + rs.getString("ENAME") );
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                st.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    }

  2. Программа Part-2 больше похожа на запуск пакета в качестве поставщика услуг:

    пакет com.myprogram.myemp;

    import org.osgi.framework.BundleContext; импорт org.osgi.framework.BundleActivator;

    Открытый класс Activator реализует BundleActivator {

    @Override
    public void start(BundleContext arg0) throws Exception {
        ConnectPostgres app = new ConnectPostgres();
        app.myMain();
    }
    
    @Override
    public void stop(BundleContext arg0) throws Exception {
    }
    

    }

Требование заключается в следующем: используя подключение к базе данных популярной базы данных, такой как Postgres или SQLite, я должен иметь возможность публиковать таблицу EMP в качестве службы на совместимом с OSGi сервере Felix, Equinox.

** Ошибка, которую я получаю в Felix 3.0:

Неудовлетворенные требования:

(& (Упаковка =org.postgresql))**

Драйвер есть, я поместил его в каталог пачки.

Проблема, как мне кажется:

  1. Соединения с базой данных с использованием JDBC невозможны в OSGi. Может ли OSGi подключаться к базам данных? Спецификация, вики, примеры - кажется, все молчат. Без которого все примеры выглядят как программы преобразования температуры по Цельсию в градусы Фаренгейта, не представляющие реальной ценности для бизнеса. Пожалуйста, поправьте меня, если мое понимание OSGi неверно.

  2. Что может быть я делаю не так? Что еще я должен попытаться подключиться к базе данных.

заранее спасибо

2 ответа

JAR-файл Postgresql-9.2-1003.jdbc3.jar, вероятно, не является пакетом OSGI, поэтому вы не можете просто установить его так, как вы это делаете.

Проверьте здесь:

https://ops4j1.jira.com/wiki/display/PAXJDBC/PostgreSQL+Driver+Adapter

Официальный артефакт Maven postgresql:postgresql - это простой старый JAR без заголовков манифеста OSGi. Вам нужно будет обернуть это на лету, используя обработчик Pax URL wrap: или создать свой собственный пакет, добавив манифест OSGi. Этот пробел должен быть заполнен проектом Pax Tipi.

Новейшая версия postgresql (9.4-1201-jdbc41) уже является пакетом OSGi.

Пакеты Servicemix теперь содержат пакетную версию драйвера postgres. Так что вы можете найти драйвер postgres jdbc в центральном репозитории maven.

Другие вопросы по тегам