summaryrefslogtreecommitdiff
path: root/java/demo/Ice
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2008-12-31 14:35:01 -0500
committerBernard Normier <bernard@zeroc.com>2008-12-31 14:35:01 -0500
commitabcb9652f6d2d969381a98544a108f21ff97a44a (patch)
tree171ad3b54aefc3b2180c04d86403d839ca64a115 /java/demo/Ice
parentFixed bug #3232 (Freeze transactional evictor leaks) (diff)
parentadding applet demo (diff)
downloadice-abcb9652f6d2d969381a98544a108f21ff97a44a.tar.bz2
ice-abcb9652f6d2d969381a98544a108f21ff97a44a.tar.xz
ice-abcb9652f6d2d969381a98544a108f21ff97a44a.zip
Merge branch 'R3_3_branch' of ssh://git/home/git/ice into R3_3_branch
Diffstat (limited to 'java/demo/Ice')
-rw-r--r--java/demo/Ice/README9
-rw-r--r--java/demo/Ice/applet/Hello.ice24
-rw-r--r--java/demo/Ice/applet/HelloApplet.java597
-rw-r--r--java/demo/Ice/applet/README44
-rw-r--r--java/demo/Ice/applet/applet.pro53
-rw-r--r--java/demo/Ice/applet/build.xml94
-rw-r--r--java/demo/Ice/applet/hello.html35
-rw-r--r--java/demo/Ice/build.xml14
8 files changed, 862 insertions, 8 deletions
diff --git a/java/demo/Ice/README b/java/demo/Ice/README
index ed7506e7146..6a9eceee376 100644
--- a/java/demo/Ice/README
+++ b/java/demo/Ice/README
@@ -1,9 +1,14 @@
Demos in this directory:
+- applet
+
+ An unsigned applet that demonstrates how to use Asynchronous Method
+ Invocation (AMI) in a graphical client.
+
- async
- This demo illustrates the use of Asynchronous Message Invocation
- (AMI) and Asynchronous Message Dispatch (AMD).
+ This demo illustrates the use of Asynchronous Method Invocation
+ (AMI) and Asynchronous Method Dispatch (AMD).
- bidir
diff --git a/java/demo/Ice/applet/Hello.ice b/java/demo/Ice/applet/Hello.ice
new file mode 100644
index 00000000000..0ab2de4f3e6
--- /dev/null
+++ b/java/demo/Ice/applet/Hello.ice
@@ -0,0 +1,24 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef HELLO_ICE
+#define HELLO_ICE
+
+module Demo
+{
+
+interface Hello
+{
+ ["ami"] idempotent void sayHello(int delay);
+ ["ami"] void shutdown();
+};
+
+};
+
+#endif
diff --git a/java/demo/Ice/applet/HelloApplet.java b/java/demo/Ice/applet/HelloApplet.java
new file mode 100644
index 00000000000..751ef21ea51
--- /dev/null
+++ b/java/demo/Ice/applet/HelloApplet.java
@@ -0,0 +1,597 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+
+public class HelloApplet extends JApplet
+{
+ public void init()
+ {
+ //
+ // Make sure we create the GUI from the Swing event dispatch thread.
+ //
+ try
+ {
+ SwingUtilities.invokeAndWait(new Runnable()
+ {
+ public void run()
+ {
+ initUI();
+ }
+ });
+ }
+ catch(Throwable ex)
+ {
+ ex.printStackTrace();
+ return;
+ }
+
+ //
+ // Initialize an Ice communicator.
+ //
+ try
+ {
+ Ice.InitializationData initData = new Ice.InitializationData();
+ initData.properties = Ice.Util.createProperties();
+ initData.properties.setProperty("Ice.ACM.Client", "10");
+ _communicator = Ice.Util.initialize(initData);
+ }
+ catch(Throwable ex)
+ {
+ handleException(ex);
+ }
+ }
+
+ public void start()
+ {
+ // Nothing to do.
+ }
+
+ public void stop()
+ {
+ // Nothing to do.
+ }
+
+ public void destroy()
+ {
+ //
+ // Destroy the Ice run time.
+ //
+ if(_communicator != null)
+ {
+ try
+ {
+ _communicator.destroy();
+ }
+ catch(Throwable ex)
+ {
+ ex.printStackTrace();
+ }
+ _communicator = null;
+ }
+ }
+
+ private void initUI()
+ {
+ Container cp = getContentPane();
+
+ JLabel l1 = new JLabel("Hostname");
+ _hostname = new JTextField();
+ JLabel l2 = new JLabel("Mode");
+ _mode = new JComboBox();
+ JLabel l3 = new JLabel("Timeout");
+ _timeoutSlider = new JSlider(0, MAX_TIME);
+ _timeoutLabel = new JLabel("0.0");
+ JLabel l4 = new JLabel("Delay");
+ _delaySlider = new JSlider(0, MAX_TIME);
+ _delayLabel = new JLabel("0.0");
+ JPanel buttonPanel = new JPanel();
+ _hello = new JButton("Hello World!");
+ _shutdown = new JButton("Shutdown");
+ _flush = new JButton("Flush");
+ _flush.setEnabled(false);
+ JPanel statusPanel = new JPanel();
+ JSeparator statusPanelSeparator = new JSeparator();
+ _status = new JLabel();
+ _status.setText("Ready");
+
+ //
+ // Default to the host from which the applet was downloaded.
+ //
+ _hostname.setText(getCodeBase().getHost());
+
+ final String[] modes = new String[]
+ {
+ "Twoway", "Twoway Secure", "Oneway", "Oneway Batch", "Oneway Secure", "Oneway Secure Batch", "Datagram",
+ "Datagram Batch"
+ };
+ _mode.setModel(new DefaultComboBoxModel(modes));
+
+ _hello.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ sayHello();
+ }
+ });
+ _shutdown.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ shutdown();
+ }
+ });
+ _flush.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ flush();
+ }
+ });
+ _mode.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ changeDeliveryMode(_mode.getSelectedIndex());
+ }
+ });
+ changeDeliveryMode(_mode.getSelectedIndex());
+
+ _timeoutSlider.addChangeListener(new SliderListener(_timeoutSlider, _timeoutLabel));
+ _timeoutSlider.setValue(0);
+ _delaySlider.addChangeListener(new SliderListener(_delaySlider, _delayLabel));
+ _delaySlider.setValue(0);
+
+ GridBagConstraints gridBagConstraints;
+
+ cp.setMaximumSize(null);
+ cp.setPreferredSize(null);
+ cp.setLayout(new GridBagLayout());
+
+ l1.setText("Hostname");
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(5, 5, 5, 5);
+ cp.add(l1, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 0;
+ gridBagConstraints.gridwidth = 2;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.insets = new Insets(5, 0, 5, 5);
+ cp.add(_hostname, gridBagConstraints);
+
+ l2.setText("Mode");
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 1;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 0);
+ cp.add(l2, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 1;
+ gridBagConstraints.gridwidth = 2;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.insets = new Insets(0, 0, 5, 5);
+ cp.add(_mode, gridBagConstraints);
+
+ l3.setText("Timeout");
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 2;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 0);
+ cp.add(l3, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 2;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ cp.add(_timeoutSlider, gridBagConstraints);
+
+ _timeoutLabel.setMinimumSize(new Dimension(20, 17));
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 2;
+ gridBagConstraints.gridy = 2;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 5);
+ cp.add(_timeoutLabel, gridBagConstraints);
+
+ l4.setText("Delay");
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 3;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 0);
+ cp.add(l4, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 1;
+ gridBagConstraints.gridy = 3;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ cp.add(_delaySlider, gridBagConstraints);
+
+ _delayLabel.setMinimumSize(new Dimension(20, 17));
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 2;
+ gridBagConstraints.gridy = 3;
+ gridBagConstraints.anchor = GridBagConstraints.WEST;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 5);
+ cp.add(_delayLabel, gridBagConstraints);
+
+ _hello.setText("Hello World!");
+ buttonPanel.add(_hello);
+
+ _shutdown.setText("Shutdown");
+ buttonPanel.add(_shutdown);
+
+ _flush.setText("Flush");
+ buttonPanel.add(_flush);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 4;
+ gridBagConstraints.gridwidth = 3;
+ gridBagConstraints.ipady = 5;
+ cp.add(buttonPanel, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 5;
+ gridBagConstraints.gridwidth = 3;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 5);
+ cp.add(statusPanelSeparator, gridBagConstraints);
+
+ gridBagConstraints = new GridBagConstraints();
+ gridBagConstraints.gridx = 0;
+ gridBagConstraints.gridy = 6;
+ gridBagConstraints.gridwidth = 3;
+ gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
+ gridBagConstraints.insets = new Insets(0, 5, 5, 5);
+ cp.add(_status, gridBagConstraints);
+ }
+
+ private enum DeliveryMode
+ {
+ TWOWAY,
+ TWOWAY_SECURE,
+ ONEWAY,
+ ONEWAY_BATCH,
+ ONEWAY_SECURE,
+ ONEWAY_SECURE_BATCH,
+ DATAGRAM,
+ DATAGRAM_BATCH;
+
+ Ice.ObjectPrx apply(Ice.ObjectPrx prx)
+ {
+ switch (this)
+ {
+ case TWOWAY:
+ prx = prx.ice_twoway();
+ break;
+ case TWOWAY_SECURE:
+ prx = prx.ice_twoway().ice_secure(true);
+ break;
+ case ONEWAY:
+ prx = prx.ice_oneway();
+ break;
+ case ONEWAY_BATCH:
+ prx = prx.ice_batchOneway();
+ break;
+ case ONEWAY_SECURE:
+ prx = prx.ice_oneway().ice_secure(true);
+ break;
+ case ONEWAY_SECURE_BATCH:
+ prx = prx.ice_batchOneway().ice_secure(true);
+ break;
+ case DATAGRAM:
+ prx = prx.ice_datagram();
+ break;
+ case DATAGRAM_BATCH:
+ prx = prx.ice_batchDatagram();
+ break;
+ }
+ return prx;
+ }
+
+ public boolean isBatch()
+ {
+ return this == ONEWAY_BATCH || this == DATAGRAM_BATCH || this == ONEWAY_SECURE_BATCH;
+ }
+ }
+
+ private Demo.HelloPrx createProxy()
+ {
+ String host = _hostname.getText().toString().trim();
+ if(host.length() == 0)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _status.setText("No hostname");
+ }
+ });
+ return null;
+ }
+
+ String s = "hello:tcp -h " + host + " -p 10000:ssl -h " + host + " -p 10001:udp -h " + host + " -p 10000";
+ Ice.ObjectPrx prx = _communicator.stringToProxy(s);
+ prx = _deliveryMode.apply(prx);
+ int timeout = _timeoutSlider.getValue();
+ if(timeout != 0)
+ {
+ prx = prx.ice_timeout(timeout);
+ }
+ return Demo.HelloPrxHelper.uncheckedCast(prx);
+ }
+
+ class SayHelloI extends Demo.AMI_Hello_sayHello implements Ice.AMISentCallback
+ {
+ private boolean _response = false;
+
+ synchronized public void ice_exception(final Ice.LocalException ex)
+ {
+ assert (!_response);
+ _response = true;
+
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ handleException(ex);
+ }
+ });
+ }
+
+ synchronized public void ice_sent()
+ {
+ if(_response)
+ {
+ return;
+ }
+
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
+ {
+ _status.setText("Waiting for response");
+ }
+ else
+ {
+ _status.setText("Ready");
+ }
+ }
+ });
+ }
+
+ synchronized public void ice_response()
+ {
+ assert (!_response);
+ _response = true;
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _status.setText("Ready");
+ }
+ });
+ }
+ }
+
+ private void sayHello()
+ {
+ Demo.HelloPrx hello = createProxy();
+ if(hello == null)
+ {
+ return;
+ }
+
+ int delay = _delaySlider.getValue();
+ try
+ {
+ if(!_deliveryMode.isBatch())
+ {
+ if(hello.sayHello_async(new SayHelloI(), delay))
+ {
+ if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
+ {
+ _status.setText("Waiting for response");
+ }
+ }
+ else
+ {
+ _status.setText("Sending request");
+ }
+ }
+ else
+ {
+ _flush.setEnabled(true);
+ hello.sayHello(delay);
+ _status.setText("Queued sayHello request");
+ }
+ }
+ catch(Ice.LocalException ex)
+ {
+ handleException(ex);
+ }
+ }
+
+ private void shutdown()
+ {
+ Demo.HelloPrx hello = createProxy();
+ if(hello == null)
+ {
+ return;
+ }
+
+ try
+ {
+ if(!_deliveryMode.isBatch())
+ {
+ hello.shutdown_async(new Demo.AMI_Hello_shutdown()
+ {
+ public void ice_exception(final Ice.LocalException ex)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ handleException(ex);
+ }
+ });
+ }
+
+ public void ice_response()
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _status.setText("Ready");
+ }
+ });
+ }
+ });
+ if(_deliveryMode == DeliveryMode.TWOWAY || _deliveryMode == DeliveryMode.TWOWAY_SECURE)
+ {
+ _status.setText("Waiting for response");
+ }
+ }
+ else
+ {
+ _flush.setEnabled(true);
+ hello.shutdown();
+ _status.setText("Queued shutdown request");
+ }
+ }
+ catch(Ice.LocalException ex)
+ {
+ handleException(ex);
+ }
+ }
+
+ private void flush()
+ {
+ new Thread(new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ _communicator.flushBatchRequests();
+ }
+ catch(final Ice.LocalException ex)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ handleException(ex);
+ }
+ });
+ }
+ }
+ }).start();
+
+ _flush.setEnabled(false);
+ _status.setText("Flushed batch requests");
+ }
+
+ private void changeDeliveryMode(long id)
+ {
+ switch ((int)id)
+ {
+ case 0:
+ _deliveryMode = DeliveryMode.TWOWAY;
+ break;
+ case 1:
+ _deliveryMode = DeliveryMode.TWOWAY_SECURE;
+ break;
+ case 2:
+ _deliveryMode = DeliveryMode.ONEWAY;
+ break;
+ case 3:
+ _deliveryMode = DeliveryMode.ONEWAY_BATCH;
+ break;
+ case 4:
+ _deliveryMode = DeliveryMode.ONEWAY_SECURE;
+ break;
+ case 5:
+ _deliveryMode = DeliveryMode.ONEWAY_SECURE_BATCH;
+ break;
+ case 6:
+ _deliveryMode = DeliveryMode.DATAGRAM;
+ break;
+ case 7:
+ _deliveryMode = DeliveryMode.DATAGRAM_BATCH;
+ break;
+ }
+ }
+
+ private void handleException(final Throwable ex)
+ {
+ ex.printStackTrace();
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ _status.setText(ex.getClass().getName());
+ }
+ }
+ );
+ }
+
+ private static class SliderListener implements ChangeListener
+ {
+ SliderListener(JSlider slider, JLabel label)
+ {
+ _slider = slider;
+ _label = label;
+ }
+
+ public void stateChanged(ChangeEvent ce)
+ {
+ float value = (float)(_slider.getValue() / 1000.0);
+ _label.setText(String.format("%.1f", value));
+ }
+
+ private JSlider _slider;
+ private JLabel _label;
+ }
+
+ private static final int MAX_TIME = 5000; // 5 seconds
+
+ private JTextField _hostname;
+ private JComboBox _mode;
+ private JSlider _timeoutSlider;
+ private JLabel _timeoutLabel;
+ private JSlider _delaySlider;
+ private JLabel _delayLabel;
+ private JButton _hello;
+ private JButton _shutdown;
+ private JButton _flush;
+ private JLabel _status;
+
+ private Ice.Communicator _communicator;
+ private DeliveryMode _deliveryMode;
+}
diff --git a/java/demo/Ice/applet/README b/java/demo/Ice/applet/README
new file mode 100644
index 00000000000..83e3cfc5e84
--- /dev/null
+++ b/java/demo/Ice/applet/README
@@ -0,0 +1,44 @@
+This demo presents an unsigned applet that shows how to make
+asynchronous Ice invocations in a graphical application.
+
+The demo includes a start page (hello.html) that you will need to
+publish on a web server. This page assumes that the demo applet is
+stored in a fully self-contained archive named Hello.jar. In order to
+create a fully self-contained JAR file, you must build the applet
+with ProGuard in your CLASSPATH. After a successful build, copy
+Hello.jar from this subdirectory to the same directory as hello.html
+on your web server.
+
+If you did not build the applet with ProGuard in your CLASSPATH, the
+Hello.jar archive contains only the applet classes. In this case you
+must modify the start page to add Ice.jar to the applet's ARCHIVE
+parameter. Alternatively, you can add ProGuard to your CLASSPATH and
+rebuild the applet with the following commands:
+
+ ant clean
+ ant
+
+To run the demo, you must start a "hello" server on the web server
+host. You can use the hello server from the ../hello directory or
+a hello server from any other Ice language mapping. Note that you may
+need to temporarily relax the firewall restrictions on your web server
+host to allow the applet to establish connections to the hello server.
+Next, start a web browser and open the hello.html page on your web
+server.
+
+Once the applet has started, verify that the name of your web server
+host is correct in the "Hostname" field and press the "Hello World!"
+button. You will notice that the server prints a "Hello World!"
+message to the console for each invocation. To make other types of Ice
+invocations, select a different mode from the combobox.
+
+The two sliders allow you to experiment with various timeout settings.
+The "Timeout" slider determines how long the Ice run time will wait
+for an invocation to complete, while the "Delay" slider forces the
+server to delay its response. The value of each slider is shown in
+seconds. To force a timeout, select a non-zero timeout and set the
+delay to be larger than the timeout. The server prints two "Hello
+World!" messages in this case because the Slice operation sayHello is
+marked as idempotent, meaning that Ice does not need to follow the
+at-most-once retry semantics. See the manual for more information
+about retry behavior.
diff --git a/java/demo/Ice/applet/applet.pro b/java/demo/Ice/applet/applet.pro
new file mode 100644
index 00000000000..dae1ea08906
--- /dev/null
+++ b/java/demo/Ice/applet/applet.pro
@@ -0,0 +1,53 @@
+# ProGuard configuration options
+
+-keep class HelloApplet
+
+# Preserve all annotations.
+-keepattributes *Annotation*
+
+# Preserve all native method names and the names of their classes.
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve a method that is required in all enumeration classes.
+-keepclassmembers class * extends java.lang.Enum {
+ public **[] values();
+}
+
+-dontskipnonpubliclibraryclasses
+-dontusemixedcaseclassnames
+-dontwarn
+
+# We could reduce the size of the JAR file significantly if we
+# enable obfuscation but it would make things like stack traces
+# much harder to read.
+-dontobfuscate
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# This class is loaded dynamically.
+-keep public class IceSSL.PluginFactory {
+ public *;
+}
+
+# More keeps to suppress Notes
+
+-keep interface Ice.Communicator
+-keep class IceInternal.SelectorHandler
+
+-keep public class Ice.DispatchStatus {
+ int __value;
+ Ice.DispatchStatus[] __values;
+ int value();
+}
+
+-keep public class java.net.DatagramSocketImpl {
+ java.io.FileDescriptor fd;
+}
diff --git a/java/demo/Ice/applet/build.xml b/java/demo/Ice/applet/build.xml
new file mode 100644
index 00000000000..ad9be449216
--- /dev/null
+++ b/java/demo/Ice/applet/build.xml
@@ -0,0 +1,94 @@
+<!--
+ **********************************************************************
+
+ Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+
+ This copy of Ice is licensed to you under the terms described in the
+ ICE_LICENSE file included in this distribution.
+
+ **********************************************************************
+-->
+
+<project name="demo_Ice_applet" default="all" basedir=".">
+
+ <!-- set global properties for this build -->
+ <property name="top.dir" value="../../.."/>
+
+ <!-- import common definitions -->
+ <import file="${top.dir}/config/common.xml"/>
+
+ <condition property="proguard-found">
+ <available classname="proguard.ant.ProGuardTask" classpath="${env.CLASSPATH}" />
+ </condition>
+
+ <target name="generate" depends="init">
+ <!-- Create the output directory for generated code -->
+ <mkdir dir="${generated.dir}"/>
+ <slice2java outputdir="${generated.dir}">
+ <meta value="${java2metadata}"/>
+ <includepath>
+ <pathelement path="${slice.dir}"/>
+ </includepath>
+ <fileset dir="." includes="Hello.ice"/>
+ </slice2java>
+ </target>
+
+ <target name="compile" depends="generate">
+ <mkdir dir="${class.dir}"/>
+ <javac srcdir="${generated.dir}" destdir="${class.dir}"
+ debug="${debug}">
+ <classpath refid="ice.classpath"/>
+ <compilerarg value="${javac.lint}"/>
+ </javac>
+ <javac srcdir="." destdir="${class.dir}"
+ excludes="generated/**" debug="${debug}">
+ <classpath refid="ice.classpath"/>
+ <compilerarg value="${javac.lint}"/>
+ </javac>
+ </target>
+
+ <target name="jar" depends="compile" unless="proguard-found">
+ <jar jarfile="Hello.jar" basedir="${class.dir}">
+ <include name="Demo/**"/>
+ <include name="HelloApplet*"/>
+ </jar>
+ </target>
+
+ <target name="proguard-jar" depends="jar" if="proguard-found">
+ <condition property="library.jarfiles" value="classes.jar,jsse.jar">
+ <os family="mac"/>
+ </condition>
+ <condition property="library.jarfiles" value="rt.jar,jsse.jar">
+ <!-- Library jar files for Sun JDK -->
+ <available file="${java.home}/lib/rt.jar"/>
+ </condition>
+ <condition property="library.jarfiles" value="vm.jar,core.jar,graphics.jar,security.jar">
+ <!-- Library jar files for IBM J9 (from Linux SuSE) -->
+ <available file="${java.home}/lib/vm.jar"/>
+ </condition>
+ <condition property="library.jarpath" value="${java.home}/../Classes" else="${java.home}/lib">
+ <os family="mac"/>
+ </condition>
+ <pathconvert property="library.jars">
+ <filelist dir="${library.jarpath}" files="${library.jarfiles}"/>
+ </pathconvert>
+
+ <taskdef resource="proguard/ant/task.properties"/>
+
+ <proguard configuration="applet.pro">
+ <injar path="${class.dir}"/>
+ <injar refid="ice.classpath" filter="!META-INF/**"/>
+ <outjar path="Hello.jar"/>
+ <libraryjar path="${library.jars}"/>
+ </proguard>
+ </target>
+
+ <target name="all" depends="proguard-jar"/>
+
+ <target name="clean">
+ <delete file="Hello.jar"/>
+ <delete dir="${generated.dir}"/>
+ <delete dir="${class.dir}"/>
+ </target>
+
+</project>
diff --git a/java/demo/Ice/applet/hello.html b/java/demo/Ice/applet/hello.html
new file mode 100644
index 00000000000..c0a48d8f38f
--- /dev/null
+++ b/java/demo/Ice/applet/hello.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+<title>Ice Hello Applet</title>
+</head>
+
+<body>
+<object
+ classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
+ codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=1,5,0,0"
+ WIDTH = 300 HEIGHT = 175 >
+ <PARAM NAME = CODE VALUE = "HelloApplet" >
+ <param name = "type" value = "application/x-java-applet;version=1.5">
+ <param name = "scriptable" value = "false">
+ <param name = "archive" value = "Hello.jar">
+
+ <comment>
+ <embed
+ type = "application/x-java-applet;version=1.5" \
+ CODE = "HelloApplet" \
+ ARCHIVE = "Hello.jar" \
+ WIDTH = 300 \
+ HEIGHT = 175
+ scriptable = false
+ pluginspage = "http://java.sun.com/products/plugin/index.html#download">
+ <noembed>
+ alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason."
+ Your browser is completely ignoring the &lt;APPLET&gt; tag!
+ </noembed>
+ </embed>
+
+ </comment>
+</object>
+
+</body>
+</html>
diff --git a/java/demo/Ice/build.xml b/java/demo/Ice/build.xml
index f3f00642dbd..36f4d8d9547 100644
--- a/java/demo/Ice/build.xml
+++ b/java/demo/Ice/build.xml
@@ -12,33 +12,35 @@
<project name="demo_Ice" default="all" basedir=".">
<target name="all">
+ <ant dir="applet"/>
+ <ant dir="async"/>
<ant dir="bidir"/>
<ant dir="callback"/>
<ant dir="hello"/>
<ant dir="invoke"/>
<ant dir="latency"/>
<ant dir="minimal"/>
+ <ant dir="multicast"/>
<ant dir="nested"/>
+ <ant dir="session"/>
<ant dir="throughput"/>
<ant dir="value"/>
- <ant dir="session"/>
- <ant dir="async"/>
- <ant dir="multicast"/>
</target>
<target name="clean">
+ <ant dir="applet" target="clean"/>
+ <ant dir="async" target="clean"/>
<ant dir="bidir" target="clean"/>
<ant dir="callback" target="clean"/>
<ant dir="hello" target="clean"/>
<ant dir="invoke" target="clean"/>
<ant dir="latency" target="clean"/>
<ant dir="minimal" target="clean"/>
+ <ant dir="multicast" target="clean"/>
<ant dir="nested" target="clean"/>
+ <ant dir="session" target="clean"/>
<ant dir="throughput" target="clean"/>
<ant dir="value" target="clean"/>
- <ant dir="session" target="clean"/>
- <ant dir="async" target="clean"/>
- <ant dir="multicast" target="clean"/>
</target>
</project>