Not sure I understand your comments, ger is an existed context, what this GBean does is to bind the mailsession to the specified context. e.g. If users configured the jndiName with value jca:/a/b. With current changes, it might not work.
2011/3/22 viola lu <[email protected]> > But i think it's unnecessary to create an extra namesapce that no other > components will use in geronimo. And currently all namesapces are exposed as > blueprint service, even i created one here, should i expose it too? > > > On Mon, Mar 21, 2011 at 4:58 PM, Ivan <[email protected]> wrote: > >> I think that "ger" name space should not be hardcoded there. It should be >> got from the value of the jndiName. >> >> 2011/3/21 <[email protected]> >> >>> 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 >> > > > > -- > viola > -- Ivan
