Как получить доступ к пользовательской переменной из родительского pom в src / main / webapp / META-INF / context.xml - PullRequest
0 голосов
/ 08 ноября 2019

Я настраиваю имя JNDI источника данных для моих 3 различных профилей (Dev, UAT, Prod).

У меня есть:

  1. В родительском пом, У меня есть 3 профиля в этом я использую пользовательскую переменную <mydatasource.name>jdbc/datasourceDev</mydatasource.name>
  2. Сконфигурированный context.xml (src / main / webapp / META-INF / context.xml), как показано ниже
  3. Сконфигурированоweb.xml
  4. Настроенный applicationContext.xml
  5. Настроенный persistence.xml
  6. Настроенный MyProjectWeb pom.xml
  7. Настроенный 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}].

Не могли бы вы помочь мне с этим вопросом.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...