Spec-Zone .ru
спецификации, руководства, описания, API
|
Есть несколько путей, которыми создается соединение. Наиболее распространенный способ от создания начального контекста. Когда Вы создаете InitialContext,
Если значение свойства содержит больше чем один URL, то каждый URL пробуют поочередно, пока каждый не используется, чтобы создать успешное соединение. Значение свойства тогда обновляется, чтобы быть успешным URL. См. Учебное руководство JNDI для примера того, как создать начальный контекст, используя список URL.
Есть три других прямых пути, которыми создается соединение.
Экземпляры Context и
Вот an example
.
// Create initial context DirContext ctx = new InitialDirContext(env); // Get a copy of the same context Context ctx2 = (Context)ctx.lookup(""); // Get a child context Context ctx3 = (Context) ctx.lookup("ou=NewHires");
В этом примере ctx, ctx2, и ctx3 совместно используют то же самое соединение.
Совместное использование делается независимо от того, как экземпляр Context появился. Например, экземпляр Context, полученный следующим отсылка, совместно использует то же самое соединение как отсылка.
Когда Вы изменяете Context свойства среды экземпляра, которые связываются с соединением, таким как основное имя или учетные данные пользователя, экземпляр Context, на котором Вы производите эти изменения, получит свое собственное соединение (если соединение будет совместно использовано). экземпляры Context, которые получаются из этого экземпляра Context в будущем, совместно используют это новое соединение. на экземпляры Context, которые ранее совместно использовали старое соединение, не влияют (то есть, они продолжают использовать старое соединение).
Вот an example
это использует два соединения.
// Create initial context (first connection) DirContext ctx = new InitialDirContext(env); // Get a copy of the same context DirContext ctx2 = (DirContext)ctx.lookup(""); // Change authentication properties in ctx2 ctx2.addToEnvironment(Context.SECURITY_PRINCIPAL, "cn=C. User, ou=NewHires, o=JNDITutorial"); ctx2.addToEnvironment(Context.SECURITY_CREDENTIALS, "mysecret"); // Method on ctx2 will use new connection System.out.println(ctx2.getAttributes("ou=NewHires"));
ctx2 первоначально совместно использует то же самое соединение с ctx. Но когда его принципал и свойства пароля изменяются, это больше не может использовать соединение ctx. Провайдер LDAP автоматически создаст новое соединение для ctx2.
Точно так же, если Вы будете использовать LdapContext.reconnect(), чтобы изменить средства управления соединением экземпляра Context, то экземпляр Context получит свое собственное соединение, если соединение совместно использовалось.
Если соединение экземпляра Context не совместно использовалось (то есть, никакой Context s не был получен из него), то изменения к его среде или средствам управления соединением не будут заставлять новое соединение создаваться. Вместо этого любые изменения, относящиеся к соединению, будут применены к существующему соединению.
Не все создания соединения успешны. Если провайдер LDAP не может установить соединение в пределах определенного периода тайм-аута, он прерывает попытку подключения. По умолчанию этот период тайм-аута является сетью (TCP) значение тайм-аута, которое находится в порядке нескольких минут. Чтобы изменить период тайм-аута, Вы используете свойство среды "com.sun.jndi.ldap.connect.timeout". Значение этого свойства является строковым представлением целого числа, представляющего тайм-аут соединения в миллисекундах.
Вот an example
.
// Set up environment for creating initial context Hashtable env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial"); // Specify timeout to be 5 seconds env.put("com.sun.jndi.ldap.connect.timeout", "5000"); // Create initial context DirContext ctx = new InitialDirContext(env); // do something useful with ctx
В этом примере, если соединение не может быть создано в течение 5 секунд, будет выдано исключение.
Если свойство Context.PROVIDER_URL будет содержать больше чем один URL, то провайдер будет использовать тайм-аут для каждого URL. Например, если будет 3 URL, и тайм-аут был определен, чтобы быть 5 секундами, то провайдер будет ожидать максимума 15 секунд всего.
См., что Соединение Объединяет раздел в пул для информации о том, как это свойство влияет на объединение в пул соединения.