I think that "ger" name space should not be hardcoded there. It should be
got from the value of the jndiName.

2011/3/21 <viol...@apache.org>

> Author: violalu
> Date: Mon Mar 21 05:45:34 2011
> New Revision: 1083678
>
> URL: http://svn.apache.org/viewvc?rev=1083678&view=rev
> Log:
> GERONIMO-5862 bound ger:MailSession jndi to ger namespace.
>
> Modified:
>    geronimo/server/trunk/plugins/javamail/geronimo-mail/pom.xml
>
>  
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/main/java/org/apache/geronimo/resource/mail/MailGBean.java
>
>  
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/test/java/org/apache/geronimo/resource/mail/MailGBeanTest.java
>    geronimo/server/trunk/plugins/javamail/javamail/src/main/plan/plan.xml
>
> Modified: geronimo/server/trunk/plugins/javamail/geronimo-mail/pom.xml
> URL:
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/javamail/geronimo-mail/pom.xml?rev=1083678&r1=1083677&r2=1083678&view=diff
>
> ==============================================================================
> --- geronimo/server/trunk/plugins/javamail/geronimo-mail/pom.xml (original)
> +++ geronimo/server/trunk/plugins/javamail/geronimo-mail/pom.xml Mon Mar 21
> 05:45:34 2011
> @@ -63,6 +63,14 @@
>             <groupId>org.apache.geronimo.specs</groupId>
>             <artifactId>geronimo-activation_1.1_spec</artifactId>
>         </dependency>
> +
> +         <dependency>
> +            <groupId>org.apache.geronimo.framework</groupId>
> +            <artifactId>geronimo-kernel</artifactId>
> +            <version>${project.version}</version>
> +            <classifier>tests</classifier>
> +            <scope>test</scope>
> +        </dependency>
>     </dependencies>
>
>  </project>
>
> Modified:
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/main/java/org/apache/geronimo/resource/mail/MailGBean.java
> URL:
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/javamail/geronimo-mail/src/main/java/org/apache/geronimo/resource/mail/MailGBean.java?rev=1083678&r1=1083677&r2=1083678&view=diff
>
> ==============================================================================
> ---
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/main/java/org/apache/geronimo/resource/mail/MailGBean.java
> (original)
> +++
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/main/java/org/apache/geronimo/resource/mail/MailGBean.java
> Mon Mar 21 05:45:34 2011
> @@ -39,6 +39,11 @@ import org.apache.geronimo.management.Ja
>  import org.apache.geronimo.naming.ResourceSource;
>  import org.slf4j.Logger;
>  import org.slf4j.LoggerFactory;
> +import org.osgi.framework.BundleContext;
> +import org.osgi.framework.Filter;
> +import org.osgi.framework.ServiceReference;
> +
> +import javax.naming.spi.ObjectFactory;
>
>
>  /**
> @@ -72,6 +77,7 @@ public class MailGBean implements GBeanL
>     private String user;
>     private Boolean debug;
>     private String jndiName;
> +    private BundleContext bundleContext;
>
>
>     /**
> @@ -101,7 +107,8 @@ public class MailGBean implements GBeanL
>                      @ParamAttribute(name="host") String host,
>                      @ParamAttribute(name="user") String user,
>                      @ParamAttribute(name="debug") Boolean debug,
> -                     @ParamAttribute(name="jndiName") String jndiName) {
> +                     @ParamAttribute(name="jndiName") String jndiName,
> +                     @ParamSpecial(type =
> SpecialAttributeType.bundleContext) BundleContext bundleContext){
>         this.objectName = objectName;
>         this.protocols = protocols;
>         setUseDefault(useDefault);
> @@ -113,6 +120,7 @@ public class MailGBean implements GBeanL
>         setUser(user);
>         setDebug(debug);
>         setJndiName(jndiName);
> +        this.bundleContext = bundleContext;
>     }
>
>     /**
> @@ -374,21 +382,15 @@ public class MailGBean implements GBeanL
>         if (jndiName != null && jndiName.length() > 0) {
>             // first get the resource incase there are exceptions
>             Object value = $getResource();
> -
> -            // get the initial context
> -            Context context = new InitialContext();
> -            Name parsedName = context.getNameParser("").parse(jndiName);
> -
> -            // create intermediate contexts
> -            for (int i = 1; i < parsedName.size(); i++) {
> -                Name contextName = parsedName.getPrefix(i);
> -                if (!bindingExists(context, contextName)) {
> -                    context.createSubcontext(contextName);
> -                }
> -            }
> -
> -            // bind
> -            context.bind(jndiName, value);
> +
> +            //Get ger service, and bind ger:MailSession to context
> +            ServiceReference[] sr =
> bundleContext.getServiceReferences(ObjectFactory.class.getName(),
> "(osgi.jndi.url.scheme=ger)");
> +            if (sr != null){
> +             ObjectFactory objectFactory =  (ObjectFactory)
> bundleContext.getService(sr[0]);
> +             Context context =
> (Context)objectFactory.getObjectInstance(null, null, null, null);
> +             context.bind(jndiName, value);
> +            }
> +
>             log.info("JavaMail session bound to " + jndiName);
>         }
>     }
> @@ -407,10 +409,15 @@ public class MailGBean implements GBeanL
>         String jndiName = getJndiName();
>         if (jndiName != null && jndiName.length() > 0) {
>             try {
> -                Context context = new InitialContext();
> -                context.unbind(jndiName);
> +               //Get ger service, and bind ger:MailSession to context
> +                ServiceReference[] sr =
> bundleContext.getServiceReferences(ObjectFactory.class.getName(),
> "(osgi.jndi.url.scheme=ger)");
> +                if (sr != null){
> +                 ObjectFactory objectFactory =  (ObjectFactory)
> bundleContext.getService(sr[0]);
> +                 Context context =
> (Context)objectFactory.getObjectInstance(null, null, null, null);
> +                 context.unbind(jndiName);
> +                }
>                 log.info("JavaMail session unbound from " + jndiName);
> -            } catch (NamingException e) {
> +            } catch (Exception e) {
>                 // we tried... this is a common error which occurs during
> shutdown due to ordering
>             }
>         }
> @@ -443,4 +450,12 @@ public class MailGBean implements GBeanL
>         return false;
>     }
>
> +       public void setBundleContext(BundleContext bundleContext) {
> +               this.bundleContext = bundleContext;
> +       }
> +
> +       public BundleContext getBundleContext() {
> +               return bundleContext;
> +       }
> +
>  }
>
> Modified:
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/test/java/org/apache/geronimo/resource/mail/MailGBeanTest.java
> URL:
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/javamail/geronimo-mail/src/test/java/org/apache/geronimo/resource/mail/MailGBeanTest.java?rev=1083678&r1=1083677&r2=1083678&view=diff
>
> ==============================================================================
> ---
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/test/java/org/apache/geronimo/resource/mail/MailGBeanTest.java
> (original)
> +++
> geronimo/server/trunk/plugins/javamail/geronimo-mail/src/test/java/org/apache/geronimo/resource/mail/MailGBeanTest.java
> Mon Mar 21 05:45:34 2011
> @@ -25,6 +25,9 @@ import javax.mail.Transport;
>
>  import junit.framework.TestCase;
>
> +import org.osgi.framework.BundleContext;
> +import org.apache.geronimo.kernel.osgi.MockBundleContext;
> +
>
>  /**
>  * @version $Rev$ $Date$
> @@ -37,7 +40,8 @@ public class MailGBeanTest extends TestC
>         properties.put("mail.store.protocol", "testStore");
>         properties.put("mail.transport.protocol", "testTransport");
>
> -        MailGBean mail = new MailGBean("test:name=mail", null,
> Boolean.TRUE, properties, null, null, null, null, null, null, null);
> +        BundleContext bundleContext = new
> MockBundleContext(getClass().getClassLoader(), "", null, null);
> +        MailGBean mail = new MailGBean("test:name=mail", null,
> Boolean.TRUE, properties, null, null, null, null, null, null, null,
> bundleContext);
>         mail.doStart();
>         Object proxy = mail.$getResource();
>
> @@ -59,7 +63,8 @@ public class MailGBeanTest extends TestC
>         properties.put("mail.store.protocol", "POOKIE");
>         properties.put("mail.transport.protocol", "BEAR");
>
> -        MailGBean mail = new MailGBean("test:name=mail", null,
> Boolean.TRUE, properties, null, "test", "test", null, null, null, null);
> +        BundleContext bundleContext = new
> MockBundleContext(getClass().getClassLoader(), "", null, null);
> +        MailGBean mail = new MailGBean("test:name=mail", null,
> Boolean.TRUE, properties, null, "test", "test", null, null, null, null,
> bundleContext);
>         mail.doStart();
>         Object proxy = mail.$getResource();
>
> @@ -91,7 +96,8 @@ public class MailGBeanTest extends TestC
>         SMTPTransportGBean protocol = new
> SMTPTransportGBean("test:name=smtp", null, null, null, null, null, null,
> null, null, null, null, null, null, null, null, null, null, null, null,
> null, null, null, null, null, null, null);
>         protocol.doStart();
>
> -        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null);
> +        BundleContext bundleContext = new
> MockBundleContext(getClass().getClassLoader(), "", null, null);
> +        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null, bundleContext);
>         mail.doStart();
>         Object proxy = mail.$getResource();
>
> @@ -120,7 +126,8 @@ public class MailGBeanTest extends TestC
>         POP3StoreGBean protocol = new POP3StoreGBean("test:name=pop3",
> null, null, null, null, null, null, null, null, null, null, null, null,
> null, null);
>         protocol.doStart();
>
> -        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null);
> +        BundleContext bundleContext = new
> MockBundleContext(getClass().getClassLoader(), "", null, null);
> +        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null, bundleContext);
>         mail.doStart();
>         Object proxy = mail.$getResource();
>
> @@ -146,7 +153,8 @@ public class MailGBeanTest extends TestC
>         IMAPStoreGBean protocol = new IMAPStoreGBean("test:name=imap",
> null, null, null, null, null, null, null, null, null, null, null, null,
> null, null, null, null, null, null, null, null, null, null, null, null,
> null);
>         protocol.doStart();
>
> -        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null);
> +        BundleContext bundleContext = new
> MockBundleContext(getClass().getClassLoader(), "", null, null);
> +        MailGBean mail = new MailGBean("test:name=mail",
> Collections.<ProtocolGBean>singleton(protocol), Boolean.TRUE, properties,
> null, "test", "test", null, null, null, null, bundleContext);
>         mail.doStart();
>         Object proxy = mail.$getResource();
>
>
> Modified:
> geronimo/server/trunk/plugins/javamail/javamail/src/main/plan/plan.xml
> URL:
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/javamail/javamail/src/main/plan/plan.xml?rev=1083678&r1=1083677&r2=1083678&view=diff
>
> ==============================================================================
> --- geronimo/server/trunk/plugins/javamail/javamail/src/main/plan/plan.xml
> (original)
> +++ geronimo/server/trunk/plugins/javamail/javamail/src/main/plan/plan.xml
> Mon Mar 21 05:45:34 2011
> @@ -23,7 +23,7 @@
>     <gbean name="mail/MailSession"
> class="org.apache.geronimo.resource.mail.MailGBean">
>         <attribute name="transportProtocol">smtp</attribute>
>       <!--TODO osgi:jndi -->
> -        <!--<attribute name="jndiName">ger:MailSession</attribute>-->
> +       <attribute name="jndiName">ger:MailSession</attribute>
>         <reference name="Protocols"/>
>     </gbean>
>
>
>
>


-- 
Ivan

Reply via email to