Как правильно интегрировать SQLite с моим приложением Java EE? - PullRequest
1 голос
/ 18 января 2011

Я хочу добавить довольно простую базу данных SQLite в существующее приложение Java EE. Я очень привык использовать EJB, ORM, EntityManager и т. Д. Для работы с базами данных SQL. Я никогда не использовал какой-либо ORM для работы с реляционными БД в Java.

Я "рекомендовал" использовать оболочку Java для SQLite , а не драйвер JDBC - так что я вроде голый и без ORM (верно? ). Я хотел бы быстро приступить к работе.

Контекст

Я использовал кэш в памяти, реализованный как Map, который заполняется записями линейно с течением времени. В какой-то момент, например, когда приложение работает в одночасье, кеш будет использовать все доступное пространство кучи. Следовательно, хранение кеша на диске (как база данных SQLite), а не в памяти (как Java Map).

Вопросы

  • Как мне управлять ресурсами, такими как SQLiteConnection? Обычно я позволяю контейнеру беспокоиться обо всем этом, но так как я не использую JDBC, я должен сделать все это ! @ # $% Ing, без добавленной стоимости вещи вручную - верно?
  • Есть ли способ реализовать это чисто и прозрачно ? Я хотел бы иметь возможность просто поменять реализующий класс - например, заменить FooMapCacheImpl на FooSQLiteCacheImpl.
  • "[Большинство] методов ограничены тем потоком, который использовался для открытия соединения". Существует ли простой, простой способ убедиться, что я не пытаюсь получить доступ к SQLiteConnection из темы, кроме той, что ее открыла?
  • ... и обратная сторона вопроса: можно ли избежать создания нового соединения каждый раз, когда я хочу читать / записывать в базу данных? Кажется, добросовестная PITA должна управлять соединениями для каждого потока, а не, скажем, для каждого экземпляра, как я думал об общении с базами данных в прошлом.
* * В основном тысяча сорок-девять

Я довольно растерялся, когда дело доходит до работы с базами данных в Java / Java EE, без использования ORM.
Как правильно это сделать?

Ответы [ 3 ]

3 голосов
/ 18 января 2011

Я не думаю, что слишком сложно создать внешний интерфейс, который бы реализовывал Map, и сохранить все в базе данных, используя JDBC, но перед этим подумайте дважды. Производительность всей системы может сильно пострадать.

Однако, если основной причиной вашей проблемы является нехватка кучи, вам следует взглянуть на Terracotta's BigMemory . Однако это коммерческий (несвободный) продукт.

Terracotta также имеет довольно хорошую инфраструктуру кэширования (ehcache) , которая является открытым исходным кодом. Посмотрите на поваренную книгу, это может быть вдохновляющим.

Если вы хотите сделать все вручную и не возражаете против использования Spring, попробуйте spring-jdbc. Это очень легко интегрировать с любым драйвером JDBC. Взгляните на SimpleJdbcTemplate . Он делает весь код котельной плиты для вас. Вам, вероятно, следует также использовать пул соединений, такой как commons-dbcp

Самым простым в использовании драйвером SQLite JDBC является этот . Поскольку это не зависит от JNI. Это может быть не так быстро, но для быстрого тестирования это идеально.

Если вы не привязаны к SQLite, вы можете взглянуть на другие доступные решения JDBC, такие как hsqldb или derby

Надеюсь, это вам поможет.

1 голос
/ 18 января 2011

Вы также можете посмотреть Berkeley DB Java Edition. Это позволяет вам сохранять объекты Java и управлять ими непосредственно в библиотеке, не требуя ORM (и связанных с этим служебных данных). Он работает на Android, это библиотека Java и может управлять наборами данных размером от очень маленьких до очень больших. Он был разработан с учетом требований разработчиков Java-приложений и должен быть более быстрым и простым в использовании, чем решение ORM + RDBMS. Вы можете узнать больше об этом на нашем веб-сайте по адресу Oracle Berkeley DB Java Edition .

С уважением,

Dave

0 голосов
/ 18 января 2011

Оболочка sqlite4java - это, по сути, обертка JNI, она далеко не та, что вы хотите.ORM, как eclipseLink, в любом случае будет слоем поверх JDBC, и менеджер сущностей всегда будет в конечном итоге использовать JDBC-доступы.

Вместо этого sqlite4java позволяет вам вызывать SQLite в java вместо того, чтобы выполнять все JNI-переносысебя.

Если вы хотите использовать ORM и предпочитаемый вами менеджер сущностей, вам следует использовать драйвер JDBC, а вики-страница sqlite4java ссылается на некоторые из них.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...