Получение DataSource через JNDI

243
25 ноября 2017, 10:15

Читаю книгу по JPA и Hibernate. В ней дан примерно такой пример:

<persistence-unit name="HelloWorldPU" >
    <jta-data-source>myDS</jta-data-source>
    <class>org.faoxis.Message</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="java.persistence.schema-generation.database.action" value="drop-and-create" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.use_sql_comments" value="true" />
    </properties>
</persistence-unit>

Если сразу запустить, то получу ошибку:

Caused by: org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [myDS]
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:124)
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:95)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:98)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
    ... 14 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
    at javax.naming.InitialContext.getNameParser(InitialContext.java:505)
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:118)
    ... 24 more

В книге написано, что DataSource будет легко найден через JNDI. Не понимаю как это работает. Как мне создать этот DataSource, чтобы его потом можно было найти через JNDI?

Я сделал DataSource:

public class DataSourceFactory {
    public static DataSource getPostgresDataSource() {
        Properties properties = new Properties();
        FileInputStream fis = null;
        PGSimpleDataSource pgSimpleDataSource = null;
        try {
            fis = new FileInputStream("db.properties");
            properties.load(fis);
            pgSimpleDataSource = new PGSimpleDataSource();
            pgSimpleDataSource.setUrl(properties.getProperty("DB_URL"));
            pgSimpleDataSource.setUser(properties.getProperty("DB_USERNAME"));
            pgSimpleDataSource.setPassword(properties.getProperty("DB_PASSWORD"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pgSimpleDataSource;
    }
}

Как мне сделать так, чтобы его нашел JNDI?

READ ALSO
Как отобразить содержимое servlet&#39;а?

Как отобразить содержимое servlet'а?

Всем приветВопрос возможно тривиальный, но подскажите, как отобразить сервлет на вебстранице с адресом /hello? С другого сервлета аяксом передается...

227
Хранение данных в андроид

Хранение данных в андроид

пишу приложения и мне нужно будет содержать о юзере данныеНапример имя, избранное , авторизован ли и тд

250
Считывание данных с Option выбранного Select(Java)

Считывание данных с Option выбранного Select(Java)

Здравствуйте, пишу Java EE приложение и возник вопрос о том, как считать данные из элемента HTML - выбранного пользователемДля внешнего вида у меня...

230
Как сохранить SecretKey

Как сохранить SecretKey

Я генерирую случайный ключ шифрования таким способом

226