Apache Felix не может получить доступ к Postgres JDBC
Я скачал Postgresql-9.2-1003.jdbc3.jar и поместил его в каталог felix\bundle.
Моя программа обращается к EMP таблицы Postgres и печатает ее. Я пытаюсь сделать это на сервере Felix OSGi. Есть две части моей программы:
Программа 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(); } } }
}
Программа 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))**
Драйвер есть, я поместил его в каталог пачки.
Проблема, как мне кажется:
Соединения с базой данных с использованием JDBC невозможны в OSGi. Может ли OSGi подключаться к базам данных? Спецификация, вики, примеры - кажется, все молчат. Без которого все примеры выглядят как программы преобразования температуры по Цельсию в градусы Фаренгейта, не представляющие реальной ценности для бизнеса. Пожалуйста, поправьте меня, если мое понимание OSGi неверно.
Что может быть я делаю не так? Что еще я должен попытаться подключиться к базе данных.
заранее спасибо
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.