2011-07-11 5 views
7

Jestem nowy w konfigurowaniu zasobów JNDI i konfigurowaniu zasobów JNDI w Tomcat.Jak skonfigurować <Resource> w Tomcat 7, aby nie było potrzeby używania "java:/comp/env" w kodzie?

Odziedziczyłem aplikację serwletu. Działa na serwerze testowym za pośrednictwem WebLogic. Aplikacja serwletu uzyskuje dostęp do zasobu bazy danych w następujący sposób:

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

Kiedy próbowałem tego w testowym JSP, to nie działa. Mam

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

Jednak udało mi się uczynić pracę Test JSP gdybym zmienił testowy kod JSP tak:

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

mam ten wpis TOMCAT_HOME/conf/context.html (I” m po prostu używając go jako środowiska dev na moim oknie)

<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> 

I mam to w moim 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> 

Czytałem około 10 stackoverflow stron dotyczących pokrewnych problemów, ale nie jestem dość znany z konfigurowania zasobów JNDI, aby streścić te rozwiązania mojego problemu.

Jak mogę zmienić sposób, w jaki mam zainstalowany Tomcat 7, aby umożliwić istniejącej aplikacji serwletu dostęp do jej bazy danych jako "myDatabaseName"? Nie mam możliwości zmiany kodu w aplikacji serwletu ani zmiany sposobu konfiguracji WebLogic na serwerze testowym.

Potrzebuję zmienić sposób, w jaki moja kopia Tomcat 7 jest skonfigurowana na moim komputerze (dla środowiska dev), aby umożliwić aplikacji serwletu dostęp do jej bazy danych w stylu pierwszego fragmentu cytowanego kodu na górze tego postu.

Odpowiedz

1

Przy konfiguracji, które podałeś powinieneś być w stanie wykonać następujące czynności:

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

PO mówi, że nie można zmienić istniejący kod, który jest zakodowanego tylko 'ctx.lookup („myDataBaseName”)', muszą zmienić konfigurację Tomcat w celu wyeliminowania potrzeba 'java:/com/env /' –

+0

@Jarrod Roberso: Trudno, jak sądzę. – Olaf

1

widzę 2 mozliwosci tutaj:

wdrożyć InitialContextFactory i udostępnić go Tomcat (za pośrednictwem właściwości systemowej), dzięki czemu new InitialContext() podaje kontekst, w którym będzie działał odnośnik.

lub

Bind źródło danych do innego miejsca w JNDI, która faktycznie działa, choć nie jest ani zalecane ani udokumentowane (kocur FM stwierdza drzewo jest tylko do odczytu, który tylko wydaje się zastosowanie do java poddrzewa:/comp/env):

Context ctx = new InitialContext(); 
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/myDataBaseName"); 
ctx.bind("myDataBaseName", ds); 
Powiązane problemy