You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by km...@apache.org on 2009/02/16 07:00:15 UTC

svn commit: r744815 - in /openejb/trunk/openejb3/examples/webapps/applet: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/superbiz/ src/main/java/org/superbiz/applet/ src/main/resources/ src/main/webapp/ src/main/webapp/WEB-INF/ s...

Author: kmalhi
Date: Mon Feb 16 06:00:15 2009
New Revision: 744815

URL: http://svn.apache.org/viewvc?rev=744815&view=rev
Log:
Added the applet example which demonstrates how to communicate with a remote stateless session bean from an applet. It also demonstrates how to sign your applets and demonstrates solutions for common applet gotchas

Added:
    openejb/trunk/openejb3/examples/webapps/applet/
    openejb/trunk/openejb3/examples/webapps/applet/README.txt
    openejb/trunk/openejb3/examples/webapps/applet/pom.xml
    openejb/trunk/openejb3/examples/webapps/applet/src/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/Calculator.java
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorApplet.java
    openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorImpl.java
    openejb/trunk/openejb3/examples/webapps/applet/src/main/resources/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/
    openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/index.jsp
    openejb/trunk/openejb3/examples/webapps/applet/src/test/
    openejb/trunk/openejb3/examples/webapps/applet/src/test/java/
    openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/
    openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/
    openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/JNDILookupTest.java

Added: openejb/trunk/openejb3/examples/webapps/applet/README.txt
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/README.txt?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/README.txt (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/README.txt Mon Feb 16 06:00:15 2009
@@ -0,0 +1,133 @@
+<!--
+
+    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.
+-->
+============
+OVERVIEW
+============
+This example creates an applet which requires the user to enter two numbers.
+It then uses the Calculator EJB to add the numbers and displays the result.
+
+Before you run the example, there are a few things worth noting. 
+One has to keep in mind that applets run in a very restrictive environment. A couple of 
+them are
+1. Applets can only establish a connection to the host they came from
+2. A signed applet gets around most of the restrictions (e.g. calls to System.getProperty() etc)
+3. Any resources/classes needed by the applet should be available in the same directory where
+the applet originated from, or its sub-directory/ies
+
+Since our applet will establish a connection back to the EJB, so we need to make sure 
+we are not trying to establish a connection to some other webapp. We will see in a minute 
+what that means.
+We shall also sign our applet using jarsigner, however would would first need to create
+a certificate. We will get to this part also in a minute.
+
+Since our applet would be running in a remote JVM, it would use the RemoteInitialContextFactory
+instead of the LocalInitialContextFactory. The RemoteInitialContextFactory is available
+in openejb-client.jar. The applet would also need the java-ee-api.jar in its class-path.
+
+Lets see how we can use maven + ant to get around the above restrictions of applets:-
+
+The pom.xml of this project 
+- adds the client and the ee jars as dependencies. 
+- uses the ant jar task (in the maven-antrun-plugin) to jar up all classes in WEB-INF/classes and puts them under the root
+directory of the web app (this is required, since web app clients cannot access anything under
+WEB-INF directory, hence we copied those classes to web-apps root directory)
+[Note:- The ant script puts all classes under WEB-INF/classes inside a jar. All classes
+are not required by the applet. Instead, the applet only needs the EJB interface and Applet 
+classes in the jar]
+- uses maven-dependency-plugin to copy javaee-api and openejb-client jars to src/main/webapp (this is the webapp root directory)
+- uses the signjar ant task to sign all the jar files
+
+The APPLET is located inside index.jsp . Notice how the archive attribute of the applet
+is used to add the applet , java ee and openejb client jars to the applets classpath
+
+Since the APPLET can only communicate from the host it originates, notice how the web context
+root is used in the provider url to obtain the InitialContext. 
+		Properties props = new Properties();
+		props.put(Context.INITIAL_CONTEXT_FACTORY,
+				"org.apache.openejb.client.RemoteInitialContextFactory");
+		props.put(Context.PROVIDER_URL,"http://127.0.0.1:8080/applet/ejb");
+
+The example web-app has a context root named applet. If you were making another webapp with a 
+different context root, then you would use that in the provider url instead.
+If you open the web.xml of this project, you will find a <servlet-mapping> section which 
+actually maps the /ejb/* to a servlet named ServerServlet. This is another thing which you need
+too keep in mind in your web-app. Yes, the provider url actually points to a servlet named
+ServerServlet. This servlet is provided by openejb and is automatically added to you webapps
+classpath.
+[Note:- All other clients (except applets) will use a provider url of http://127.0.0.1:8080/openejb/ejb,
+since an applet cannot connect to another web-app, hence the above little trick to work around this
+limitation. If you do not make the change, you will get a HTTP 403 error i.e. server denied 
+access to the ServerServlet . A unit test named JNDILookupTest has been added to the example to 
+show how a non-applet remote client would obtain the Context]
+
+HOW TO RUN THE EXAMPLE
+======================
+--USE KEYTOOL --
+You would need to do a bit of work (if you have not done that already) in creating a self-signed
+certificate (in case you do not have one from one of the certificate authorities).
+Here is the steps performed to create the certificate (notice the store password is openejb - 
+this password is also used in pom.xml while signing the jar -- if your store passwd is different
+please update the pom.xml with the correct password before proceeding forward)
+Use the keytool as shown below (answer all questions asked by keytool -- the answers do not
+have to match as shown below (except for store password and alias <mykey> -- since it is used by maven))
+
+karan@jee:~$ keytool -genkey
+Enter keystore password:  openejb
+What is your first and last name?
+  [Unknown]:  karan malhi
+What is the name of your organizational unit?
+  [Unknown]:  Superbiz   
+What is the name of your organization?
+  [Unknown]:  Superbiz
+What is the name of your City or Locality?
+  [Unknown]:  Deptford
+What is the name of your State or Province?
+  [Unknown]:  NJ
+What is the two-letter country code for this unit?
+  [Unknown]:  US
+Is CN=karan malhi, OU=Superbiz, O=Superbiz, L=Deptford, ST=NJ, C=US correct?
+  [no]:  yes
+
+Enter key password for <mykey>
+        (RETURN if same as keystore password):  
+karan@jee:~$ 
+
+-- INSTALL AND CONFIGURE TOMCAT --
+
+1. Install latest Tomcat
+2. Deploy OpenEJB WAR in tomcat
+3. Open <<tomcat-install>>/conf/tomcat-users.xml and add the following user
+   <user username="admin" password="" roles="manager"/>
+   
+-- DEPLOY AND TEST THE EXAMPLE --
+1. Run the following command while in the applet directory
+   mvn clean install war:exploded tomcat:deploy -Dmaven.test.skip=true
+   [It is required to skip the test since the application is not yet deployed on tomcat. If you run
+the test now, it will fail]
+2. The above will deploy this web application to tomcat.
+3. To test the application, open a web browser and navigate to 
+   http://localhost:8080/applet
+4. You will be prompted to accept digital signature. Accept it to run the applet
+5. Enter two numbers and click the add button, the result should be displayed next
+to the button
+
+[Note:- If you make changes and want to redeploy the app use the following command:
+ mvn clean install war:exploded tomcat:redeploy]
+
+
+

Added: openejb/trunk/openejb3/examples/webapps/applet/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/pom.xml?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/pom.xml (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/pom.xml Mon Feb 16 06:00:15 2009
@@ -0,0 +1,122 @@
+<?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.applet</groupId>
+	<artifactId>applet</artifactId>
+	<packaging>war</packaging>
+	<version>1.0-SNAPSHOT</version>
+	<name>applet Maven Webapp</name>
+	<url>http://openejb.apache.org</url>
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.5</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.openejb</groupId>
+			<artifactId>javaee-api</artifactId>
+			<version>5.0-1</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.openejb</groupId>
+			<artifactId>openejb-client</artifactId>
+			<version>3.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+	<build>
+		<finalName>applet</finalName>
+		<pluginManagement>
+			<plugins>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.5</source>
+					<target>1.5</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>tomcat-maven-plugin</artifactId>
+				<version>1.0-beta-1</version>
+				<configuration>
+					<url>http://localhost:8080/manager/html</url>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<executions>
+					<execution>
+						<phase>process-classes</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<tasks>
+								<jar destfile="src/main/webapp/app.jar" basedir="target/classes" />
+								<signjar jar='src/main/webapp/app.jar' alias="mykey" storepass="openejb" />
+								<signjar jar='src/main/webapp/openejb-client-3.1.jar' alias="mykey" storepass="openejb" />
+								<signjar jar='src/main/webapp/javaee-api-5.0-1.jar' alias="mykey" storepass="openejb" />
+							</tasks>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>process-resources</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>org.apache.openejb</groupId>
+									<artifactId>openejb-client</artifactId>
+									<version>3.1</version>
+									<outputDirectory>src/main/webapp</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>org.apache.openejb</groupId>
+									<artifactId>javaee-api</artifactId>
+									<version>5.0-1</version>
+									<outputDirectory>src/main/webapp</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>

Added: openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/Calculator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/Calculator.java?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/Calculator.java (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/Calculator.java Mon Feb 16 06:00:15 2009
@@ -0,0 +1,25 @@
+/**
+ *
+ * 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.applet;
+
+import javax.ejb.Remote;
+
+@Remote
+public interface Calculator {
+	public double add(double x, double y);
+}

Added: openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorApplet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorApplet.java?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorApplet.java (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorApplet.java Mon Feb 16 06:00:15 2009
@@ -0,0 +1,106 @@
+/**
+ *
+ * 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.applet;
+
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+public class CalculatorApplet extends JApplet {
+	JTextArea area;
+
+	JTextField field1;
+	JTextField field2;
+	JLabel label1;
+	JLabel label2;
+	JButton button;
+	JLabel label3;
+	Context ctx;
+
+	public void init() {
+		try {
+			SwingUtilities.invokeAndWait(new Runnable() {
+				public void run() {
+					createUI();
+				}
+			});
+		} catch (Exception e) {
+			System.err.println("createGUI didn't successfully complete");
+		}
+
+	}
+
+	private void createUI() {
+		field1 = new JTextField();
+		field2 = new JTextField();
+		label1 = new JLabel("Enter first number");
+		label2 = new JLabel("Enter second number");
+		label3 = new JLabel("RESULT=");
+		button = new JButton("Add");
+
+		setLayout(new GridLayout(3, 2));
+		add(label1);
+		add(field1);
+		add(label2);
+		add(field2);
+		add(button);
+		add(label3);
+		Properties props = new Properties();
+		props.put(Context.INITIAL_CONTEXT_FACTORY,
+				"org.apache.openejb.client.RemoteInitialContextFactory");
+		props.put(Context.PROVIDER_URL,"http://127.0.0.1:8080/applet/ejb");
+		try {
+			ctx = new InitialContext(props);
+		} catch (NamingException e) {
+			throw new RuntimeException(e);
+		}
+		button.addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+
+				try {
+					final Object ref = ctx.lookup("CalculatorImplRemote");
+					Calculator calc = (Calculator) PortableRemoteObject.narrow(
+							ref, Calculator.class);
+					String text1 = field1.getText();
+					String text2 = field2.getText();
+					int num1 = Integer.parseInt(text1);
+					int num2 = Integer.parseInt(text2);
+					double result = calc.add(num1, num2);
+					label3.setText("RESULT=" + result);
+				} catch (NamingException ex) {
+					throw new RuntimeException(ex);
+				}
+
+			}
+		});
+
+	}
+}

Added: openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorImpl.java?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorImpl.java (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/main/java/org/superbiz/applet/CalculatorImpl.java Mon Feb 16 06:00:15 2009
@@ -0,0 +1,29 @@
+/**
+ *
+ * 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.applet;
+
+import javax.ejb.Stateless;
+
+@Stateless
+public class CalculatorImpl implements Calculator {
+
+	public double add(double x, double y) {
+		return x+y;
+	}
+
+}

Added: openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/web.xml?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/web.xml (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/WEB-INF/web.xml Mon Feb 16 06:00:15 2009
@@ -0,0 +1,32 @@
+<?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.
+-->
+<!DOCTYPE web-app PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<web-app>
+ <servlet>
+    <servlet-name>ServerServlet</servlet-name>
+    <servlet-class>org.apache.openejb.server.httpd.ServerServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>ServerServlet</servlet-name>
+    <url-pattern>/ejb/*</url-pattern>
+  </servlet-mapping>
+</web-app>

Added: openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/index.jsp?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/index.jsp (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/main/webapp/index.jsp Mon Feb 16 06:00:15 2009
@@ -0,0 +1,26 @@
+<!--
+
+    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.
+-->
+<html>
+<body>
+<applet alt="could not load applet" height="100" width="300"
+	codebase="."
+	archive="app.jar,javaee-api-5.0-1.jar,openejb-client-3.1.jar"
+	code="org.superbiz.applet.CalculatorApplet">
+</applet>
+</body>
+</html>

Added: openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/JNDILookupTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/JNDILookupTest.java?rev=744815&view=auto
==============================================================================
--- openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/JNDILookupTest.java (added)
+++ openejb/trunk/openejb3/examples/webapps/applet/src/test/java/org/superbiz/JNDILookupTest.java Mon Feb 16 06:00:15 2009
@@ -0,0 +1,50 @@
+/**
+ *
+ * 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;
+
+import java.util.Properties;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.superbiz.applet.Calculator;
+
+
+public class JNDILookupTest {
+
+	@Test
+	public void test(){
+		Properties props = new Properties();
+        props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory");
+        props.put(Context.PROVIDER_URL,    "http://127.0.0.1:8080/openejb/ejb");
+        try {
+		Context	ctx = new InitialContext(props);
+			System.out.println("Found context "+ctx);
+			final Object ref =  ctx.lookup("CalculatorImplRemote");
+			Calculator calc = (Calculator) PortableRemoteObject.narrow(ref, Calculator.class);
+			double result = calc.add(10, 30);
+			Assert.assertEquals(40, result,0.5);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}