cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r843923 - in /websites/staging/cayenne/trunk/content: ./ docs/3.1/tutorial-rop/ docs/3.1/tutorial-rop/css/ docs/3.1/upgrade-guide/ docs/3.1/upgrade-guide/css/
Date Wed, 26 Dec 2012 19:21:44 GMT
Author: buildbot
Date: Wed Dec 26 19:21:44 2012
New Revision: 843923

Log:
Staging update by buildbot for cayenne

Added:
    websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/highlight.css
    websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/highlight.css
Modified:
    websites/staging/cayenne/trunk/content/   (props changed)
    websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch03.html
    websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch04.html
    websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch05.html
    websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/cayenne-doc.css
    websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/ar01.html
    websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/cayenne-doc.css

Propchange: websites/staging/cayenne/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Dec 26 19:21:44 2012
@@ -1 +1 @@
-1425994
+1425995

Modified: websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch03.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch03.html (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch03.html Wed Dec 26 19:21:44
2012
@@ -2,36 +2,36 @@
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Chapter&nbsp;3.&nbsp;Setting up Hessian Web Service</title><link
rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta name="generator" content="DocBook
XSL-NS Stylesheets V1.76.1"><link rel="home" href="index.html" title="Getting Started
with Cayenne ROP (Remote Object Persistence)"><link rel="up" href="getting-started-rop-part2.html"
title="Part&nbsp;II.&nbsp;Remote Object Persistence Quick Start"><link rel="prev"
href="ch02.html" title="Chapter&nbsp;2.&nbsp;Starting Client Project"><link
rel="next" href="ch04.html" title="Chapter&nbsp;4.&nbsp;Porting Existing Code to Connect
to a Web Service Instead of a Database"></head><body bgcolor="white" text="black"
link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%"
summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;3.&nbsp;Setting
up Hessian Web Service</th></tr><tr><td width="20%" align="left"><a
accesskey="p" href="ch02.html">Prev</a>&nbsp;</td>
 <th width="60%" align="center">Part&nbsp;II.&nbsp;Remote Object Persistence
Quick Start</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Next</a></td></tr></table><hr></div><div
class="chapter" title="Chapter&nbsp;3.&nbsp;Setting up Hessian Web Service"><div
class="titlepage"><div><div><h2 class="title"><a name="d0e104"></a>Chapter&nbsp;3.&nbsp;Setting
up Hessian Web Service</h2></div></div></div><div class="toc"><p><b>Table
of Contents</b></p><dl><dt><span class="section"><a href="ch03.html#setting-up-dependencies">Setting
up Dependencies</a></span></dt><dt><span class="section"><a
href="ch03.html#client-classes-on-server">Client Classes on the Server</a></span></dt><dt><span
class="section"><a href="ch03.html#configuring-web-xml">Configuring web.xml</a></span></dt><dt><span
class="section"><a href="ch03.html#running-rop-server">Running ROP Server</a></span></dt></dl></div><div
class="section" title="Setting up Dependencies"><div class="titlepage"><
 div><div><h2 class="title"><a name="setting-up-dependencies"></a>Setting
up Dependencies</h2></div></div></div><p>Now lets get back to
the "tutorial" project that contains a web application and set up
             dependencies. The only extra one that we don't have yet is resin-hessian.jar,
just like
-            the client, so let's add it (and the caucho repo declaration) to the pom.xml.</p><pre
class="programlisting">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	
+            the client, so let's add it (and the caucho repo declaration) to the pom.xml.</p><pre
class="programlisting">&lt;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"&gt;
-	...
-	&lt;dependencies&gt;
-		...
-		&lt;dependency&gt;
-			&lt;groupId&gt;com.caucho&lt;/groupId&gt;
-			&lt;artifactId&gt;resin-hessian&lt;/artifactId&gt;
-			&lt;version&gt;3.1.6&lt;/version&gt;
-		&lt;/dependency&gt;
-	&lt;/dependencies&gt;
+    ...
+    &lt;dependencies&gt;
+        ...
+        &lt;dependency&gt;
+            &lt;groupId&gt;com.caucho&lt;/groupId&gt;
+            &lt;artifactId&gt;resin-hessian&lt;/artifactId&gt;
+            &lt;version&gt;3.1.6&lt;/version&gt;
+        &lt;/dependency&gt;
+    &lt;/dependencies&gt;
 
-	&lt;build&gt;
-	...
-	&lt;/build&gt;
-	
-	&lt;repositories&gt;
-		&lt;repository&gt;
-			&lt;id&gt;caucho&lt;/id&gt;
-			&lt;name&gt;Caucho Repository&lt;/name&gt;
-			&lt;url&gt;http://caucho.com/m2&lt;/url&gt;
-			&lt;layout&gt;default&lt;/layout&gt;
-			&lt;snapshots&gt;
-				&lt;enabled&gt;false&lt;/enabled&gt;
-			&lt;/snapshots&gt;
-			&lt;releases&gt;
-				&lt;enabled&gt;true&lt;/enabled&gt;
-			&lt;/releases&gt;
-		&lt;/repository&gt;
-	&lt;/repositories&gt;
+    &lt;build&gt;
+    ...
+    &lt;/build&gt;
+
+    &lt;repositories&gt;
+        &lt;repository&gt;
+            &lt;id&gt;caucho&lt;/id&gt;
+            &lt;name&gt;Caucho Repository&lt;/name&gt;
+            &lt;url&gt;http://caucho.com/m2&lt;/url&gt;
+            &lt;layout&gt;default&lt;/layout&gt;
+            &lt;snapshots&gt;
+                &lt;enabled&gt;false&lt;/enabled&gt;
+            &lt;/snapshots&gt;
+            &lt;releases&gt;
+                &lt;enabled&gt;true&lt;/enabled&gt;
+            &lt;/releases&gt;
+        &lt;/repository&gt;
+    &lt;/repositories&gt;
 &lt;/project&gt;</pre><table class="noteMacro" border="1" id="d0e114"><col
width="4%"><col width="96%"><tbody><tr>
                     <td valign="top">
                         <div class="mediaobject"><img src="images/warning.gif"></div>
@@ -51,16 +51,16 @@
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
 &lt;web-app&gt;
-	&lt;display-name&gt;Cayenne Tutorial&lt;/display-name&gt;
-	&lt;servlet&gt;
-		&lt;servlet-name&gt;cayenne-project&lt;/servlet-name&gt;
-		&lt;servlet-class&gt;org.apache.cayenne.configuration.rop.server.ROPHessianServlet&lt;/servlet-class&gt;
+    &lt;display-name&gt;Cayenne Tutorial&lt;/display-name&gt;
+    &lt;servlet&gt;
+        &lt;servlet-name&gt;cayenne-project&lt;/servlet-name&gt;
+        &lt;servlet-class&gt;org.apache.cayenne.configuration.rop.server.ROPHessianServlet&lt;/servlet-class&gt;
         &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
-	&lt;/servlet&gt;
-	&lt;servlet-mapping&gt;
-		&lt;servlet-name&gt;cayenne-project&lt;/servlet-name&gt;
-		&lt;url-pattern&gt;/cayenne-service&lt;/url-pattern&gt;
-	&lt;/servlet-mapping&gt;
+    &lt;/servlet&gt;
+    &lt;servlet-mapping&gt;
+        &lt;servlet-name&gt;cayenne-project&lt;/servlet-name&gt;
+        &lt;url-pattern&gt;/cayenne-service&lt;/url-pattern&gt;
+    &lt;/servlet-mapping&gt;
 &lt;/web-app&gt;</pre><table class="noteMacro" border="1" id="d0e146"><col
width="4%"><col width="96%"><tbody><tr>
                     <td valign="top">
                         <div class="mediaobject"><img src="images/warning.gif"></div>
@@ -88,8 +88,8 @@ INFO::Started SelectChannelConnector@0.0
 INFO: Loading XML configuration resource from file:cayenne-project.xml
 INFO: loading user name and password.
 INFO: Created connection pool: jdbc:derby:memory:testdb;create=true
-	Driver class: org.apache.derby.jdbc.EmbeddedDriver
-	Min. connections in the pool: 1
-	Max. connections in the pool: 1</pre><p>Cayenne ROP service URL is <span
class="italic">http://localhost:8080/tutorial/cayenne-service</span>. If you click
on it, you
+    Driver class: org.apache.derby.jdbc.EmbeddedDriver
+    Min. connections in the pool: 1
+    Max. connections in the pool: 1</pre><p>Cayenne ROP service URL is <span
class="italic">http://localhost:8080/tutorial/cayenne-service</span>. If you click
on it, you
             will see "Hessian Requires POST" message, that means that the service is alive,
but you
             need a client other than the web browser to access it.</p></div></div><div
class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td
width="40%" align="left"><a accesskey="p" href="ch02.html">Prev</a>&nbsp;</td><td
width="20%" align="center"><a accesskey="u" href="getting-started-rop-part2.html">Up</a></td><td
width="40%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Next</a></td></tr><tr><td
width="40%" align="left" valign="top">Chapter&nbsp;2.&nbsp;Starting Client Project&nbsp;</td><td
width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td
width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;4.&nbsp;Porting Existing
Code to Connect to a Web Service Instead of a Database</td></tr></table></div></body></html>
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch04.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch04.html (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch04.html Wed Dec 26 19:21:44
2012
@@ -5,57 +5,57 @@
             So the code below will be similar to the code presented in the first Cayenne
                 Getting Started Guide, although with a few ROP-specific parts required to
bootstrap the
             ObjectContext.</p><p>Let's start by creating an empty Main class
with the standard main() method in the
-            client project:</p><pre class="programlisting">package org.example.cayenne.persistent.client;
+            client project:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">package</span> org.example.cayenne.persistent.client;
 
-public class Main {
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span
xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> Main {
 
-    public static void main(String[] args) {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span>
<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">static</span> <span
xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">void</span> main(String[]
args) {
 
     }
 }</pre><p>Now the part that is actually different from regular Cayenne - establishing
the server
-            connection and obtaining the ObjectContext:</p><pre class="programlisting">ClientConnection
connection = new HessianConnection("http://localhost:8080/tutorial/cayenne-service");
-DataChannel channel = new ClientChannel(connection, false, new DefaultEventManager(), false);
-ObjectContext context = new CayenneContext(channel);</pre><p>Note that the "channel"
can be used to create as many peer ObjectContexts as needed
+            connection and obtaining the ObjectContext:</p><pre class="programlisting">ClientConnection
connection = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
HessianConnection(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial/cayenne-service"</span>);
+DataChannel channel = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
ClientChannel(connection, false, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
DefaultEventManager(), false);
+ObjectContext context = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
CayenneContext(channel);</pre><p>Note that the "channel" can be used to create
as many peer ObjectContexts as needed
             over the same connection, while ObjectContext is a kind of isolated "persistence
             session", similar to the server-side context. A few more notes. Since we are
using
             HTTP(S) to communicate with ROP server, there's no need to explicitly close the
             connection (or channel, or context).</p><p>So now let's do the same
persistent operaions that we did in the first tutorial "Main"
-            class. Let's start by creating and saving some objects:</p><pre class="programlisting">//
creating new Artist
-Artist picasso = context.newObject(Artist.class);
-picasso.setName("Pablo Picasso");
+            class. Let's start by creating and saving some objects:</p><pre class="programlisting"><span
xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// creating new Artist</span>
+Artist picasso = context.newObject(Artist.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>);
+picasso.setName(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Pablo
Picasso"</span>);
 
-// Creating other objects
-Gallery metropolitan = context.newObject(Gallery.class);
-metropolitan.setName("Metropolitan Museum of Art");
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// Creating other objects</span>
+Gallery metropolitan = context.newObject(Gallery.<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">class</span>);
+metropolitan.setName(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Metropolitan
Museum of Art"</span>);
 
-Painting girl = context.newObject(Painting.class);
-girl.setName("Girl Reading at a Table");
+Painting girl = context.newObject(Painting.<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">class</span>);
+girl.setName(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Girl Reading
at a Table"</span>);
 
-Painting stein = context.newObject(Painting.class);
-stein.setName("Gertrude Stein");
+Painting stein = context.newObject(Painting.<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">class</span>);
+stein.setName(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Gertrude
Stein"</span>);
 
-// connecting objects together via relationships
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// connecting objects
together via relationships</span>
 picasso.addToPaintings(girl);
 picasso.addToPaintings(stein);
 
 girl.setGallery(metropolitan);
 stein.setGallery(metropolitan);
 
-// saving all the changes above
-context.commitChanges();</pre><p>Now let's select them back:</p><pre
class="programlisting">// SelectQuery examples
-SelectQuery select1 = new SelectQuery(Painting.class);
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// saving all the changes
above</span>
+context.commitChanges();</pre><p>Now let's select them back:</p><pre
class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//
SelectQuery examples</span>
+SelectQuery select1 = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
SelectQuery(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>);
 List&lt;Painting&gt; paintings1 = context.performQuery(select1);
 
 Expression qualifier2 = ExpressionFactory.likeIgnoreCaseExp(
-        Painting.NAME_PROPERTY, "gi%");
-SelectQuery select2 = new SelectQuery(Painting.class, qualifier2);
+        Painting.NAME_PROPERTY, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"gi%"</span>);
+SelectQuery select2 = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
SelectQuery(Painting.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>,
qualifier2);
 List&lt;Painting&gt; paintings2 = context.performQuery(select2);</pre><p>Now,
delete:</p><pre class="programlisting">Expression qualifier = ExpressionFactory.matchExp(Artist.NAME_PROPERTY,
-                "Pablo Picasso");
-SelectQuery selectToDelete = new SelectQuery(Artist.class, qualifier);
+                <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Pablo
Picasso"</span>);
+SelectQuery selectToDelete = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
SelectQuery(Artist.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>,
qualifier);
 Artist picasso = (Artist) DataObjectUtils.objectForQuery(context,
         selectToDelete);
 
-if (picasso != null) {
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">if</span> (picasso
!= null) {
     context.deleteObject(picasso);
     context.commitChanges();
 }</pre><p>This code is exactly the same as in the first tutorial. So now let's
try running the

Modified: websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch05.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch05.html (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/ch05.html Wed Dec 26 19:21:44
2012
@@ -20,7 +20,7 @@
     &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
     &lt;realm-name&gt;Cayenne Realm&lt;/realm-name&gt;
 &lt;/login-config&gt;
-	
+
 &lt;security-role&gt;
     &lt;role-name&gt;cayenne-service-user&lt;/role-name&gt;
 &lt;/security-role&gt;</pre></div><div class="section" title="Configuring
Jetty for BASIC Authentication"><div class="titlepage"><div><div><h2
class="title"><a name="configuring-jetty"></a>Configuring Jetty for BASIC Authentication</h2></div></div></div><table
class="noteMacro" border="1" id="d0e231"><col width="4%"><col width="96%"><tbody><tr>
@@ -32,57 +32,57 @@
                         the same thing.</td>
                 </tr></tbody></table><p>Open pom.xml in the server
project and configure a "userRealm" for the Jetty
             plugin:</p><pre class="programlisting">&lt;plugin&gt;
-	&lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
-		&lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;
-		&lt;version&gt;6.1.22&lt;/version&gt;
-		&lt;!-- adding configuration below: --&gt;
-		&lt;configuration&gt;
-			&lt;userRealms&gt;
-				&lt;userRealm implementation="org.mortbay.jetty.security.HashUserRealm"&gt;
-					&lt;!-- this name must match the realm-name in web.xml --&gt;
-					&lt;name&gt;Cayenne Realm&lt;/name&gt;
-					&lt;config&gt;realm.properties&lt;/config&gt;
-				&lt;/userRealm&gt;
-			&lt;/userRealms&gt;
-		&lt;/configuration&gt;
-	&lt;/plugin&gt;
+    &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
+        &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;
+        &lt;version&gt;6.1.22&lt;/version&gt;
+        &lt;!-- adding configuration below: --&gt;
+        &lt;configuration&gt;
+            &lt;userRealms&gt;
+                &lt;userRealm implementation="org.mortbay.jetty.security.HashUserRealm"&gt;
+                    &lt;!-- this name must match the realm-name in web.xml --&gt;
+                    &lt;name&gt;Cayenne Realm&lt;/name&gt;
+                    &lt;config&gt;realm.properties&lt;/config&gt;
+                &lt;/userRealm&gt;
+            &lt;/userRealms&gt;
+        &lt;/configuration&gt;
+    &lt;/plugin&gt;
 &lt;/plugins&gt;</pre><p>Now create a new file called {["realm.properties"}}
<span class="italic">at the
                 root of the server project</span> and put user login/password in there:</p><pre
class="programlisting">cayenne-user: secret,cayenne-service-user</pre><p>.</p><p>Now
let's stop the server and start it again. Everything should start as before, but
             if you go to <span class="italic">http://localhost:8080/tutorial/cayenne-service</span>,
your browser should pop
             up authentication dialog. Enter "<span class="italic">cayenne-user/secret</span>"
             for user name / password, and you should see "<span class="italic">Hessian
Requires
                 POST</span>" message. So the server is now secured.</p></div><div
class="section" title="Running Client with Basic Authentication"><div class="titlepage"><div><div><h2
class="title"><a name="running-client"></a>Running Client with Basic Authentication</h2></div></div></div><p>If
you run the client without any changes, you'll get the following error:</p><pre class="programlisting">org.apache.cayenne.remote.hessian.HessianConnection
connect
-INFO: Connecting to [http://localhost:8080/tutorial/cayenne-service] - dedicated session.
+INFO: Connecting to [http:<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">//localhost:8080/tutorial/cayenne-service]
- dedicated session.</span>
 org.apache.cayenne.remote.hessian.HessianConnection connect
-INFO: Error establishing remote session. URL - http://localhost:8080/tutorial/cayenne-service;

+INFO: Error establishing remote session. URL - http:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-comment">//localhost:8080/tutorial/cayenne-service; </span>
       CAUSE - cannot retry due to server authentication, in streaming mode
 java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
-	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1257)
-	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
-	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:168)
-	at $Proxy0.establishSession(Unknown Source)
-	at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:210)
-	at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:114)
-	at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:337)
-	at org.apache.cayenne.remote.ClientChannel.&lt;init&gt;(ClientChannel.java:108)
-	at org.example.cayenne.Main.main(Main.java:25)
-Exception in thread "main" org.apache.cayenne.CayenneRuntimeException: [v.3.1M3 Sep 19 2011
07:12:41] 
-Error establishing remote session. URL - http://localhost:8080/tutorial/cayenne-service;

+    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">1257</span>)
+    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">379</span>)
+    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">168</span>)
+    at $Proxy0.establishSession(Unknown Source)
+    at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">210</span>)
+    at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">114</span>)
+    at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">337</span>)
+    at org.apache.cayenne.remote.ClientChannel.&lt;init&gt;(ClientChannel.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">108</span>)
+    at org.example.cayenne.Main.main(Main.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">25</span>)
+Exception in thread <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"main"</span>
org.apache.cayenne.CayenneRuntimeException: [v.3.1M3 Sep <span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">19</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">2011</span>
<span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">07</span>:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">12</span>:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">41</span>] 
+Error establishing remote session. URL - http:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-comment">//localhost:8080/tutorial/cayenne-service; </span>
 CAUSE - cannot retry due to server authentication, in streaming mode
-	at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:229)
-	at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:114)
-	at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:337)
-	at org.apache.cayenne.remote.ClientChannel.&lt;init&gt;(ClientChannel.java:108)
-	at org.example.cayenne.Main.main(Main.java:25)
+    at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">229</span>)
+    at org.apache.cayenne.remote.hessian.HessianConnection.getServerEventBridge(HessianConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">114</span>)
+    at org.apache.cayenne.remote.ClientChannel.setupRemoteChannelListener(ClientChannel.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">337</span>)
+    at org.apache.cayenne.remote.ClientChannel.&lt;init&gt;(ClientChannel.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">108</span>)
+    at org.example.cayenne.Main.main(Main.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">25</span>)
 Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming
mode
-	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1257)
-	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
-	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:168)
-	at $Proxy0.establishSession(Unknown Source)
-	at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:210)
-	... 4 more</pre><p>Which is exactly what you'd expect, as the client is not
authenticating itself. So
-            change the line in Main.java where we obtained an ROP connection to this:</p><pre
class="programlisting">ClientConnection connection = new HessianConnection(
-        "http://localhost:8080/tutorial/cayenne-service",
-        "cayenne-user", "secret", null);</pre><p>Try running again, and everything
should work as before. Obviously in production
+    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">1257</span>)
+    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">379</span>)
+    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:<span xmlns="http://www.w3.org/1999/xhtml"
class="hl-number">168</span>)
+    at $Proxy0.establishSession(Unknown Source)
+    at org.apache.cayenne.remote.hessian.HessianConnection.connect(HessianConnection.java:<span
xmlns="http://www.w3.org/1999/xhtml" class="hl-number">210</span>)
+    ... <span xmlns="http://www.w3.org/1999/xhtml" class="hl-number">4</span>
more</pre><p>Which is exactly what you'd expect, as the client is not authenticating
itself. So
+            change the line in Main.java where we obtained an ROP connection to this:</p><pre
class="programlisting">ClientConnection connection = <span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">new</span> HessianConnection(
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"http://localhost:8080/tutorial/cayenne-service"</span>,
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-user"</span>,
<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"secret"</span>,
null);</pre><p>Try running again, and everything should work as before. Obviously
in production
             environment, in addition to authentication you'll need to use HTTPS to access
the server
             to prevent third-party evesdropping on your password and data.</p><p>Congratulations,
you are done with the ROP tutorial!</p></div></div><div class="navfooter"><hr><table
width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a
accesskey="p" href="ch04.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a
accesskey="u" href="getting-started-rop-part2.html">Up</a></td><td width="40%"
align="right">&nbsp;</td></tr><tr><td width="40%" align="left"
valign="top">Chapter&nbsp;4.&nbsp;Porting Existing Code to Connect to a Web Service
Instead of a Database&nbsp;</td><td width="20%" align="center"><a accesskey="h"
href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/cayenne-doc.css
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/cayenne-doc.css (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/cayenne-doc.css Wed Dec
26 19:21:44 2012
@@ -0,0 +1,134 @@
+@IMPORT url("highlight.css");
+
+html {
+    padding:       0pt;
+    margin:        0pt;
+}
+
+body, td {
+    margin-left:   10%;
+    margin-right:  10%;
+    font-family:   "Lucida Grande","Trebuchet MS",Verdana,sans-serif;
+    font-size: small;
+}
+
+div {
+    margin:        0pt;
+}
+
+p {
+    text-align:    justify;
+}
+
+hr {
+    border:        1px solid gray;
+    background:    gray;
+}
+
+h1, h2, h3, h4 {
+    font-family: "Trebuchet MS","Lucida Grande",Verdana,sans-serif;
+    font-weight: normal;
+    line-height: normal;
+    margin: 1em 0 0.5em;
+}
+
+h2 {
+    color: #660000;
+    font-size: 170%;
+    padding: 0;
+}
+
+h3 {
+    border-bottom: 1px solid #EAEAEA;
+    color: #CC4400;
+    font-size: 135%;
+    padding-bottom: 3px;
+}
+
+h4 {
+    color: #AAAA99;
+    font-size: 130%;
+}
+
+pre {
+    line-height:   1.0;
+    color:         black;
+
+    -moz-tab-size: 4;
+    -o-tab-size:   4;
+    tab-size:      4;
+}
+
+pre.programlisting {
+    font-size:     10pt;
+    padding:       7pt 3pt;
+    border:        1pt solid black;
+    background:    #F9F9F6;
+    clear:         both;
+}
+
+div.table {
+    margin:        1em;
+    padding:       0.5em;
+    text-align:    center;
+}
+
+table[frame=void] {
+    display:       table;
+    width:         100%;
+    border:        1px black solid;
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+table[frame=void] td {
+    padding-left:  7px;
+    padding-right: 7px;
+    border:        1px black solid;
+}
+
+table[frame=void] th {
+    padding-left:  7px;
+    padding-right: 7px;
+    border:        1px black solid;
+}
+
+.sidebar {
+    float: right;
+    margin: 10px 0 10px 30px;
+    padding: 10px 20px 20px 20px;
+    width: 33%;
+    border: 1px solid black;
+    background-color: #F4F4F4;
+    font-size: 14px;
+}
+
+.code {
+    font-family: Courier New,monospace;
+}
+
+.mediaobject {
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+.legalnotice {
+    font-size: 12px;
+    font-style: italic;
+}
+
+p.releaseinfo {
+    font-size: 100%;
+    font-weight: bold;
+    padding-top: 10px;
+}
+
+p.pubdate {
+    font-size: 120%;
+    font-weight: bold;
+}
+
+span.productname {
+    font-size: 200%;
+    font-weight: bold;
+}
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/highlight.css
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/highlight.css (added)
+++ websites/staging/cayenne/trunk/content/docs/3.1/tutorial-rop/css/highlight.css Wed Dec
26 19:21:44 2012
@@ -0,0 +1,35 @@
+/*
+   code highlight CSS resemblign the Eclipse IDE default color schema
+   @author Costin Leau
+*/
+
+.hl-keyword {
+    color: #7F0055;
+    font-weight: bold;
+}
+
+.hl-comment {
+    color: #3F5F5F;
+    font-style: italic;
+}
+
+.hl-multiline-comment {
+    color: #3F5FBF;
+    font-style: italic;
+}
+
+.hl-tag {
+    color: #3F7F7F;
+}
+
+.hl-attribute {
+    color: #7F007F;
+}
+
+.hl-value {
+    color: #2A00FF;
+}
+
+.hl-string {
+    color: #2A00FF !important;
+}
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/ar01.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/ar01.html (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/ar01.html Wed Dec 26 19:21:44
2012
@@ -23,7 +23,7 @@
                 annotations-based DI container to configure its services. The container provides
DI
                 services and exposes Cayenne extension points, but does not interfere with
other DI
                 containers that may be present in the application. I.e. it is invisible to
the users
-                who do not care about advanced Cayenne customization.</p></div><div
class="section" title="Bootstrapping Cayenne in Various Environments"><div class="titlepage"><div><div><h3
class="title"><a name="d0e67"></a>Bootstrapping Cayenne in Various Environments</h3></div></div></div><p>
Here is a simple example of starting a server-side Cayenne stack:</p><pre class="programlisting">ServerRuntime
runtime = new ServerRuntime("cayenne-UntitledDomain.xml");</pre><p>For more detailed
examples check the tutorials and other documentation.</p></div><div class="section"
title="Configuring Local DataSources, Removal of JNDI Hack"><div class="titlepage"><div><div><h3
class="title"><a name="d0e76"></a>Configuring Local DataSources, Removal of
JNDI Hack</h3></div></div></div><p>Cayenne 3.1 provides a property-based
mechanism to override Modeler DataSource
+                who do not care about advanced Cayenne customization.</p></div><div
class="section" title="Bootstrapping Cayenne in Various Environments"><div class="titlepage"><div><div><h3
class="title"><a name="d0e67"></a>Bootstrapping Cayenne in Various Environments</h3></div></div></div><p>
Here is a simple example of starting a server-side Cayenne stack:</p><pre class="programlisting">ServerRuntime
runtime = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
ServerRuntime(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-UntitledDomain.xml"</span>);</pre><p>For
more detailed examples check the tutorials and other documentation.</p></div><div
class="section" title="Configuring Local DataSources, Removal of JNDI Hack"><div class="titlepage"><div><div><h3
class="title"><a name="d0e76"></a>Configuring Local DataSources, Removal of
JNDI Hack</h3></div></div></div><p>Cayenne 3.1 provides a property-based
mechanism to override Modeler
  DataSource
                 definitions, regardless of whether they are driver configurations, JNDI,
DBCP, etc.
                 A quick configuration example is shown below:</p><pre class="programlisting">-Dcayenne.jdbc.driver=com.mysql.jdbc.Driver
-Dcayenne.jdbc.url=jdbc:mysql://localhost/mydb \
 -Dcayenne.jdbc.username=user -Dcayenne.jdbc.password=password</pre><p>For more
details and configuration options see javadocs of
@@ -37,23 +37,23 @@
                 experience with Cayenne 3.0 shows that mapping listeners in the Modeler doesn't
                 scale well to complex applications, and 3.0 API for mapping the listeners
is hard to
                 use. In 3.1 you can annotate listener methods and register multiple callback
methods
-                with a single call. </p><pre class="programlisting">// declare
a listener with annotated methods
-class MyListener {
-    @PostLoad(Entity1.class)
-    @PostPersist(Entity1.class)
-    void postLoad(Object object) {
+                with a single call. </p><pre class="programlisting"><span
xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// declare a listener with annotated
methods</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> MyListener
{
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@PostLoad(Entity1.class)</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@PostPersist(Entity1.class)</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">void</span>
postLoad(Object object) {
         ....
     }
 }
 
-// register a listener
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// register a listener</span>
 ServerRuntime runtime = ..
-MyListener listener = new MyListener();
+MyListener listener = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
MyListener();
 runtime.getChannel().getEntityResolver().getCallbackRegistry().addListener(listener);</pre><p>Moreover,
unlike JPA annotations, Cayenne allows to attach a listener to a set of
                 entities not known to the listener upfront, but that are all annotated with
some
-                custom annotation:</p><pre class="programlisting">class MyListener
{
-    @PostLoad(entityAnnotations = CustomAnnotation.class)
-    void postLoad(Object object) {
+                custom annotation:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">class</span> MyListener {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@PostLoad(entityAnnotations
= CustomAnnotation.class)</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">void</span>
postLoad(Object object) {
         ....
     }
 }</pre></div><div class="section" title="DataChannelFilter for Intercepting
DataDomain Operations"><div class="titlepage"><div><div><h3 class="title"><a
name="d0e106"></a>DataChannelFilter for Intercepting DataDomain Operations</h3></div></div></div><p>Cayenne
now features a DataChannelFilter interface that allows to intercept and
@@ -61,18 +61,18 @@ runtime.getChannel().getEntityResolver()
                 DataDomain). It provides a chain of command API very similar to servlet filters.
                 Filters are widely used by "cayenne-lifecyle" extensions and allow to build
powerful
                 custom object lifecycle-aware code. To install a filter, the following API
is
-                used:</p><pre class="programlisting">class MyFilter implement
DataChannelFilter { .. }
+                used:</p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">class</span> MyFilter implement DataChannelFilter { .. }
 
-MyFilter filter = new MyFilter();
+MyFilter filter = <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span>
MyFilter();
 ServerRuntime runtime = ..
 runtime.getDataDomain().addFilter(filter);</pre><p>Very often filters mark some
of their own methods with lifecycle annotations so
                 that certain operations can be triggered by Cayenne inside the scope of filter's
                 onQuery() or onSync() methods. To ensure annotated methods are invoked, filter
-                registration should be combined with listener registration:</p><pre
class="programlisting">MyFilter filter = new MyFilter();
+                registration should be combined with listener registration:</p><pre
class="programlisting">MyFilter filter = <span xmlns="http://www.w3.org/1999/xhtml"
class="hl-keyword">new</span> MyFilter();
 ServerRuntime runtime = ..
 runtime.getDataDomain().addFilter(filter);
 runtime.getDataDomain().getEntityResolver().getCallbackRegistry().addListener(filter);
-// noticed that by default runtime.getDataDomain() is equivalent to runtime.getChannel()</pre></div></div><div
class="section" title="CayenneModeler"><div class="titlepage"><div><div><h2
class="title"><a name="cayenne-modeler"></a>CayenneModeler</h2></div></div></div><div
class="section" title="Java Preferences API"><div class="titlepage"><div><div><h3
class="title"><a name="d0e120"></a>Java Preferences API</h3></div></div></div><p>We
got rid of HSQLDB-based preferences storage, and are using standard Java
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// noticed that by default
runtime.getDataDomain() is equivalent to runtime.getChannel()</span></pre></div></div><div
class="section" title="CayenneModeler"><div class="titlepage"><div><div><h2
class="title"><a name="cayenne-modeler"></a>CayenneModeler</h2></div></div></div><div
class="section" title="Java Preferences API"><div class="titlepage"><div><div><h3
class="title"><a name="d0e120"></a>Java Preferences API</h3></div></div></div><p>We
got rid of HSQLDB-based preferences storage, and are using standard Java
                 Preferences API for the Modeler preferences. This solved a long-standing
stability
                 issue with Modeler preferences. So no more lost user preferences.</p></div></div><div
class="section" title="Lifecycle Extensions"><div class="titlepage"><div><div><h2
class="title"><a name="lifecycle-extensions"></a>Lifecycle Extensions</h2></div></div></div><p>Cayenne
3.1 includes an optional cayenne-lifecyle module that implements a few useful
             extensions based on DataChannelFilters and lifecycle annotations. Those include
a

Modified: websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/cayenne-doc.css
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/cayenne-doc.css (original)
+++ websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/cayenne-doc.css Wed
Dec 26 19:21:44 2012
@@ -0,0 +1,134 @@
+@IMPORT url("highlight.css");
+
+html {
+    padding:       0pt;
+    margin:        0pt;
+}
+
+body, td {
+    margin-left:   10%;
+    margin-right:  10%;
+    font-family:   "Lucida Grande","Trebuchet MS",Verdana,sans-serif;
+    font-size: small;
+}
+
+div {
+    margin:        0pt;
+}
+
+p {
+    text-align:    justify;
+}
+
+hr {
+    border:        1px solid gray;
+    background:    gray;
+}
+
+h1, h2, h3, h4 {
+    font-family: "Trebuchet MS","Lucida Grande",Verdana,sans-serif;
+    font-weight: normal;
+    line-height: normal;
+    margin: 1em 0 0.5em;
+}
+
+h2 {
+    color: #660000;
+    font-size: 170%;
+    padding: 0;
+}
+
+h3 {
+    border-bottom: 1px solid #EAEAEA;
+    color: #CC4400;
+    font-size: 135%;
+    padding-bottom: 3px;
+}
+
+h4 {
+    color: #AAAA99;
+    font-size: 130%;
+}
+
+pre {
+    line-height:   1.0;
+    color:         black;
+
+    -moz-tab-size: 4;
+    -o-tab-size:   4;
+    tab-size:      4;
+}
+
+pre.programlisting {
+    font-size:     10pt;
+    padding:       7pt 3pt;
+    border:        1pt solid black;
+    background:    #F9F9F6;
+    clear:         both;
+}
+
+div.table {
+    margin:        1em;
+    padding:       0.5em;
+    text-align:    center;
+}
+
+table[frame=void] {
+    display:       table;
+    width:         100%;
+    border:        1px black solid;
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+table[frame=void] td {
+    padding-left:  7px;
+    padding-right: 7px;
+    border:        1px black solid;
+}
+
+table[frame=void] th {
+    padding-left:  7px;
+    padding-right: 7px;
+    border:        1px black solid;
+}
+
+.sidebar {
+    float: right;
+    margin: 10px 0 10px 30px;
+    padding: 10px 20px 20px 20px;
+    width: 33%;
+    border: 1px solid black;
+    background-color: #F4F4F4;
+    font-size: 14px;
+}
+
+.code {
+    font-family: Courier New,monospace;
+}
+
+.mediaobject {
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+.legalnotice {
+    font-size: 12px;
+    font-style: italic;
+}
+
+p.releaseinfo {
+    font-size: 100%;
+    font-weight: bold;
+    padding-top: 10px;
+}
+
+p.pubdate {
+    font-size: 120%;
+    font-weight: bold;
+}
+
+span.productname {
+    font-size: 200%;
+    font-weight: bold;
+}
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/highlight.css
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/highlight.css (added)
+++ websites/staging/cayenne/trunk/content/docs/3.1/upgrade-guide/css/highlight.css Wed Dec
26 19:21:44 2012
@@ -0,0 +1,35 @@
+/*
+   code highlight CSS resemblign the Eclipse IDE default color schema
+   @author Costin Leau
+*/
+
+.hl-keyword {
+    color: #7F0055;
+    font-weight: bold;
+}
+
+.hl-comment {
+    color: #3F5F5F;
+    font-style: italic;
+}
+
+.hl-multiline-comment {
+    color: #3F5FBF;
+    font-style: italic;
+}
+
+.hl-tag {
+    color: #3F7F7F;
+}
+
+.hl-attribute {
+    color: #7F007F;
+}
+
+.hl-value {
+    color: #2A00FF;
+}
+
+.hl-string {
+    color: #2A00FF !important;
+}
\ No newline at end of file



Mime
View raw message