Как настроить <Resource>в Tomcat 7, чтобы мне не нужно было использовать «java: / comp / env» в коде? - PullRequest
7 голосов
/ 11 июля 2011

Я новичок в настройке ресурсов JNDI и настройке ресурсов JNDI в Tomcat.

Я унаследовал приложение сервлета.Он работает на тестовом сервере через WebLogic.Приложение сервлета обращается к своему ресурсу базы данных следующим образом:

ctx  = new InitialContext();
ds   = (javax.sql.DataSource)ctx.lookup("myDataBaseName"); 
conn = ds.getConnection();

Когда я пробовал это в тестовой JSP, это не работает.Я получаю

javax.naming.NameNotFoundException: Name myDataBaseName is not bound in this Context

Однако я смог заставить тестовую JSP работать, если я изменил тестовый код JSP таким образом:

ctx  = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
ds   = (DataSource)envContext.lookup("myDataBaseName");
conn = ds.getConnection();

У меня есть эта запись в TOMCAT_HOME / conf / context.html (я просто использую его в качестве среды разработки на своем компьютере)

<Resource name="myDataBaseName"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@blahblahblah:1521:database3"
        username="joeuser"
        password="password"
        maxActive="20"
        maxIdle="30"
        maxWait="-1"/>

</Context>

И у меня есть это в моем TOMCAT_HOME / conf / web.xml:

<resource-ref>
    <res-ref-name>myDataBaseName</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Я прочиталоколо 10 страниц stackoverflow по связанным проблемам, но я недостаточно знаком с настройкой ресурсов JNDI, чтобы абстрагировать эти решения моей проблемы.

Как я могу изменить способ настройки Tomcat 7, чтобы разрешить существующий сервлетприложение для доступа к своей базе данных как «myDatabaseName»?У меня нет возможности изменить код в приложении сервлета или изменить способ настройки WebLogic на тестовом сервере.

Мне нужно изменить способ установки моей копии Tomcat 7 на моем компьютере (для среды разработки), чтобы приложение сервлета могло обращаться к своей базе данных в стиле первого куска цитируемогокод в верхней части этого поста.

Ответы [ 2 ]

1 голос
/ 09 апреля 2013

Я вижу здесь 2 возможности:

Реализация InitialContextFactory и предоставление его в распоряжение tomcat (через системное свойство), чтобы new InitialContext() давал вам контекст, с которым будет работать поиск.

или

Привязать источник данных к другому месту в JNDI, что на самом деле работает, хотя это не рекомендуется и не документировано (tomcat FM сообщает, что дерево доступно только для чтения, что, по-видимому, применимо только к поддереву java: / comp / env):

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/myDataBaseName");
ctx.bind("myDataBaseName", ds);
1 голос
/ 11 июля 2011

С предоставленной вами конфигурацией вы сможете выполнять следующие действия:

    ctx  = new InitialContext();
ds   = (DataSource)ctx.lookup("java:/comp/env/myDataBaseName");
conn = ds.getConnection();
...