TomcatでJNDIデータソースを削除java:/comp/env/
2369 ワード
Weblogicはtomcatのデータソース構成とは異なり、ローカルで走るたびにデータソース構成を変更しなければなりません.
aaDsをjava:/comp/env/aaDsに変更する
いっそ自分でtomcatをコンパイルして前のjavaを取り除きます:/comp/env/
プロセスは以下の通りである.
Tomcatのソースコードのダウンロードおよびコンパイルはここでは省略する、修正箇所のみを説明する.
org.apache.naming.java.javaURLContextFactoryでgetInitialContextメソッドを変更します.
trueをfalseに変更
public Context getInitialContext(Hashtable environment)
throws NamingException {
if (ContextBindings.isThreadBound() ||
(ContextBindings.isClassLoaderBound())) {
// Redirect the request to the bound initial context
//true false
return new SelectorContext(environment, false);
} else {
// If the thread is not bound, return a shared writable context
if (initialContext == null)
initialContext = new NamingContext(environment, MAIN);
return initialContext;
}
}
org.apache.naming.SelectorContextのparseNameメソッドを変更します.
InitialContextを判断せずに直接nameを返す
protected String parseName(String name)
throws NamingException {
if ((!initialContext) && (name.startsWith(prefix))) {
return (name.substring(prefixLength));
} else {
// initialContext name
// if (initialContext) {
return (name);
/* } else {
throw new NamingException
(sm.getString("selectorContext.noJavaUrl"));
}*/
}
}
org.apache.catalina.core.NamingContextListenerのparseNameメソッドを変更します.
直接namingContextをcompCtxとして取り、envCtxは裏切りません
private void createNamingContext()
throws NamingException {
// Creating the comp subcontext
// namingContext compCtx, envCtx
// if (container instanceof Server) {
compCtx = namingContext;
envCtx = namingContext;
/* } else {
compCtx = namingContext.createSubcontext("comp");
envCtx = compCtx.createSubcontext("env");
}*/
int i;
if (log.isDebugEnabled())
log.debug("Creating JNDI naming context");
if (namingResources == null) {
namingResources = new NamingResources();
namingResources.setContainer(container);
}