Repository: tomee
Updated Branches:
  refs/heads/master 2fc95dcfc -> 4f49f2b36


Javamail API Example


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4f49f2b3
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4f49f2b3
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4f49f2b3

Branch: refs/heads/master
Commit: 4f49f2b3677a1caa59ad4c52dcdd45e57660e5d1
Parents: 2fc95dc
Author: andygumbre...@apache.org <andy...@gmx.de>
Authored: Thu Jun 18 12:08:17 2015 +0200
Committer: andygumbre...@apache.org <andy...@gmx.de>
Committed: Thu Jun 18 12:08:17 2015 +0200

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 examples/javamail/README.md                     | 184 +++++++++++++++++++
 examples/javamail/pom.xml                       | 104 +++++++++++
 .../java/org/superbiz/rest/EmailService.java    |  72 ++++++++
 .../org/superbiz/rest/EmailServiceTest.java     |  47 +++++
 examples/pom.xml                                |   1 +
 6 files changed, 409 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 6fe2ebd..9bbb2a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ quick.bat
 /tomee/tomee-plume-webapp/overlays/
 /tomee/tomee-plus-webapp/overlays/
 /temp
+/report.txt

http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/README.md
----------------------------------------------------------------------
diff --git a/examples/javamail/README.md b/examples/javamail/README.md
new file mode 100644
index 0000000..89be081
--- /dev/null
+++ b/examples/javamail/README.md
@@ -0,0 +1,184 @@
+Title: Javamail API
+
+This is just a simple example to demonstrate a very basic usage of the API. It 
should be enough to get you started using the java mail packages.
+
+#The Code
+
+## A simple REST service using the Javamail API
+
+Here we see a very simple RESTful endpoint that can be called with a message 
to send by Email. It would not be hard to modify the application to provide
+more useful configuration options. As is, this will not send anything, but if 
you change the parameters to match your mail server then you'll see the message 
being sent.
+You can find much more detailed information on the [Javamail API 
here](https://java.net/projects/javamail/pages/Home#Samples)
+
+    package org.superbiz.rest;
+
+    import javax.mail.Authenticator;
+    import javax.mail.Message;
+    import javax.mail.MessagingException;
+    import javax.mail.PasswordAuthentication;
+    import javax.mail.Session;
+    import javax.mail.Transport;
+    import javax.mail.internet.InternetAddress;
+    import javax.mail.internet.MimeMessage;
+    import javax.ws.rs.POST;
+    import javax.ws.rs.Path;
+    import java.util.Date;
+    import java.util.Properties;
+
+    @Path("/email")
+    public class EmailService {
+
+        @POST
+        public String lowerCase(final String message) {
+
+            try {
+
+                //Create some properties and get the default Session
+                final Properties props = new Properties();
+                props.put("mail.smtp.host", "your.mailserver.host");
+                props.put("mail.debug", "true");
+
+                final Session session = Session.getInstance(props, new 
Authenticator() {
+                    @Override
+                    protected PasswordAuthentication 
getPasswordAuthentication() {
+                        return new PasswordAuthentication("MyUsername", 
"MyPassword");
+                    }
+                });
+
+                //Set this just to see some internal logging
+                session.setDebug(true);
+
+                //Create a message
+                final MimeMessage msg = new MimeMessage(session);
+                msg.setFrom(new InternetAddress("your@email.address"));
+                final InternetAddress[] address = {new 
InternetAddress("gene...@tomitribe.com")};
+                msg.setRecipients(Message.RecipientType.TO, address);
+                msg.setSubject("JavaMail API test");
+                msg.setSentDate(new Date());
+                msg.setText(message, "UTF-8");
+
+
+                Transport.send(msg);
+            } catch (MessagingException e) {
+                return "Failed to send message: " + e.getMessage();
+            }
+
+            return "Sent";
+        }
+    }
+
+# Testing
+
+## Test for the JAXRS service
+
+The test uses the OpenEJB ApplicationComposer to make it trivial.
+
+The idea is first to activate the jaxrs services. This is done using 
@EnableServices annotation.
+
+Then we create on the fly the application simply returning an object 
representing the web.xml. Here we simply
+use it to define the context root but you can use it to define your REST 
Application too. And to complete the
+application definition we add @Classes annotation to define the set of classes 
to use in this app.
+
+Finally to test it we use cxf client API to call the REST service post() 
method.
+
+    package org.superbiz.rest;
+
+    import org.apache.cxf.jaxrs.client.WebClient;
+    import org.apache.openejb.jee.WebApp;
+    import org.apache.openejb.junit.ApplicationComposer;
+    import org.apache.openejb.testing.Classes;
+    import org.apache.openejb.testing.EnableServices;
+    import org.apache.openejb.testing.Module;
+    import org.junit.Test;
+    import org.junit.runner.RunWith;
+
+    import java.io.IOException;
+
+    import static org.junit.Assert.assertEquals;
+
+    @EnableServices(value = "jaxrs")
+    @RunWith(ApplicationComposer.class)
+    public class EmailServiceTest {
+
+        @Module
+        @Classes(EmailService.class)
+        public WebApp app() {
+            return new WebApp().contextRoot("test");
+        }
+
+        @Test
+        public void post() throws IOException {
+            final String message = 
WebClient.create("http://localhost:4204";).path("/test/email/").post("Hello 
Tomitribe", String.class);
+            assertEquals("Failed to send message: Unknown SMTP host: 
your.mailserver.host", message);
+        }
+    }
+
+#Running
+
+Running the example is fairly simple. In the "javamail-api" directory run:
+
+    $ mvn clean install
+
+Which should create output like the following.
+
+    INFO - Cannot find the configuration file [conf/openejb.xml].  Will 
attempt to create one for the beans deployed.
+    INFO - Configuring Service(id=Default Security Service, 
type=SecurityService, provider-id=Default Security Service)
+    INFO - Configuring Service(id=Default Transaction Manager, 
type=TransactionManager, provider-id=Default Transaction Manager)
+    INFO - Creating TransactionManager(id=Default Transaction Manager)
+    INFO - Creating SecurityService(id=Default Security Service)
+    INFO - Initializing network services
+    INFO - Creating ServerService(id=cxf-rs)
+    INFO - Creating ServerService(id=httpejbd)
+    INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to 
(200) threads with a queue of (9)
+    INFO - Initializing network services
+    INFO -   ** Bound Services **
+    INFO -   NAME                 IP              PORT
+    INFO -   httpejbd             127.0.0.1       4204
+    INFO - -------
+    INFO - Ready!
+    INFO - Configuring enterprise application: 
D:\github\tomee\examples\javamail\EmailServiceTest
+    INFO - Configuring Service(id=Default Managed Container, type=Container, 
provider-id=Default Managed Container)
+    INFO - Auto-creating a container for bean 
org.superbiz.rest.EmailServiceTest: Container(type=MANAGED, id=Default Managed 
Container)
+    INFO - Creating Container(id=Default Managed Container)
+    INFO - Using directory D:\windows\tmp for stateful session passivation
+    INFO - Configuring Service(id=comp/DefaultManagedExecutorService, 
type=Resource, provider-id=Default Executor Service)
+    INFO - Auto-creating a Resource with id 
'comp/DefaultManagedExecutorService' of type 
'javax.enterprise.concurrent.ManagedExecutorService for 'test'.
+    INFO - Configuring Service(id=comp/DefaultManagedScheduledExecutorService, 
type=Resource, provider-id=Default Scheduled Executor Service)
+    INFO - Auto-creating a Resource with id 
'comp/DefaultManagedScheduledExecutorService' of type 
'javax.enterprise.concurrent.ManagedScheduledExecutorService for 'test'.
+    INFO - Configuring Service(id=comp/DefaultManagedThreadFactory, 
type=Resource, provider-id=Default Managed Thread Factory)
+    INFO - Auto-creating a Resource with id 'comp/DefaultManagedThreadFactory' 
of type 'javax.enterprise.concurrent.ManagedThreadFactory for 'test'.
+    INFO - Enterprise application 
"D:\github\tomee\examples\javamail\EmailServiceTest" loaded.
+    INFO - Creating dedicated application classloader for EmailServiceTest
+    INFO - Assembling app: D:\github\tomee\examples\javamail\EmailServiceTest
+    INFO - Using providers:
+    INFO -      org.apache.johnzon.jaxrs.JohnzonProvider@2687f956
+    INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@1ded7b14
+    INFO -      org.apache.johnzon.jaxrs.JsrProvider@29be7749
+    INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@5f84abe8
+    INFO -      
org.apache.openejb.server.cxf.rs.EJBAccessExceptionMapper@4650a407
+    INFO -      
org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@30135202
+    INFO - REST Application: http://127.0.0.1:4204/test/       -> 
org.apache.openejb.server.rest.InternalApplication
+    INFO -      Service URI: http://127.0.0.1:4204/test/email  -> Pojo 
org.superbiz.rest.EmailService
+    INFO -              POST http://127.0.0.1:4204/test/email/ ->      String 
lowerCase(String)
+    INFO - Deployed 
Application(path=D:\github\tomee\examples\javamail\EmailServiceTest)
+    DEBUG: JavaMail version 1.4ea
+    DEBUG: java.io.FileNotFoundException: 
D:\java\jdk8\jre\lib\javamail.providers (The system cannot find the file 
specified)
+    DEBUG: !anyLoaded
+    DEBUG: not loading resource: /META-INF/javamail.providers
+    DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
+    DEBUG: Tables of loaded providers
+    DEBUG: Providers Listed By Class Name: 
{com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
 Microsystems, Inc], 
com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
 Microsystems, Inc], 
com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun
 Microsystems, Inc], 
com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun
 Microsystems, Inc], 
com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun
 Microsystems, Inc], 
com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun
 Microsystems, Inc]}
+    DEBUG: Providers Listed By Protocol: 
{imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun 
Microsystems, Inc], 
imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun 
Microsystems, Inc], 
smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
 Microsystems, Inc], 
pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun 
Microsystems, Inc], 
pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun 
Microsystems, Inc], 
smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun 
Microsystems, Inc]}
+    DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
+    DEBUG: !anyLoaded
+    DEBUG: not loading resource: /META-INF/javamail.address.map
+    DEBUG: java.io.FileNotFoundException: 
D:\java\jdk8\jre\lib\javamail.address.map (The system cannot find the file 
specified)
+    DEBUG: setDebug: JavaMail version 1.4ea
+    DEBUG: getProvider() returning 
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun 
Microsystems, Inc]
+    DEBUG SMTP: useEhlo true, useAuth false
+    DEBUG SMTP: trying to connect to host "your.mailserver.host", port 25, 
isSSL false
+    INFO - Undeploying app: D:\github\tomee\examples\javamail\EmailServiceTest
+    INFO - Stopping network services
+    INFO - Stopping server services
+
+

http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/pom.xml
----------------------------------------------------------------------
diff --git a/examples/javamail/pom.xml b/examples/javamail/pom.xml
new file mode 100644
index 0000000..c70a85a
--- /dev/null
+++ b/examples/javamail/pom.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.superbiz</groupId>
+  <artifactId>javamail-api</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+  <name>OpenEJB :: Examples :: JavaMail API</name>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <defaultGoal>install</defaultGoal>
+
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.2</version>
+        <configuration>
+          <source>1.7</source>
+          <target>1.7</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <repositories>
+    <repository>
+      <id>apache-m2-snapshot</id>
+      <name>Apache Snapshot Repository</name>
+      <url>https://repository.apache.org/content/groups/snapshots</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>7.0-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.mail</groupId>
+      <artifactId>mail</artifactId>
+      <version>1.4</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+
+    <!--
+    The <scope>test</scope> guarantees that non of your runtime
+    code is dependent on any OpenEJB classes.
+    -->
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>openejb-cxf-rs</artifactId>
+      <version>7.0.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <!--
+  This section allows you to configure where to publish libraries for sharing.
+  It is not required and may be deleted.  For more information see:
+  http://maven.apache.org/plugins/maven-deploy-plugin/
+  -->
+  <distributionManagement>
+    <repository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/repo/</url>
+    </repository>
+    <snapshotRepository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/snapshot-repo/</url>
+    </snapshotRepository>
+  </distributionManagement>
+</project>

http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java
----------------------------------------------------------------------
diff --git 
a/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java 
b/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java
new file mode 100644
index 0000000..504ea16
--- /dev/null
+++ b/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.superbiz.rest;
+
+import javax.mail.Authenticator;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.PasswordAuthentication;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import java.util.Date;
+import java.util.Properties;
+
+@Path("/email")
+public class EmailService {
+
+    @POST
+    public String lowerCase(final String message) {
+
+        try {
+
+            //Create some properties and get the default Session
+            final Properties props = new Properties();
+            props.put("mail.smtp.host", "your.mailserver.host");
+            props.put("mail.debug", "true");
+
+            final Session session = Session.getInstance(props, new 
Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication("MyUsername", 
"MyPassword");
+                }
+            });
+
+            //Set this just to see some internal logging
+            session.setDebug(true);
+
+            //Create a message
+            final MimeMessage msg = new MimeMessage(session);
+            msg.setFrom(new InternetAddress("your@email.address"));
+            final InternetAddress[] address = {new 
InternetAddress("gene...@tomitribe.com")};
+            msg.setRecipients(Message.RecipientType.TO, address);
+            msg.setSubject("JavaMail API test");
+            msg.setSentDate(new Date());
+            msg.setText(message, "UTF-8");
+
+
+            Transport.send(msg);
+        } catch (final MessagingException e) {
+            return "Failed to send message: " + e.getMessage();
+        }
+
+        return "Sent";
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java
----------------------------------------------------------------------
diff --git 
a/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java 
b/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java
new file mode 100644
index 0000000..856cce5
--- /dev/null
+++ b/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.superbiz.rest;
+
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.EnableServices;
+import org.apache.openejb.testing.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+@EnableServices(value = "jaxrs")
+@RunWith(ApplicationComposer.class)
+public class EmailServiceTest {
+
+    @Module
+    @Classes(EmailService.class)
+    public WebApp app() {
+        return new WebApp().contextRoot("test");
+    }
+
+    @Test
+    public void post() throws IOException {
+        final String message = 
WebClient.create("http://localhost:4204";).path("/test/email/").post("Hello 
Tomitribe", String.class);
+        assertEquals("Failed to send message: Unknown SMTP host: 
your.mailserver.host", message);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index 2cfc901..ef1c344 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -81,6 +81,7 @@
     <module>injection-of-entitymanager</module>
     <module>injection-of-env-entry</module>
     <module>interceptors</module>
+    <module>javamail</module>
     <module>jpa-eclipselink</module>
     <module>jpa-hibernate</module>
     <module>jpa-enumerated</module>

Reply via email to