[Yanel-commits] rev 38162 - public/yanel/trunk/src/realms/yanel-website/content

simon at wyona.com simon at wyona.com
Wed Aug 20 23:13:58 CEST 2008


Author: simon
Date: 2008-08-20 23:13:57 +0200 (Wed, 20 Aug 2008)
New Revision: 38162

Added:
   public/yanel/trunk/src/realms/yanel-website/content/d2518b49-4767-4474-af10-e6c0439830e5
Log:
tutorial content added

Added: public/yanel/trunk/src/realms/yanel-website/content/d2518b49-4767-4474-af10-e6c0439830e5
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/content/d2518b49-4767-4474-af10-e6c0439830e5	                        (rev 0)
+++ public/yanel/trunk/src/realms/yanel-website/content/d2518b49-4767-4474-af10-e6c0439830e5	2008-08-20 21:13:57 UTC (rev 38162)
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Documentation</title>
+  </head>
+  <body>
+
+<h3 id="section-Create+a+simple+hello-world+resource-type-CreateAnEmptyResourceType"> Create an empty resource-type</h3>
+<ul><li>First we create an empty resource-type. For this we will use an ant task which is included in the build script. type in a console:
+</li></ul><pre>./build.sh new-resource-type</pre>
+<span class="sub">Hint: all sentences starting with [input] are what ant shows when waiting for an input</span>
+<ul><li>it will ask you for a name ([input] Please enter the resource-type name (e.g. calendar):)
+</li><li>type the name of the resource-type you want to create: <tt>hello-world</tt>
+</li><li>it asks you for a namespace for your resource ([input] Please enter the namespace of this new resource-type (e.g. http://foo.bar/yanel/resource/1.0):)
+
+</li><li>insert a namespace: <tt>http://yourname.org/yanel/resource/1.0</tt>
+</li><li>then you have to add a short description ([input] Please enter a short description of this resource-type:)
+</li><li>type a description: <tt>This is a simple hello-world resource-type</tt>
+</li><li>now it asks you for a package name ([input] Please enter java package of this resource-type (e.g. org.wyona.yanel.impl.resources):)
+</li><li>type the package-name which will be used by this resource: <tt>org.yourname.yanel.impl.resources</tt>
+</li><li>then you have to provide the java class name used by this resource-type ([input] Please enter java class name of this resource-type (e.g. CalendarResource))
+</li><li>type: <tt>HelloWorldResource</tt>
+</li><li>now choose the template ([input] Please enter from what template you want to build your java class: (empty,xml,usecase,examples))
+</li><li>type <tt>empty</tt>
+
+</li><li>do you want to use some interfaces ([input] Do you want to imlement some yanel interface :(yes/NO))
+</li><li>type <tt>yes</tt>
+</li><li>you'll be asked for the different interfaces. we just need ViewableV2 for now. just hit enter if you dont want to implement an interface. ([input] Do you want to imlement the interface :ViewableV2 (yes/NO)) 
+</li><li>type <tt>yes</tt> (only for the ViewableV2)
+</li><li><b>now you will find your newly created resource-type <tt>hello-world</tt> in <tt>$YANELHOME/src/contributions/resources</tt></b>
+</li></ul><h3 id="section-Create+a+simple+hello-world+resource-type-WhatYouHaveNow"> What you have now</h3>
+
+<ul><li>within this directory the following files were created for you: <span style="font-family: monospace; white-space: pre;">
+./yanel-htdocs/doc/index.html
+./yanel-htdocs/icons/scalable/rt-icon.svg
+./yanel-htdocs/icons/32x32/rt-icon.png
+./yanel-htdocs/icons/22x22/rt-icon.png
+./yanel-htdocs/icons/16x16/rt-icon.png
+./resource.xml
+./build.xml
+./src/build/dependencies.xml
+./src/build/build.properties
+./src/java/org/yourname/yanel/impl/resources/HelloWorldResource.java
+</span>
+</li><li>the files in the yanel-htdocs directory are used by yanel:
+</li></ul><dl><dt>./yanel-htdocs/doc/index.html</dt><dd> here you can add some documentation about your resource-type.</dd></dl>
+<dl><dt>./yanel-htdocs/icons/scalable/rt-icon.svg</dt><dd> this file you can replace with your svg icon.</dd></dl>
+<dl><dt>./yanel-htdocs/icons/32x32/rt-icon.png</dt><dd> this file you can replace with your png icon in 32x32 size</dd></dl>
+
+<dl><dt>./yanel-htdocs/icons/22x22/rt-icon.png</dt><dd> this file you can replace with your png icon in 22x22 size</dd></dl>
+<dl><dt>./yanel-htdocs/icons/16x16/rt-icon.png</dt><dd> this file you can replace with your png icon in 16x16 size</dd></dl>
+<dl><dt>./resource.xml</dt><dd> this file is used by yanel to learn about your resource-type. probably you don't need to change this file since the creation process did it all for you</dd></dl>
+<dl><dt>./build.xml</dt><dd> this file is used by yanel build process to build your resource-type. probably you don't need to change this file since the creation process did it all for you.</dd></dl>
+<dl><dt>./src/build/dependencies.xml</dt><dd> here you can add some libraries which you may use in your java class. the libraries have to be accessible on a maven server and will by donwloaded during the yanel build process</dd></dl>
+
+<dl><dt>./src/build/build.properties</dt><dd> here are some properties used by the yanel build process. e.g. name, version</dd></dl>
+<dl><dt>./src/java/org/yourname/yanel/impl/resources/HelloWorldResource.java</dt><dd> and here the java class wher you have to implement your functionality</dd></dl>
+<h3 id="section-Create+a+simple+hello-world+resource-type-ImplementTheFunctionality"> implement the functionality</h3>
+<ul><li>first i think you should add your new created resource-type to the local.resource-type.xml ($YANELHOME/conf/local/local.resource-type.xml). add following line: 
+</li></ul><pre>&lt;resource-type src="@YANEL_SRC_DIR@/src/contributions/resources/hello-world/" compile="true"/&gt;
+</pre>
+now the yanel build process will also build your new hello world-resource and yanel knows about it.
+<ul><li>then have a look at the java file which looks as the following:
+
+</li></ul><div class="prettify">
+<pre class="prettyprint"><span class="com">/*<br/>&#160;* Copyright 2007 Wyona<br/>&#160;*/</span><span class="pln"><br/><br/></span><span class="kwd">package</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">yourname</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">impl</span><span class="pun">.</span><span class="pln">resources</span><span class="pun">;</span><span class="pln"><br/><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="typ">Resource</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">y!
 anel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="pln">api</span><span class="pun">.</span><span class="pln">attributes</span><span class="pun">.</span><span class="typ">ViewableV2</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="pln">attributes</span><span class="pun">.</span><span class="pln">viewable</span><span class="pun">.</span><span class="typ">View</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span!
  class="pun">.</span><span class="pln">attributes</span><span !
 class="p
un">.</span><span class="pln">viewable</span><span class="pun">.</span><span class="typ">ViewDescriptor</span><span class="pun">;</span><span class="pln"><br/><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">apache</span><span class="pun">.</span><span class="pln">log4j</span><span class="pun">.</span><span class="typ">Logger</span><span class="pun">;</span><span class="pln"><br/><br/></span><span class="com">/**<br/>&#160;*<br/>&#160;*/</span><span class="pln"><br/></span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">HelloWorldResource</span><span class="pln"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Resource</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ViewableV2</span><span class="pln"> &#160;</span><span class="pun"!
 >{</span><span class="pln"><br/>&#160; &#160; <br/>&#160; &#160; </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Logger</span><span class="pln"> log </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Logger</span><span class="pun">.</span><span class="pln">getLogger</span><span class="pun">(</span><span class="typ">HelloWorldResource</span><span class="pun">.</span><span class="kwd">class</span><span class="pun">);</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">boolean</span><span class="pln"> exists</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="com">// !
 TODO Auto-generated method stub</span><span class="pln"><br/>&!
 #160; &#
160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">long</span><span class="pln"> getSize</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="com">// TODO Auto-generated method stub</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="!
 kwd">public</span><span class="pln"> </span><span class="typ">View</span><span class="pln"> getView</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> viewId</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="com">// TODO Auto-generated method stub</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">ViewDescriptor</span><span class="pun">[]</span><span class="pln"> getViewDescriptors</span><span class="pun">()</spa!
 n><span class="pln"> </span><span class="pun">{</span><span cl!
 ass="pln
"><br/>&#160; &#160; &#160; &#160; </span><span class="com">// TODO Auto-generated method stub</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/><br/></span><span class="pun">}</span></pre>
+
+</div>
+<ul><li>now implement the ViewableV2 interface
+</li></ul><div class="prettify">
+<pre class="prettyprint"><span class="com">/*<br/>&#160;* Copyright 2007 Wyona<br/>&#160;*/</span><span class="pln"><br/><br/></span><span class="kwd">package</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">yourname</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">impl</span><span class="pun">.</span><span class="pln">resources</span><span class="pun">;</span><span class="pln"><br/><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="typ">Resource</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">y!
 anel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="pln">api</span><span class="pun">.</span><span class="pln">attributes</span><span class="pun">.</span><span class="typ">ViewableV2</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span class="pun">.</span><span class="pln">attributes</span><span class="pun">.</span><span class="pln">viewable</span><span class="pun">.</span><span class="typ">View</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">wyona</span><span class="pun">.</span><span class="pln">yanel</span><span class="pun">.</span><span class="pln">core</span><span!
  class="pun">.</span><span class="pln">attributes</span><span !
 class="p
un">.</span><span class="pln">viewable</span><span class="pun">.</span><span class="typ">ViewDescriptor</span><span class="pun">;</span><span class="pln"><br/><br/></span><span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">io</span><span class="pun">.</span><span class="typ">ByteArrayInputStream</span><span class="pun">;</span><span class="pln"><br/></span><span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">io</span><span class="pun">.</span><span class="typ">InputStream</span><span class="pun">;</span><span class="pln"><br/><br/><br/></span><span class="com">/**<br/>&#160;* A simple HelloWorldResource which implements ViewableV2 to output "Hello World!"<br/>&#160;*/</span><span class="pln"><br/></span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">HelloWorldResource</span><span class="pl!
 n"> </span><span class="kwd">extends</span><span class="pln"> </span><span class="typ">Resource</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">ViewableV2</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Logger</span><span class="pln"> log </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Logger</span><span class="pun">.</span><span class="pln">getLogger</span><span class="pun">(</span><span class="typ">HelloWorldResource</span><span class="pun">.</span><span class="kwd">class</span><span class="pun">);</span><span class="pln"><br/>&#160; &#160; <br/>&#160; &#160; </span><span class="com">/* <br/>&#160; &#160; &#160;* Since we don't read from somewhere which could not exist we just return true<br/>!
 &#160; &#160; &#160;*/</span><span class="pln"><br/>&#160; &#1!
 60; </sp
an><span class="kwd">public</span><span class="pln"> </span><span class="kwd">boolean</span><span class="pln"> exists</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="com">/* <br/>&#160; &#160; &#160;* Here we could return the size of the InputStream of the view <br/>&#160; &#160; &#160;* to allow the browser to know about before it receives the request <br/>&#160; &#160; &#160;*/</span><span class="pln"><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">long</span><span class="p!
 ln"> getSize</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/>&#160; &#160; </span><span class="com">/*<br/>&#160; &#160; &#160;* Here we can describe the view returned by this resource-type.<br/>&#160; &#160; &#160;* in this simple case it's just the default with a mime-type "text/plain".<br/>&#160; &#160; &#160;* Now yanel is able to tell you what views are provided an which mime-type they will have.<br/>&#160; &#160; &#160;*/</span><span class="pln"><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><spa!
 n class="typ">ViewDescriptor</span><span class="pun">[]</span>!
 <span cl
ass="pln"> getViewDescriptors</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="typ">ViewDescriptor</span><span class="pun">[]</span><span class="pln"> viewDescriptor </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ViewDescriptor</span><span class="pun">[</span><span class="lit">1</span><span class="pun">];</span><span class="pln"><br/>&#160; &#160; &#160; &#160; viewDescriptor</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ViewDescriptor</span><span class="pun">(</span><span class="str">"default"</span><span class="pun">);</span><span class="pln"><br/>&#160; &#160; &#160; &#160; viewDescriptor</span><span!
  class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">setMimeType</span><span class="pun">(</span><span class="str">"text/plain"</span><span class="pun">);</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> viewDescriptor</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/>&#160; &#160; <br/>&#160; &#160; </span><span class="com">/*<br/>&#160; &#160; &#160;* Here the view is created which contains the InputStream and the mime-type <br/>&#160; &#160; &#160;*/</span><span class="pln"><br/>&#160; &#160; </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">View</span><span class="pln"> getView</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> viewId</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">throws</span><span clas!
 s="pln"> </span><span class="typ">Exception</span><span class=!
 "pln"> <
/span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="typ">View</span><span class="pln"> view </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">View</span><span class="pun">();</span><span class="pln"><br/>&#160; &#160; &#160; &#160; view</span><span class="pun">.</span><span class="pln">setInputStream</span><span class="pun">(</span><span class="pln">getHelloWorld</span><span class="pun">());</span><span class="pln"><br/>&#160; &#160; &#160; &#160; view</span><span class="pun">.</span><span class="pln">setMimeType</span><span class="pun">(</span><span class="str">"text/plain"</span><span class="pun">);</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> view</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/><br/!
 >&#160; &#160; <br/>&#160; &#160; </span><span class="com">/*<br/>&#160; &#160; &#160;* This private method creates the InputStream used by the view<br/>&#160; &#160; &#160;*/</span><span class="pln"><br/>&#160; &#160; </span><span class="kwd">private</span><span class="pln"> </span><span class="typ">InputStream</span><span class="pln"> getHelloWorld</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="typ">String</span><span class="pln"> helloWorld </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Hello World!"</span><span class="pun">;</span><span class="pln"><br/>&#160; &#160; &#160; &#160; </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ByteArrayInputStream</span><span class="pun">(</span><span class="pln">helloWorld</span><span class="pun">.</span><span !
 class="pln">getBytes</span><span class="pun">(</span><span cla!
 ss="str"
>"utf-8"</span><span class="pun">));</span><span class="pln"><br/>&#160; &#160; </span><span class="pun">}</span><span class="pln"><br/></span><span class="pun">}</span></pre>
+
+</div>
+<ul><li>while you develop you may use several build cycles and in some cases it makes sense to make a build clean. to avoid the annoying "[input] Do you really want to delete your deployed (maybe productive) Yanel version at '$YANELHOME/local/apache-tomcat-5.5.20/webapps/yanel'? (yes/NO):" you can set <tt>force-clean=true</tt> in your $YANELHOME/src/build/local.build.properties 
+</li><li>add a <a class="wikipage" href="/Wiki.jsp?page=Resource%20Type%20Configuration">Resource Type Configuration</a> (e.g $YANELHOME/src/realms/use-cases/yanel/rti/helloworld.txt.yanel-rc):
+</li></ul><div class="prettify">
+<pre class="prettyprint"><span class="tag">&lt;?</span><span class="embsrc"><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span></span><span class="tag">?&gt;</span><span class="pln"><br/></span><span class="tag">&lt;yanel:resource-config </span><span class="atn">xmlns:yanel</span><span class="tag">=</span><span class="atv">"http://www.wyona.org/yanel/rti/1.0"</span><span class="tag">&gt;</span><span class="pln"><br/>&#160; </span><span class="tag">&lt;yanel:rti </span><span class="atn">name</span><span class="tag">=</span><span class="atv">"hello-world"</span><span class="tag"> </span><span class="atn">namespace</span><span class="tag">=</span><span class="atv">"http://yourname.org/yanel/resource/1.0"</span><span class="atn">/</span><span class="tag">&gt;</span><span class="pln"><br/></span><span class="tag">&lt;/yanel:resource-config&gt;</span></pre>
+
+</div>
+<ul><li>browse to http://localhost:8080/yanel/test/use-cases/helloworld.txt and have fun...
+</li></ul><a href="create_a_simple_xml_hello-world_resource-type_based_on_basicxmlresource.html">In the next tutorial we will have a look at a simple XML based resource</a>
+
+
+  </body>
+</html>



More information about the Yanel-commits mailing list