Well, after many hours of trying to figure out what's going on, I have
made little progress.
I am now getting the following exception:
javax.mail.NoSuchProviderException: Unable to locate provider for
protocol: smtp
at javax.mail.Session.getProvider(Session.java:225)
at javax.mail.Session.getTransport(Session.java:331)
at javax.mail.Session.getTransport(Session.java:320)
at
org.acme.mailverifier.ejb.MailVerifierSessionBean.sendValidationEmail
(MailVerifierSessionBean.java:100)
My Gbeans currently look like the following, though I'm certain they are
incorrect.
<gbean name="smtpProtocol"
class="org.apache.geronimo.mail.ProtocolGBean">
<attribute name="host">10.0.0.1</attribute>
<attribute name="protocol">smtp</attribute>
</gbean>
<gbean name="smtpTransport"
class="org.apache.geronimo.mail.SMTPTransportGBean">
<attribute name="host">10.0.0.1</attribute>
<attribute name="port">25</attribute>
</gbean>
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.MailGBean">
<attribute name="transportProtocol">smtp</attribute>
<attribute name="host">10.0.0.1</attribute>
<attribute name="useDefault">true</attribute>
<attribute name="debug">true</attribute>
</gbean>
The protocol and transport beans are things I was trying, but I'm sure
they're wrong.
I am able to get the javax.mail.Session instances, so that's working.
It's just that Javamail doesn't seem to be making the necessary
associations. I've even tried putting javamail.default.providers files
into META_INF but it doesn't seem to get far with those. I've even set
the Debug flag and it's not outputting any debug information that I can see.
Thanks for any help you can give.
Cheers.
-Neal
David Jencks wrote:
On Sep 30, 2005, at 7:19 PM, Neal Sanche wrote:
Sorry David, I must be extra dense today...
Here's what I understand of the way this works so far:
I have to start a GBean, and I have to make a resource-ref in my
Session bean to use it. But I think I'm missing a step. How does
Geronimo know which GBean represents a certain resource? Do I also
have to make a gbean-ref in my open-ejb.xml deployment plan to make
the 'link' somehow? I'm quite confused about this whole area right
now, I'm afraid. Is there anyone on the list who's used JavaMail who
can point me to example source, or docs? Even a similar situation
where a GBean is linked to an SLSB resource-ref would be excellent.
Well, you need to start 2 gbeans: one for the mail session and one
for the smtp transport. You only started the transport one, so there
was no session for the resource-ref to connect to.
All resource-refs (and ejb-refs, except for corba transport) work by
matching gbean names, which for jsr-77 objects are pretty well
specified by the jsr-77 spec. So, from the information you provide,
namely the name "mail/MailSession" and the type javax.mail.Session we
start constructing pieces of gbean name to query with. Mail and JAXR
are special cases, we notice these types and for mail pick
j2eeType=JavaMailResource. You are in a server with domain
geronimo.server and J2EEServer=geronimo, so we have geronimo.server:
J2EEServer=geronimo,j2eeType=JavaMailResource,name=mail/MailSession,*
First we look for gbeans matching this pattern in your current
application, and in your case when you add the missing MailGBean it
will find that one. If you leave it out (as at present) it will then
look for matches in "standalone modules", i.e. with
J2EEApplication=null. So, if you added it to a gbean-only plan or
included it in the o/a/g/Server plan the query would find it. You
can always include more info in a resource-ref in the geronimo plan
to supply the entire name of the target gbean.
So.... if your plan was:
<DEFANGED_application
xmlns="http://geronimo.apache.org/xml/ns/j2ee/application"
configId="org/acme/PhoneBook">
<dependency>
<uri>geronimo/jars/geronimo-mail-1.0-SNAPSHOT.jar</uri>
</dependency> <module>
<connector>tranql-connector-1.0-SNAPSHOT.rar</connector>
<alt-dd>mysql-plan.xml</alt-dd>
</module>
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.MailGBean"/>
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.SMTPTransportGBean">
<attribute name="host">10.0.0.1</attribute>
<attribute name="port">25</attribute>
</gbean>
</application>
the resource ref would be resolved. The part I don't know is whether
you need to do something else to tell the mail session to use smtp
transport or if the fact the transport is initialized will
automatically register it with the mail session. I suspect the
latter but don't know. This should be covered in standard javamail
docs however.
Hope this helps,
david jencks
Thanks.
-Neal
David Jencks wrote:
I'm not the expert on javamail, but...
I think you need a MailGBean to be the resource-ref target:
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.MailGBean"/>
I'm not exactly sure what you need to configure so the mail gbean
hooks up to the smtp protocol bean you already have.
Hope this points you a useful direction :-)
thanks
david jencks
On Sep 30, 2005, at 6:24 PM, Neal Sanche wrote:
Hi Guys,
A long while ago, I asked about getting JavaMail working in
Geronimo. Here's what I have done, and the current result:
My geronimo-application.xml:
<DEFANGED_application
xmlns="http://geronimo.apache.org/xml/ns/j2ee/application"
configId="org/acme/mailverifier">
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.SMTPTransportGBean">
<attribute name="host">mail.example.com</attribute>
</gbean>
</application>
A resource-ref in a session bean that looks like:
<resource-ref >
<description><![CDATA[JavaMail Resource]]></description>
<res-ref-name>mail/MailSession</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
I've edited the j2ee-server-plan.xml to add:
<dependency>
<uri>javamail/jars/activation.jar</uri>
</dependency>
<dependency>
<uri>javamail/jars/mail.jar</uri>
</dependency>
<dependency>
<uri>geronimo/jars/geronimo-mail-1.0-SNAPSHOT.jar</uri>
</dependency>
But I get the following error:
18:08:16,044 ERROR [Deployer] Deployment failed due to
org.apache.geronimo.gbean.InvalidConfigurationException: Could
not load class or
g.apache.geronimo.mail.SMTPTransportGBean
at
org.apache.geronimo.gbean.GBeanInfo.getGBeanInfo(GBeanInfo.java:56)
at
org.apache.geronimo.deployment.service.ServiceConfigBuilder.addGBeanD
ata(ServiceConfigBuilder.java:293)
at
org.apache.geronimo.deployment.service.ServiceConfigBuilder.addGBeans
(ServiceConfigBuilder.java:288)
at
org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfigurati
on(EARConfigBuilder.java:339)
at
org.apache.geronimo.j2ee.deployment.EARConfigBuilder$$FastClassByCGLI
B$$38e56ec6.invoke(<generated>)
at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
at
org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethod
Invoker.java:38)
If I change my geronimo-application.xml to:
<DEFANGED_application
xmlns="http://geronimo.apache.org/xml/ns/j2ee/application"
configId="org/acme/PhoneBook">
<dependency>
<uri>geronimo/jars/geronimo-mail-1.0-SNAPSHOT.jar</uri>
</dependency> <module>
<connector>tranql-connector-1.0-SNAPSHOT.rar</connector>
<alt-dd>mysql-plan.xml</alt-dd>
</module>
<gbean name="mail/MailSession"
class="org.apache.geronimo.mail.SMTPTransportGBean">
<attribute name="host">10.0.0.1</attribute>
<attribute name="port">25</attribute>
</gbean>
</application>
That error goes away, but I'm left with:
Deployer operation failed: Unable to resolve resource reference
'mail/MailSession' (no matching resources found)
org.apache.geronimo.common.DeploymentException: Unable to resolve
resource reference 'mail/MailSession' (no matching resources found)
at
org.apache.geronimo.naming.deployment.ENCConfigBuilder.addResourceRef
s( ENCConfigBuilder.java:231)
at
org.apache.geronimo.naming.deployment.ENCConfigBuilder.buildComponent
Co ntext(ENCConfigBuilder.java:764)
at
org.openejb.deployment.SessionBuilder.processEnvironmentRefs(SessionB
ui lder.java:167)
at
org.openejb.deployment.SessionBuilder.addEJBContainerGBean(SessionBui
ld er.java:296)
at
org.openejb.deployment.SessionBuilder.buildBeans(SessionBuilder.java:
182)
at
org.openejb.deployment.OpenEJBModuleBuilder.addGBeans(OpenEJBModuleBu
il der.java:514)
at
org.openejb.deployment.OpenEJBModuleBuilder$$FastClassByCGLIB$$11bd7b
20 .invoke(<generated>)
at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
Any ideas of what I'm doing wrong?
Thanks.
-Neal