You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/05/04 16:04:21 UTC
svn commit: r771309 - in /camel/branches/camel-1.x: ./
components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
Author: davsclaus
Date: Mon May 4 14:04:20 2009
New Revision: 771309
URL: http://svn.apache.org/viewvc?rev=771309&view=rev
Log:
CAMEL-1583: ldap-producer is not thread safe. Applied patch with thanks to Christopher Hunt.
Modified:
camel/branches/camel-1.x/ (props changed)
camel/branches/camel-1.x/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 4 14:04:20 2009
@@ -1 +1 @@
-/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,756939,757636,757693,757743,757865,758539,758563,758600,758617,758692,758990,759362,759453,759887,759931,760003,760890,760909,760937,761194,761536,761583,761607,762047,762633,762650,762935,763095,763484,763551,765154,765686,765729,765743,765824,766016,766289,766584,766588,766590,766602,766673,767403,767824,768342,769239,769346,769368,769434,770172,770906
+/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,756939,757636,757693,757743,757865,758539,758563,758600,758617,758692,758990,759362,759453,759887,759931,760003,760890,760909,760937,761194,761536,761583,761607,762047,762633,762650,762935,763095,763484,763551,765154,765686,765729,765743,765824,766016,766289,766584,766588,766590,766602,766673,767403,767824,768342,769239,769346,769368,769434,770172,770906,771303
Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-1.x/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java?rev=771309&r1=771308&r2=771309&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java (original)
+++ camel/branches/camel-1.x/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java Mon May 4 14:04:20 2009
@@ -18,7 +18,6 @@
import java.util.ArrayList;
import java.util.List;
-
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
@@ -35,14 +34,14 @@
*/
public class LdapProducer<E extends Exchange> extends DefaultProducer<DefaultExchange> {
private static final transient Log LOG = LogFactory.getLog(LdapProducer.class);
- private DirContext ldapContext;
+ private String remaining;
private SearchControls controls;
private String searchBase;
public LdapProducer(LdapEndpoint endpoint, String remaining, String base, int scope) throws Exception {
super(endpoint);
- ldapContext = (DirContext)getEndpoint().getCamelContext().getRegistry().lookup(remaining);
+ this.remaining = remaining;
searchBase = base;
controls = new SearchControls();
controls.setSearchScope(scope);
@@ -51,19 +50,27 @@
public void process(Exchange exchange) throws Exception {
String filter = exchange.getIn().getBody(String.class);
- // could throw NamingException
- List<SearchResult> data = new ArrayList<SearchResult>();
- NamingEnumeration<SearchResult> namingEnumeration =
- ldapContext.search(searchBase, filter, getControls());
-
- while (namingEnumeration.hasMore()) {
- data.add(namingEnumeration.next());
+ // Obtain our ldap context. We do this by looking up the context in our registry.
+ // Note though that a new context is expected each time. Therefore if spring is
+ // being used then use prototype="scope". If you do not then you might experience
+ // concurrency issues as InitialContext is not required to support concurrency.
+ // On the other hand if you have a DirContext that is able to support concurrency
+ // then using the default singleton scope is entirely sufficient. Most DirContext
+ // classes will require prototype scope though.
+ DirContext ldapContext = (DirContext) getEndpoint().getCamelContext().getRegistry().lookup(remaining);
+ try {
+ // could throw NamingException
+ List<SearchResult> data = new ArrayList<SearchResult>();
+ NamingEnumeration<SearchResult> namingEnumeration =
+ ldapContext.search(searchBase, filter, getControls());
+
+ while (namingEnumeration.hasMore()) {
+ data.add(namingEnumeration.next());
+ }
+ exchange.getOut().setBody(data);
+ } finally {
+ ldapContext.close();
}
- exchange.getOut().setBody(data);
- }
-
- public DirContext getDirContext() {
- return ldapContext;
}
protected SearchControls getControls() {