Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Read XML as Singleton 
:(
    Опции темы
telecom
Дата 3.11.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 9.2.2010

Репутация: нет
Всего: нет



Доброго времени суток.

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

singleton я так сделал: 
Код

import java.util.*;
import java.io.*;

public class Configuration {
    private static Configuration _instance = null;

    private Properties props = null;

    private Configuration() {
         props = new Properties();
     try {
        FileInputStream fis = new FileInputStream(
                    new File(config.xml”));
        props.load(fis);
     }
     catch (Exception e) {
        //
     }
    }

    public synchronized static Configuration getInstance() {
        if (_instance == null)
            _instance = new Configuration();
        return _instance;
    }

    public synchronized String getUrl() {
        String value = null;
        ///////////////////////////////
        return value;
    }
    public synchronized String getDriver() {
        String value = null;
        ///////////////////////////////
        return value;
    }
    public synchronized String getPass() {
        String value = null;
        ///////////////////////////////
        return value;
    }
    public synchronized String getLogin() {
        String value = null;
        ///////////////////////////////
        return value;
    }
}


Хотелось бы разобраться с getUrl() , getDriver и т.д.?????

Вот мой примерный xml: 
Код

<?xml version="1.0" encoding="Windows-1251"?>
<!-- Database configuration -->
<configuration>
<database>
    <driver>mysql</driver>
    <dataURL>localhost</dataURL>
    <userName>root</userName>
    <password>777</password>
</database>
</configuration>

PM MAIL   Вверх
_Y_
Дата 3.11.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Мне кажется, что здесь несколько независимых вопросов:

1. Как сделть Singleton. - Думаю любой ФАК подойдет. Ведь структура Singleton-а не зависит от того содержится в нем XML или нет. Впрочем, сам Singleton может имплементировать интерфейс Document, например (см п.2).

2. Как прочитать XML (и как ее потом использовать, наверное). Мне кажется, что сначала надо выбрать модель. В Java для XML имеются два основных подхода DOM и событийно-ориентированная модель. Судя по тому, что XML документ будет не очень большим - DOM наверное лучше. Смотрите интерфейсы Document, Element, Node, NodeList. Обратите внимение, что эти (или подобные) классы/интерфейсы сужествуют в разных пакетах и работают несколько по-разному (сколь я помню).

3. Разобраться с getUrl, getDriver  - подозреваю, что у Вас это просто GET методы, отдающие информацию, соержащуюся в XML файле. Когда разберетесь со структурой DOM документа, будет сразу понятно как их сделать.


Это сообщение отредактировал(а) _Y_ - 3.11.2010, 16:20


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
garbuz
Дата 3.11.2010, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 3
Всего: 11



Что мешает сделать не через xml, а через properties? Гораздо удобнее и проще. Если же использование конфигурации через xml стоит как самоцель, то откройте исходники любой библиотеки, которая использует в качестве своего конфига xml файл, тот же хибернейт или спринг, найдити класс, которые этим занимается и все smile Если же хочется уж совсем все самому, то как верно сказал _Y_, смотрите в сторону dom парсеров, вроде JDom был ничего.
PM MAIL   Вверх
powerOn
Дата 4.11.2010, 01:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Можно распарсить XML с помощью JAXB.
Код

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Configuration
{
    private Database database;

    @XmlElement
    public Database getDatabase()
    {
        return database;
    }

    public void setDatabase(Database database)
    {
        this.database = database;
    }
}


Код

import javax.xml.bind.annotation.XmlElement;

public class Database
{
    private String driver;
    private String dataUrl;
    private String userName;
    private String password;

    @XmlElement
    public String getDataUrl()
    {
        return dataUrl;
    }

    public void setDataUrl(String dataUrl)
    {
        this.dataUrl = dataUrl;
    }

    @XmlElement
    public String getDriver()
    {
        return driver;
    }

    public void setDriver(String driver)
    {
        this.driver = driver;
    }

    @XmlElement
    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    @XmlElement
    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }
}


Код

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class App 
{
    public static void main( String[] args ) throws JAXBException
    {
        // создаем модель
        Configuration configuration = new Configuration();
        Database database = new Database();

        database.setDataUrl("jdbc:derby://localhost:1527/sample");
        database.setDriver("org.apache.derby.jdbc.ClientDriver");
        database.setUserName("root");
        database.setPassword("root");
        configuration.setDatabase(database);

        // готовим контекст JAXB
        JAXBContext context = JAXBContext.newInstance(Configuration.class, Database.class);

        // создаем маршаллер
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // записываем данные в XML.
        StringWriter stringWriter = new StringWriter();
        marshaller.marshal(configuration, stringWriter);
        System.out.println(stringWriter);

        // создаем анмаршаллер и парсим xml.
        Unmarshaller unmarshaller = context.createUnmarshaller();
        Configuration parsedConfiguration =
                (Configuration) unmarshaller.unmarshal(new StringReader(stringWriter.toString()));

        System.out.println(parsedConfiguration.getDatabase().getDataUrl());
        System.out.println(parsedConfiguration.getDatabase().getDriver());
        System.out.println(parsedConfiguration.getDatabase().getUserName());
        System.out.println(parsedConfiguration.getDatabase().getPassword());
    }
}



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1218 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.