JNDI tarafından sağlanan ve platformdan bağımsız olması gereken bir özellik dosyasına yüklenmeye çalışıyorum. Weblogic İçinSpring & JNDI: kaynak platformunu bağımsız olarak bulun
: Tomcat için
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
InitialContext context = new InitialContext(properties);
context.lookup(propertiesLocation);
: Ben şu şekillerde yapabiliriz platformda bağımlı biliyorum
Context context = new InitialContext();
Context envCtx = (Context) context.lookup("java:comp/env");
final Object lookup = envCtx.lookup(propertiesLocation);
çekirdek sorundur o Tomcat
java:comp/env/
önekine ihtiyaç vardır. Spring
tüm bu platformu bağımsız olarak yükleyebildiğinden, Spring
benim JNDI
kaynaklarımı yükleme imkanlarını incelemeye çalıştım.
JndiTemplate
kullanabilir tespit:
JndiTemplate jndiTemplate = new JndiTemplate();
Object lookup = jndiTemplate.lookup(propertiesLocation);
Bu tomcat arama sırasında bir ön ek olarak java:comp/env
kullanmaya gerek bağımlı ancak hala bir platformdur.
Yani,Jndi adları veya "java: comp/env /" içeremez olabilir: J2EE uygulamaları tarafından beklenen önek erişirken
StackOverflow
veSpring
javadocs daha baktığımda, aşağıdaki sahiptir sınıfıJndiLocatorSupport
, bulunan yerel olarak eşlenmiş (ENC - Çevresel Adlandırma Bağlamı) kaynağı. Değilse, "resourceRef" özelliği true (varsayılan değer false) ise "java: comp/env /" önekine eklenir ve başka bir şema (ör. "Java:") verilir.
JndiLocatorSupport
uzanan
JndiObjectFactoryBean
oluşturulan
setResourceRef
etkin ama önek görünmüyor.
Çekirdek sorun:
Aşağıdaki kodu kullanarak:
JndiObjectFactoryBean factoryBean = new JndiObjectFactoryBean();
factoryBean.setResourceRef(true);
Object lookup = factoryBean.getJndiTemplate().lookup(propertiesLocation);
Ben aynı etkiye sahip beklersiniz:
JndiObjectFactoryBean factoryBean = new JndiObjectFactoryBean();
Object lookup = factoryBean.getJndiTemplate().lookup("java:comp/env/" + propertiesLocation);
Ama öyle değil. Hiç bir etkisi yok gibi görünüyor. Fakat kaynak koduna bakarsak, şöyle olur: JndiObjectFactoryBean.lookup()
->JndiObjectLocator.lookup()
->JndiLocatorSupport.lookup()
, does call doğru yöntemler.