2010-11-02 2 views
3

Я читаю на DataSource, here и пытаюсь реализовать его в моем собственном маленьком проекте, используя простой файл в качестве моего «источника данных». Я создал класс, который является довольно просто в данный момент ...Как реализовать getConnection() в DataSource в Java?

public class QueueData implements DataSource { ... } 

хотя причина просто потому, что я не смог найти ресурс, который объясняет, как реализованные методы должны работать. Кажется, все просто перечисляют инициализацию контекста и магический вызов getConnection(), например.

Context ctx = new InitialContext(env1); 
    DataSource ds = (DataSource)ctx.lookup("jdbc/mydatasource"); 
    Connection conn = ds.getConnection(); // Magical method! 

Но может ли кто-нибудь из вас дать мне пример того, как должен выглядеть код внутри getConnection()?

+1

Я думаю, что здесь происходит некоторое замешательство. Что, в конце концов, ваше функциональное требование? Просто подключить конкретную БД с помощью конкретного драйвера JDBC с помощью источника данных? Или вы действительно хотите сделать свой собственный JDBC-драйвер, поскольку ваш вопрос в настоящее время намекает? – BalusC

+1

Всегда обращайтесь к последним документам, чтобы не доводить до конца любой «поэтапный» совет; http://download.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/GettingStartedTOC.fm.html – sasuke

+0

javax.sql.DataSource - это интерфейс, который определяет этот метод. Это задача поставщика драйверов для реализации этого метода. Если вы планируете написать свой собственный драйвер (по какой-либо причине), вам придется реализовать интерфейс. Код внутри getConnection будет зависеть от базовой «базы данных», к которой он устанавливает соединение. – ch4nd4n

ответ

3

Причина, по которой никто не показывает образцы, как реализовать DataSource, а «просто» использует их вместо этого, потому что им нужно написать только поставщики драйверов JDBC (обычно производители баз данных).

Должно быть, конечно, вернуть объект Connection, который также должен быть экземпляром класса, специфичного для драйвера. В вашем случае что-то, что может принимать инструкции SQL для чтения из файла.

Ваш код может выглядеть примерно так:

public Connection getConnection(){ 
     final String fileName = getFileNameFromMyDatabaseUrl(); 
     return new MyFileConnection(new File(fileName)); 
} 

Что, конечно, не очень интересный код, либо.

Вы можете посмотреть на некоторых реализациях с открытым исходным кодом DataSource, чтобы увидеть, что они делают:

  • Apache Commons ДБХП PoolingDataSource (соединение бассейн)
  • Apache Дерби EmbeddedDataSource (встроенная база данных, написанная в Java)
  • BaseDataSource (абстрактный базовый класс для драйвера JDBC Postgresql)
  • PostGreSQL в
+0

Спасибо, это имеет большой смысл. Я попробую этот код, когда вернусь домой. Из любопытства, как вы узнали о классе «MyFileConnection»? Кажется, это мое недостающее звено! – Danny

+0

Это, скорее всего, мое недостающее звено. – Danny

2

Connection является прет убедитесь, что сам интерфейс, который вам также нужно реализовать. Затем ваш getConnection() вернет экземпляр вашего собственного класса. Однако будьте готовы к большой работе ... (например, если вы хотите получить источник данных по контексту, сначала вам необходимо зарегистрировать свою реализацию.)

Почему вы хотите разработать свой собственный DataSource? В Интернете есть очень легкие библиотеки баз данных на основе файлов и in-process (хотя я должен признать, что не знаю их слишком хорошо), например HSQLDB (Wikipedia article), H2 (Wiki) ...

Если вы разрабатывали на C#, я бы также рекомендовал изучить Linq To XML, но я не знаю, нашел ли в мире Java другой пример для этого ...

+0

Спасибо, это полезно. Я не знал, что в Интернете есть легкие библиотеки баз данных на основе файлов. Если вы хотите отправить мне несколько ссылок или слов для поиска, я был бы признателен. – Danny

2

Это не волшебство. Вы извлекаете объект DataSource, который был привязан к серверу JNDI, как правило, при настройке пула подключений на сервере приложений. Эта настройка требует, чтобы вы предоставили все необходимые данные базы данных, такие как URL подключения, учетные данные для проверки подлинности и другие параметры, такие как класс DataSource для этой конкретной базы данных (которая присутствует в драйвере jdbc, который поставляется с этой базой данных). Эта информация об установке используется для создания DataSource, который знает, как передать соединение для данной базы данных.

Предположим, что вы хотите написать свою собственную реализацию, которая дает клиенту соединение NOOP (объект соединения, на котором все операции ничего не дают). Все, что вам нужно сделать, это «зарегистрировать» пользовательскую реализацию DataSource с сервером JNDI-серверов приложений. Этот метод реализации getConnection() просто вернет класс, который реализует интерфейс Connection и методы, которые ничего не делают.

Смежные вопросы