Как загрузить учетные данные базы данных из файла свойств в JPA? - PullRequest
1 голос
/ 08 июля 2011

Итак, у меня есть приложение Java / JPA2.0 (EclipseLink), которое подключается к базе данных MySQL. Мое намерение - просто передать файл JAR с файлом db.properties. db.properties должен содержать адрес хоста сервера, имя пользователя, пароль и т. Д., Чтобы конечный пользователь мог просто подключить его и начать использовать JAR в своих проектах.

В настоящее время я просто использовал Netbeans для создания persistence.xml файла с учетными данными, и это работает. Но как мне реализовать файл свойств?

Мой класс EntityManager:

public class Factories {

    private static final EntityManagerFactory entityManagerFactory = buildEntityManagerFactory();

        private static EntityManagerFactory buildEntityManagerFactory() {
            try {
                return Persistence.createEntityManagerFactory("MyPU");
            } catch (Exception ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManager getEntityManager() {
        return entityManagerFactory.createEntityManager();
    }
}

Спасибо

1 Ответ

2 голосов
/ 08 июля 2011

Вы можете использовать двухпараметрическую версию метода createEntityManagerFactory().Второй аргумент (карта) может использоваться для передачи свойств, включая учетные данные, в базу данных.Поэтому вы можете передать карту с ключами javax.persistence.jdbc.user и javax.persistence.jdbc.password и соответствующими значениями.

Пример в вики EclipseLink демонстрирует, как этого добиться, хотя он использует классы, предоставленныеEclipseLink для этого:

import static org.eclipse.persistence.config.PersistenceUnitProperties.*;

    ...

    Map properties = new HashMap();

    // Ensure RESOURCE_LOCAL transactions is used.
    properties.put(TRANSACTION_TYPE,
        PersistenceUnitTransactionType.RESOURCE_LOCAL.name());

    // Configure the internal EclipseLink connection pool
    properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
    properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
    properties.put(JDBC_USER, "scott");
    properties.put(JDBC_PASSWORD, "tiger");

    // Configure logging. FINE ensures all SQL is shown
    properties.put(LOGGING_LEVEL, "FINE");
    properties.put(LOGGING_TIMESTAMP, "false");
    properties.put(LOGGING_THREAD, "false");
    properties.put(LOGGING_SESSION, "false");

    // Ensure that no server-platform is configured
    properties.put(TARGET_SERVER, TargetServer.None);

    // Now the EntityManagerFactory can be instantiated for testing using: 
    Persistence.createEntityManagerFactory(unitName, properties);

Обратите внимание, что это также возможно сделать с помощью метода EntityManagerFactory.createEntityManager(), который принимает свойства.Однако, если вы внимательно прочитаете пример аудита EclipseLink , вы заметите, что также создается общий пул соединений (свойства которого получены из файла persistence.xml), и что фактическое используемое соединение будет зависеть от того,Вы выполняете чтение или запись.

...