Я настраиваю имя JNDI источника данных для моих 3 различных профилей (Dev, UAT, Prod).
У меня есть:
- В родительском пом, У меня есть 3 профиля в этом я использую пользовательскую переменную
<mydatasource.name>jdbc/datasourceDev</mydatasource.name>
- Сконфигурированный context.xml (src / main / webapp / META-INF / context.xml), как показано ниже
- Сконфигурированоweb.xml
- Настроенный applicationContext.xml
- Настроенный persistence.xml
- Настроенный MyProjectWeb pom.xml
- Настроенный server.xml (Tomcat)
parent pom.xml
<profile>
<id>build-local-postgresql</id>
<properties>
<war.name>MyProjectPostgresWebDev</war.name>
<build.name>My Project Postgres dev</build.name>
<env>../MyProjectShared/src/main/resources/env/local/common.local.properties</env>
<mydatasource.name>jdbc/datasourceDev</mydatasource.name>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>build-local-postgresql</id>
<properties>
<war.name>MyProjectPostgresWebUAT</war.name>
<build.name>My Project Postgres dev</build.name>
<env>../MyProjectShared/src/main/resources/env/local/common.local.properties</env>
<mydatasource.name>jdbc/datasourceUat</mydatasource.name>
</properties>
</profile>
<profile>
<id>build-local-postgresql</id>
<properties>
<war.name>MyProjectPostgresWebPrd</war.name>
<build.name>My Project Postgres dev</build.name>
<env>../MyProjectShared/src/main/resources/env/local/common.local.properties</env>
<mydatasource.name>jdbc/datasourcePrd</mydatasource.name>
</properties>
</profile>
context.xml
<Context path="/${war.name}">
<ResourceLink name="jdbc/postgres"
global="${mydatasource.name}"
auth="Container"
type="javax.sql.DataSource" />
</Context>
web.xml
<resource-ref>
<description>DB Connection Web</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
applicationContext.xml
<bean id="databaseName" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/postgres"/>
</bean>
............................................. ..................................
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="dataSource" ref="databaseName" />
</bean>
persistence.xml
<jta-data-source>java:comp/env/jdbc/postgres</jta-data-source>
MyProjectWeb pom.xml
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<webResource>
<directory>src/main/webapp/WEB-INF</directory>
<includes>
<include>/web.xml</include>
</includes>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
</webResource>
<webResource>
<directory>src/main/webapp/META-INF</directory>
<includes>
<include>/context.xml</include>
</includes>
<filtering>true</filtering>
<targetPath>META-INF</targetPath>
</webResource>
</webResources>
</configuration>
</plugin>
</plugins>
server.xml
<Resource name="jdbc/datasourceDev"
global="jdbc/datasourceDev"
username="postgres"
password="magerna"
type="javax.sql.DataSource"
auth="Container"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/postgres?currentSchema=mydevdb"
maxActive="30"
maxIdle="5"
maxWait="10000"/>
Я получаю сообщение об ошибке, которое определено внутри context.xml для атрибута глобального имени:
Вызывается: javax.naming.NameNotFoundException: имя [$ {mydatasource.name}] не связано в этом контексте. Невозможно найти [$ {mydatasource.name}].
Не могли бы вы помочь мне с этим вопросом.
Заранее спасибо.