<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <title>eleon</title>
  <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/rss" />
  <subtitle>eleon</subtitle>
  <entry>
    <title>Cloud Foundry von vmware</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/cloud-foundry-von-vmware" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/cloud-foundry-von-vmware</id>
    <updated>2011-08-01T11:22:11Z</updated>
    <published>2011-08-01T11:11:28Z</published>
    <summary type="html">&lt;p&gt;
	Nachdem die erste Version der vmware Cloud Foundry noch eine Deployment Umgebung für die Amazon AWS Cloud Plattform war, steht seit einiger Zeit die neue &lt;a href="http://www.cloudfoundry.com" target="_blank"&gt;Cloud Foundry&lt;/a&gt; als Beta-Version zur Verfügung.&lt;/p&gt;
&lt;p&gt;
	Java, Spring, Grails und Rails Entwickler können hier ihre Anwendungen in kürzester Zeit in der Cloud veröffentlichen.&lt;/p&gt;
&lt;p&gt;
	Das Vorgehen ist denkbar bequem:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		Developer Zugang anfordern&lt;/li&gt;
	&lt;li&gt;
		Command Line Tool oder Springsource ToolSuite Plugin installieren (wir nutzen die Spring Source Toolsuite sowie das Spring Roo Cloud Foundry Addon)&lt;/li&gt;
	&lt;li&gt;
		Service registrieren (MySQL, Mongo DB oder Redis)&lt;/li&gt;
	&lt;li&gt;
		Anwendung deployen und an den Service binden&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	Alles ist äußerst komfortabel, den Beta-Zustand merken wir (bisher) nur daran, dass manche commands nicht laufen - diese ließen sich jedoch immer über workarounds umgehen.&lt;/p&gt;
&lt;p&gt;
	Als Test lassen wir derzeit eine Demo-Version unserer Open Source Software &lt;a href="http://www.timejoe.com" target="_blank"&gt;Timejoe&lt;/a&gt; laufen, die unter folgender URL aufgerufen werden kann:&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://timejoe.cloudfoundry.com" target="_blank"&gt;timejoe.cloudfoundry.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Sollte einer der User-Accounts gerade nicht gehen, hat wohl ein anderer Tester die Zugangsdaten verändert. Nach dem nächsten Restart werden die Daten wieder zurückgesetzt. Sollten Sie es eilig haben, senden Sie uns einfach kurz eine Mail dann setzen wir die Anwendung direkt zurück.&lt;/p&gt;
&lt;p&gt;
	Zusammengefasst: einfacher kann das Deployment von Spring oder Spring Grails Applikationen in eine Cloud wirklich nicht sein. Wir sind gespannt auf das Ende der Beta-Phase und die Preisstruktur für größere Produktivanwendungen.&lt;/p&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-08-01T11:11:28Z</dc:date>
  </entry>
  <entry>
    <title>Active Records in Grails</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/active-records-in-grails" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/active-records-in-grails</id>
    <updated>2011-07-28T21:02:28Z</updated>
    <published>2011-07-28T11:15:44Z</published>
    <summary type="html">&lt;p&gt;
	Grails folgt ja für die Domain Klassen dem &lt;a href="http://martinfowler.com/eaaCatalog/activeRecord.html" target="_blank"&gt;Active Record Pattern&lt;/a&gt;. Das Scaffolding, also das Generieren von Controllern und Views verleitet dann gerne dazu, frühzeitig in die View-Schicht zu gehen. Also Folge bekommen die Controller zu viel Verantwortlichkeiten und übernehmen große Teile der Business Logik - ggf. wird dann noch mal in die Serviceschicht ausgelagert, aber die Domains bleiben weitgehend anämisch (&lt;a href="http://en.wikipedia.org/wiki/Anemic_Domain_Model" target="_blank"&gt;Anemic Domain Model&lt;/a&gt;), eigentlich ein Anti-Pattern.&lt;/p&gt;
&lt;p&gt;
	Grails unterstützt jedoch das Active Record Pattern mit weit mehr, als nur die Domainklassen um Validatoren, dynamische Finder und Persistenzmethoden auszustatten. Besonders hilfreich sind u.A. die GORM Events bei Inserts, Updates und Deletes. Anstatt z.B. das User-Passwort im Controller zu encoden, kann dies auch die User-Domainklasse automatisch übernehmen:&lt;/p&gt;
&lt;pre class="brush: groovy"&gt;
def beforeInsert() { 
	encodePassword()
} 

def beforeUpdate() { 
	if (isDirty('password')) 
		encodePassword()
}

private void encodePassword() {
	password = springSecurityService.encodePassword(password)
}&lt;/pre&gt;
&lt;p&gt;
	Die Methoden beforeInsert() und beforeUpdate() werden automatisch als Events für die jeweiligen GORM Operationen registriert. Damit ist sichergestellt, dass das Passwort immer encoded in die Datenbank geschrieben wird und dies nicht in irgendeinem Controller vergessen werden kann. Zudem lassen sich Domain-Klassen sehr viel einfacher und schneller testen, als Controller und Views (zumindest bis einschließlich Grails 1.3.7 - die 2.0 Version wird hier sicher einen riesigen Fortschritt bringen).&lt;/p&gt;
&lt;p&gt;
	Bei Methoden die dem Java Beans Naming Standard folgen, werden entsprechende properties abgeleitet (und somit auch persistiert). Hat man z.B. eine Methode&lt;/p&gt;
&lt;pre class="brush: groovy"&gt;
public float getPriceWithTax() {
	return this.price * 1.19F
}
&lt;/pre&gt;
&lt;p&gt;
	muss man daran denken, diese als nicht zu speichernde property zu deklarieren:&lt;/p&gt;
&lt;pre class="brush: groovy"&gt;
static transients = ['priceWithTax']&lt;/pre&gt;
&lt;p&gt;
	Bei der Entscheidung, was in die Domainklasse und was in die Serviceschicht gehört folgen wir der einfachen Regelung, jegliche Businesslogik die nur eine Domain betrifft in der Domain und Businesslogik die mehrere Domains betrifft in der Serviceschicht zu implementieren. Wir haben damit recht gute Erfahrungen gemacht und es erscheint es uns natürlicher, Methoden direkt auf einem Objekt und nicht auf der Serviceschicht mit dem Objekt als Parameter aufzurufen.&lt;/p&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-07-28T11:15:44Z</dc:date>
  </entry>
  <entry>
    <title>Einfache Shutdown-Message mit Grails</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/einfache-shutdown-message-mit-grails" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/einfache-shutdown-message-mit-grails</id>
    <updated>2011-07-28T09:50:35Z</updated>
    <published>2011-07-26T15:29:47Z</published>
    <summary type="html">&lt;p&gt;
	Wie informiert man User über Updates, damit sie rechtzeitig speichern und das Browserfenster schließen? Manchmal muss ein Update ja auch sehr schnell in Produktion gebracht werden und man kann nicht auf die regulär geplanten Wartungsfenster zurückgreifen. Eine zugegebenermaßen einfache, aber meist ausreichende Lösung geht wie folgt:&lt;/p&gt;
&lt;p&gt;
	In src/groovy erstellt man eine Klasse mit einem statischen leeren String. Diese Klasse könnte wie folgt aussehen:&lt;/p&gt;
&lt;pre class="brush: groovy"&gt;
class ShutdownMessage {
	private static String message = ""
	[...]getter und setter[...]
}&lt;/pre&gt;
&lt;p&gt;
	Über einen Controller ermöglicht man admins, den String zu ändern. Hier kann der Admin dann seinen Text eingeben, z.B. "Das System wird um 18 Uhr wegen Wartungsarbeiten für 15 min. nicht zur Verfügung stehen.". Dieser Teil dürfte klar sein und wird hier daher nicht mit einem Code-Beispiel unterfüttert.&lt;/p&gt;
&lt;p&gt;
	Letzter Teil ist eine kleine Taglib mit der Ausgabe der Meldung, z.B. wie folgt:&lt;/p&gt;
&lt;pre class="brush: groovy"&gt;
class ShutdownMessageTagLib {
	static namespace = "eleon"
	def message = {
		if (ShutdownMessage.getMessage() != "") {
			out &amp;lt;&amp;lt; """
				&amp;lt;div class="errors top"&amp;gt;
					${ShutdownMessage.getMessage()}
				&amp;lt;/div&amp;gt;
			"""
		}
	}
}&lt;/pre&gt;
	&lt;p&gt;Den Tag dann nur noch in views/layouts/main.gsp einbinden: &lt;/p&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;eleon:message /&amp;gt;&lt;/pre&gt;
&lt;p&gt;
	Gibt der Admin nun eine Nachricht ein, wird diese den Usern angezeigt. Nach einem Neustart ist der message-String wieder leer und somit erscheint auch keine Nachricht mehr.&lt;/p&gt;
&lt;p&gt;
	Die Nachricht wird natürlich nur nach einem Reload gezeigt, also wenn der User durch die Seite navigiert oder ein Formular abschickt. Hat man eine Anwendung, auf der die User sehr lange quasi inaktiv sind (z.B. einen längeren Text eingeben) könnte man die o.g. Taglib auch erweitern und die Systemmeldung in regelmäßigen Abständen per AJAX erfragen. Es würde sich anbieten, den User auch gleich auf bevorstehende Timeouts hinzuweisen.&lt;/p&gt;
&lt;p&gt;
	Keine große Sache, aber mit wenig Aufwand eingebaut und man hat damit doch ein besseres Gefühl bei ungeplanten Wartungsarbeiten, als wenn man die User einfach so mit einem Neustart überfällt.&lt;/p&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-07-26T15:29:47Z</dc:date>
  </entry>
  <entry>
    <title>Open Source Zeiterfassung</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/open-source-zeiterfassung" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/open-source-zeiterfassung</id>
    <updated>2011-06-25T19:14:44Z</updated>
    <published>2011-06-25T19:02:48Z</published>
    <summary type="html">&lt;p&gt;
	Zeiterfassung für Dienstleister, essentiell für Projektcontrolling, Dokumentation und Abrechnung, führt aber selten zu Begeisterung im Projektteam. Die meisten der diversen, am Markt befindlichen Zeiterfassungs-Lösungen haben wir durchgetestet und die für uns passende Lösung nicht gefunden.&lt;/p&gt;
&lt;p&gt;
	Wenn schon die Zeiterfassung an sich keinen großen Spaß macht, sollte das doch zumindest die Software mit der man arbeitet tun. Wir haben daher eine Lösung nach unseren Vorstellungen entwickelt und als Open Source Projekt unter der Apache 2 Lizenz veröffentlicht. Jeder ist eingeladen, unsere Zeiterfassungs-Software zu nutzen und falls erforderlich zu erweitern oder auf die eigenen Bedürfnisse anzupassen.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;a href="http://www.timejoe.com" target="_blank"&gt;Zur Projekt-Webseite&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;a href="http://code.google.com/p/timejoe/downloads/list" target="_blank"&gt;Download auf Google Code Page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-06-25T19:02:48Z</dc:date>
  </entry>
  <entry>
    <title>Liferay Update von Version 5.2 auf Version 6 / Fehlende Bilder</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/liferay-update-von-version-5-2-auf-version-6-fehlende-bilder" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/liferay-update-von-version-5-2-auf-version-6-fehlende-bilder</id>
    <updated>2011-06-03T09:54:47Z</updated>
    <published>2011-06-02T18:48:52Z</published>
    <summary type="html">&lt;h2&gt;
	Update nach Dokumentation&lt;/h2&gt;
&lt;p&gt;
	Ein Update von Liferay in der Version 5.2 auf Version 6 kann ein nervenaufreibendes Abenteuer werden. Nicht zuletzt aufgrund der unzähligen unterschiedlichen Dokumentationen und Anleitungen. Grundsätzlich sollte man den Anweisungen aus dem &lt;a href="http://www.liferay.com/de/documentation/liferay-portal/6.0/administration/-/ai/upgrading-lifer-4" target="_blank"&gt;Administrationshandbuch&lt;/a&gt; folgen. Das bedeutet:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		neue und aktuelle Liferay-Installation neben alter Installation aufsetzen&lt;/li&gt;
	&lt;li&gt;
		alle Standalone-Portlets aus webapps/ löschen&lt;/li&gt;
	&lt;li&gt;
		Zugang zur Datenbank mit alten Daten einrichten&lt;/li&gt;
	&lt;li&gt;
		data/ Ordner aus alter Installation in neue kopieren&lt;/li&gt;
	&lt;li&gt;
		in bin/setenv.bat/sh folgenden Parameter mit aufnehmen -Dexternal-properties=portal-legacy-5.2.properties&lt;/li&gt;
	&lt;li&gt;
		Liferay jetzt &lt;strong&gt;erstmalig&lt;/strong&gt; starten&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	Liferay nimmt nun automatisch das Update der Datenbank und des Rechtesystems vor. Danach sollte man seine Installation rudimentär testen (Insbesondere Rechte und Bilder). Läuft alle ordnungsgemäß, kann man die legacy-properties wieder rausnehmen und testen, ob die Installation nun auch mit dem neuen Rechtesystem läuft.&lt;/p&gt;
&lt;h2&gt;
	Rechtesystem geht, aber Bilder sind weg&lt;/h2&gt;
&lt;p&gt;
	Ganz sicher weg sind danach aber alle eingebetteten Bilder, da Liferay 6 die Bilder von data/images/ laden möchte, Liferay 5 diese jedoch in der Datenbank hält. Um die Bilder wieder anzuzeigen, muss man diese entweder konvertieren, oder diesen Teil des neuen Systemes wieder auf das alte Umstellen. Letzteres geht durch den Eintrag von&lt;/p&gt;
&lt;pre&gt;
image.hook.impl=com.liferay.portal.image.DatabaseHook

&lt;/pre&gt;
&lt;p&gt;
	in der portal-ext.properties.&lt;/p&gt;
&lt;p&gt;
	Ich finde es aber schöner, wenn auch dieser Teil das neue Liferay-Verhalten annimmt und die Bilder konvertiert werden, so dass sich die Installation nach dem Update vollständig wie eine "neue" Liferay 6 Installation verhält. Für die relativ simple Konvertierung der Bilder aus der Datenbank in das Filesystem, hab ich ein kleines Portlet geschrieben.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.eleon.de/documents/10378/b4dec888-dd21-422f-89a2-d10a4ebb4bcc"&gt;&lt;span&gt;ImageConverter-portlet-6.0.5.1.war&lt;/span&gt;&lt;/a&gt;&lt;span&gt; (Portlet / war, 23 kb, Quellen beiliegend)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span&gt;Mit diesem kleinen Portlet, lassen sich Bilder aus der Datenbank ins Filesystem konvertieren und umgekeht. &lt;/span&gt;Die Konvertierung vom Filesystem in die Datenbank dient rein zu Testzwecken. Bei der Bedienung des Portlets bitte die Log-Ausgabe beachten, da das Portlet im Frontend keinen Status ausgibt.&lt;/p&gt;
&lt;p&gt;
	Nach der Konvertierung der Images aus der Datenbank in das Filesystem, sollten nun auch die Bilder im Frontend wieder erscheinen (Browsercache löschen nicht vergessen. Liferay-Bilder cashen hartnäckig, auch kaputte!).&lt;/p&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-06-02T18:48:52Z</dc:date>
  </entry>
  <entry>
    <title>Grails development - Unsuccessful alter table</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/grails-development-unsuccessful-alter-table" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/grails-development-unsuccessful-alter-table</id>
    <updated>2011-07-12T18:44:43Z</updated>
    <published>2011-05-13T13:53:29Z</published>
    <summary type="html">&lt;p&gt;
	Bei laufender Projektentwicklung mit Grails h&amp;auml;ufen sich mit jeder weiteren Relation die Fehler beim Start durch nicht m&amp;ouml;gliches Setzen von Datenbank-constraints. Weil mich das nervt, hab ich das gerade bei einem Projekt geputzt ohne meine wohlgepflegten Testdaten zu verwerfen. Das vorgehen ist kein Hexenwerk. Einfach die Daten ohne den Create-Table-Statements dumpen, die Tabellen l&amp;ouml;schen und von Hibernate neu anlegen lassen und danach die Daten wieder einspielen. Hier die entsprechenden Aufrufe:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_409842"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;mysqldump -u DBUSER -pDBPASSWD &lt;/code&gt;&lt;code class="keyword"&gt;DATABASE&lt;/code&gt; &lt;code class="plain"&gt;&amp;gt; dump.sql&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;mysqldump -u DBUSER -pDBPASSWD &lt;/code&gt;&lt;code class="keyword"&gt;DATABASE&lt;/code&gt; &lt;code class="plain"&gt;-c -t &amp;gt; data.sql&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;mysql -u DBUSER -pDBPASSWD -e &lt;/code&gt;&lt;code class="string"&gt;&amp;quot;drop database DATABASE&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;mysql -u DBUSER -pDBPASSWD -e &lt;/code&gt;&lt;code class="string"&gt;&amp;quot;create database DATABASE&amp;quot;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&amp;nbsp;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;# Grails starten und die Tabellen neu anlegen lassen: &lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&amp;nbsp;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;mysql&amp;nbsp; -u DBUSER -pDBPASSWD &lt;/code&gt;&lt;code class="keyword"&gt;DATABASE&lt;/code&gt; &lt;code class="plain"&gt;-f &amp;lt; data.sql&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Beim Wiedereinstellen der Daten in der letzten Zeile kommt es in der Regel zu diversen Fehlerausgaben. &amp;quot;Dublicate entry&amp;quot; kommt vermutlich durch Daten, die im Bootstrap-Prozess angelegt wurden. &amp;quot;Table &amp;#39;x&amp;#39; doesn&amp;#39;t exist&amp;quot; kann man auch ignorieren. &amp;quot;Column &amp;#39;x&amp;#39; doesn&amp;#39;t exist&amp;quot; ist aber problematisch. In diesem Fall hillft nur das Backup einzuspielen, die zuk&amp;uuml;nftig &amp;uuml;berfl&amp;uuml;ssigen Spalten zu l&amp;ouml;schen und den Prozess von neuem zu starten.&lt;/p&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="plain"&gt;mysql -u DBUSER -pDBPASSWD &lt;/code&gt;&lt;code class="keyword"&gt;DATABASE&lt;/code&gt; &lt;code class="plain"&gt;&amp;lt; dump.sql&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="plain"&gt;mysql -u DBUSER -pDBPASSWD &lt;/code&gt;&lt;code class="keyword"&gt;DATABASE&lt;/code&gt; &lt;code class="plain"&gt;-e &lt;/code&gt;&lt;code class="string"&gt;&amp;quot;ALTER TABLE tablename DROP spaltename&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="number"&gt;
				&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
			&lt;td class="content"&gt;
				&lt;code class="plain"&gt;# und jetzt nochmal von vorne starten&lt;/code&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:53:29Z</dc:date>
  </entry>
  <entry>
    <title>Einfache JSP Pagination für Magnolia CMS</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/einfache-jsp-pagination-fur-magnolia-cms" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/einfache-jsp-pagination-fur-magnolia-cms</id>
    <updated>2011-06-03T12:35:16Z</updated>
    <published>2011-05-13T13:42:45Z</published>
    <summary type="html">&lt;p&gt;
	Oft braucht man in Magnolia eine simple Pagination. Diese kann man, wenn man nicht mit dem STK arbeitet, in einem JSP-Template wie folgt realisieren:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;%
// Request Parameter abfragen, z.B. ?page=1, ?page=2
String pageNumString = request.getParameter(
int pageNumInt = 1;
try {
	pageNumInt = Integer.parseInt(pageNumString);
} catch (NumberFormatException e) {
	// ignore; ggf. Log-Ausgabe schreiben
}

int resultcount = 0;
%&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
	Nun mit der Magnolia Taglib &amp;uuml;ber die Unterseiten iterieren und die Inhalte ausgeben:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;cms:loadpage path=&amp;quot;pfad/zur/root/seite/der/iteration&amp;quot;&amp;gt;
&amp;lt;%
resultcount++;
if ((resultcount &amp;gt; pageNumInt*10-10) &amp;amp;&amp;amp; (resultcount &amp;lt;= pageNumInt*10-1)) {
%&amp;gt;
	// Hier die Ausgabe
	&amp;lt;cms:out nodedataname=&amp;quot;title&amp;quot;&amp;gt;
	...
	...
&amp;lt;%
}                                                                      
%&amp;gt;
					
&amp;lt;/cms:out&amp;gt;&amp;lt;/cms:pageiterator&amp;gt;
&amp;lt;/cms:loadpage&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
	Anschlie&amp;szlig;end noch den Pagebrowser ausgeben:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;%
if (resultcount &amp;gt; 10) {
	int numberOfPages = (int) Math.ceil((double)resultcount/10);
	out.println(&amp;quot;&amp;lt;ul id=&amp;quot;\&amp;quot;pagination\&amp;quot;&amp;quot;&amp;gt;&amp;quot;);
	int i = 1;
	while (i &amp;lt;= numberOfPages) {
		%&amp;gt;
		&amp;lt;li&amp;gt;
		&amp;lt;a href=&amp;quot;
			${pageContext.request.contextPath}
			${actpage.handle}.html&amp;lt;% out.print(&amp;quot; ?page=&amp;quot; + i); 
		&amp;quot;&amp;gt;
		%&amp;gt;
		&amp;lt;%=if (pagenumint= i) {
			out.print(&amp;quot;class=&amp;quot;\&amp;quot;active\&amp;quot;&amp;quot;);&amp;quot; 
		} %=&amp;gt;
		&amp;lt;% out.print(&amp;quot;Seite &amp;quot; + i); i++; %&amp;gt;
		&amp;lt;/a&amp;gt;
		&amp;lt;/li&amp;gt;
		&amp;lt;%
	}
	out.println(&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;);
}
%&amp;gt;

&lt;/pre&gt;
&lt;p&gt;
	Aufgrund der wenig effizienten Iteration mittels cms:pageIterator, die immer alle Datens&amp;auml;tze durchl&amp;auml;uft, sollte bei gro&amp;szlig;en Datenmengen das Ganze &amp;uuml;ber ein Modul realisiert werden. Aber z.B. f&amp;uuml;r ein einfaches Newssystem mit in der Regel weniger als 100 Beitr&amp;auml;gen ist dieser Weg v&amp;ouml;llig ausreichend.&lt;/p&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;br /&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:42:45Z</dc:date>
  </entry>
  <entry>
    <title>Konvertieren einer Liferay-Datenbank von Latin-1 auf UTF-8</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/konvertieren-einer-liferay-datenbank-von-latin-1-auf-utf-8" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/konvertieren-einer-liferay-datenbank-von-latin-1-auf-utf-8</id>
    <updated>2011-05-13T13:52:47Z</updated>
    <published>2011-05-13T13:52:41Z</published>
    <summary type="html">&lt;div class="entry-content"&gt;
	&lt;p&gt;
		Auf dem diesj&amp;auml;hrigen Liferay-Symposium meldeten sich einige User beim Q &amp;amp; A mit Brian Chan mit der Frage, wie man eine f&amp;auml;lschlich in Latin-1 angelegte Datenbank in UTF-8 konvertiert. Da wir das soeben bei einer Datenbank durchgef&amp;uuml;hrt haben, hier eine kurze Anleitung:&lt;/p&gt;
	&lt;p&gt;
		Zun&amp;auml;chst bitte sicherstellen, dass die Konsole auf UTF-8 gestellt ist. Wenn man den Datenbankdump mit vi aufmacht und Sonderzeichen richtig angezeigt werden, dann stimmts. &lt;img alt="wink" src="http://vm145.eleon.net/html/js/editor/ckeditor/plugins/smiley/images/wink_smile.gif" title="wink" /&gt;&lt;/p&gt;
	&lt;p&gt;
		Liferay runterfahren, Datenbank-Dump ziehen und sichern:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_17044"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;mysqldump -u root -p liferay &amp;gt; dump.sql&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="functions"&gt;cp&lt;/code&gt; &lt;code class="plain"&gt;dump.sql dump.sql.bak&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		dump.sql mit vi aufmachen und tabellendefinitionen per Suchen &amp;amp; Ersetzen &amp;auml;ndern:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_824554"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="functions"&gt;vi&lt;/code&gt; &lt;code class="plain"&gt;dump.sql&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;:1,$:s/ DEFAULT CHARSET=latin1/ DEFAULT CHARSET=utf8/g&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;:wq&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		Datenbank l&amp;ouml;schen und diesmal richtig anlegen:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_614376"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;mysql -u root -e &lt;/code&gt;&lt;code class="string"&gt;&amp;quot;DROP DATABASE liferay&amp;quot;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;mysql -u root -e &lt;/code&gt;&lt;code class="string"&gt;&amp;quot;CREATE DATABASE liferay CHARACTER SET utf8&amp;quot;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		Dump wieder einspielen:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_111999"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;mysql -u root -p liferay &amp;lt; dump.sql&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		Jetzt Liferay wieder starten und dann sollte es das schon gewesen sein.&lt;/p&gt;
	&lt;p&gt;
		P.S.: Diese Anleitung ist eigentlich nicht Liferay-spezifisch und sollte auch bei anderen Anwendungen helfen.&lt;/p&gt;
&lt;/div&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:52:41Z</dc:date>
  </entry>
  <entry>
    <title>Magnolia und Eclipse</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/magnolia-und-eclipse" />
    <author>
      <name>Nikolaus Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/magnolia-und-eclipse</id>
    <updated>2011-05-13T13:47:16Z</updated>
    <published>2011-05-13T13:40:24Z</published>
    <summary type="html">&lt;p&gt;
		Mit dem Aufbau einer Entwicklungsumgebung für Magnolia hat man beim ersten Mal seine liebe Not. Da bei uns die diversen Anleitungen von der Doku-Seite und dem Magnolia Wiki nicht geklappt haben, haben wir hier mal zusammengeschrieben wie wir Magnolia in Eclipse aufsetzen.&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Vorbereitungen&lt;/strong&gt;&lt;/p&gt;
	&lt;ol&gt;
		&lt;li&gt;
			Eclipse herunterladen und installieren (Eclipse JEE, Galileo oder Helios)&lt;/li&gt;
		&lt;li&gt;
			Maven installieren&lt;/li&gt;
		&lt;li&gt;
			svn Command Line Client installieren&lt;/li&gt;
	&lt;/ol&gt;
	&lt;p&gt;
		&lt;strong&gt;Eclipse Plugins installieren&lt;/strong&gt;&lt;/p&gt;
	&lt;ol&gt;
		&lt;li&gt;
			&lt;a href="http://download.eclipse.org/releases/galileo" rel="nofollow" title="http://download.eclipse.org/releases/galileo"&gt;http://download.eclipse.org/releases/galileo&lt;/a&gt; bzw. &lt;a href="http://download.eclipse.org/releases/helios" rel="nofollow" title="http://download.eclipse.org/releases/helios"&gt;http://download.eclipse.org/releases/helios&lt;/a&gt; =&amp;gt; Collaboration/Subversive SVN Team Provider + WTP&lt;/li&gt;
		&lt;li&gt;
			&lt;a href="http://m2eclipse.sonatype.org/sites/m2e" rel="nofollow" title="http://m2eclipse.sonatype.org/sites/m2e"&gt;http://m2eclipse.sonatype.org/sites/m2e&lt;/a&gt; =&amp;gt; MV2Eclipse (wenn sich das nicht installieren lässt wegen fehlendem org.eclipse.zest.core, GEF von hier &lt;a href="http://download.eclipse.org/tools/gef/updates/releases/" rel="nofollow" title="http://download.eclipse.org/tools/gef/updates/releases/"&gt;http://download.eclipse.org/tools/gef/updates/releases/&lt;/a&gt; installieren)&lt;/li&gt;
		&lt;li&gt;
			&lt;a href="http://m2eclipse.sonatype.org/sites/m2e-extras" rel="nofollow" title="http://m2eclipse.sonatype.org/sites/m2e-extras"&gt;http://m2eclipse.sonatype.org/sites/m2e-extras&lt;/a&gt; =&amp;gt; Maven Integration for WTP&lt;/li&gt;
	&lt;/ol&gt;
	&lt;p&gt;
		Überprüfen ob in Eclipse die Classpath Variable M2_REPO gesetzt ist und auf das Maven Repository zeigt (Preferences / Java / Build Path / Classpath Variables). Eclipse im JDK laufen lassen (in der eclipse.ini einstellen).&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Tomcat installieren&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		Apache Tomcat (5.5 oder 6.0) installieren. setenv.sh und setenv.bat anlegen und damit die memory auf 1024m hochdrehen.&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Magnolia aus dem Repository auschecken&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		Workspace für Eclipse anlegen. Im Workspace eine shell aufmachen und Magnolia aus dem Magnolia Repository auschecken.&lt;/p&gt;
	&lt;p&gt;
		&lt;code&gt;svn co http://svn.magnolia-cms.com/svn/community/magnolia/tags/magnolia-4.3.7&lt;/code&gt;&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;pom.xml überarbeiten&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		Die pom.xml im root der ausgecheckten Magnolia-Version funktioniert meistens nicht wenn man Magnolia nicht vorher schon mal richtig am Laufen hatte. Daher muss die pom.xml angepasst werden.&lt;/p&gt;
	&lt;p&gt;
		Unten einfügen:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_771589"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;repositories&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;repository&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;id&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;magnolia.nexus.public&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;id&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;url&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;a href="http://nexus.magnolia-cms.com/content/groups/public%3C/"&gt;http://nexus.magnolia-cms.com/content/groups/public&amp;lt;/&lt;/a&gt;&lt;/code&gt;&lt;code class="keyword"&gt;url&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;repository&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;repositories&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;pluginrepositories&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;pluginrepository&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;id&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;magnolia&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;id&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;url&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;a href="http://repo.magnolia-cms.com/m2%3C/"&gt;http://repo.magnolia-cms.com/m2&amp;lt;/&lt;/a&gt;&lt;/code&gt;&lt;code class="keyword"&gt;url&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;pluginrepository&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;pluginrepositories&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		&lt;strong&gt;mvn build&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		shell öffnen, in das ausgecheckte Projekt gehen (z.B. Ordner workspace/magnolia_4.3.7/) und dort&lt;/p&gt;
	&lt;p&gt;
		&lt;code&gt;mvn eclipse:eclipse&lt;/code&gt;&lt;/p&gt;
	&lt;p&gt;
		Wenn hier Fehler auftreten (Build error) müssen diese beseitigt werden! Möglicherweise kommt ein Fehler auf einen restrictedpath für xdoclet, entweder hier den Pfad anpassen oder erst mal den restrictedpath auskommentieren.&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Projekt in Eclipse importieren&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		Eclipse in der JEE Perspektive aufmachen. Import =&amp;gt; Existing Maven Projects =&amp;gt; Rootverzeichnis auswählen (workspace/magnolia_4.3.7). Jetzt sollten alle Projekte erkannt werden. Alle selektieren und importieren.&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Tomcat hinzufügen&lt;/strong&gt;&lt;/p&gt;
	&lt;p&gt;
		Neuen Tomcat hinzufügen und wie folgt konfigurieren (Doppelklick auf den Tomcat):&lt;/p&gt;
	&lt;ul&gt;
		&lt;li&gt;
			unter “Server Options” das Häkchen bei “Serve modules without publishing” setzen&lt;/li&gt;
		&lt;li&gt;
			unter “Timeout” den timeout hochdrehen (z.B. auf 320)&lt;/li&gt;
		&lt;li&gt;
			Add/Remove: zum Server die magnolia-empty-webapp hinzufügen&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;
		Server starten. Nun sollte in der Konsole der Server problemlos hochfahren und irgendwann erscheint:&lt;/p&gt;
	&lt;pre&gt;
	*********************************************************************************************************
*                                                                                                       *
* Magnolia needs module updates or installs, point your browser to your Magnolia instance and confirm ! *
*                                                                                                       *
*********************************************************************************************************&lt;/pre&gt;
	&lt;p&gt;
		Nun im Browser Magnolia aufmachen (http://localhost:8080/magnolia-empty-webapp) und das Update durchführen. Dann erscheint der Magnolia Login-Screen, in dem man sich mit superuser / superuser einloggen kann.&lt;/p&gt;</summary>
    <dc:creator>Nikolaus Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:40:24Z</dc:date>
  </entry>
  <entry>
    <title>Liferay friends only!</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/liferay-friends-only!" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/liferay-friends-only!</id>
    <updated>2011-05-13T13:51:25Z</updated>
    <published>2011-05-13T13:50:58Z</published>
    <summary type="html">&lt;p&gt;
	Trotz des ausgefeilten und in vielen Fällen völlig ausreichenden Rechtekonzeptes von Liferay, fehlt bei Community-Portalen doch häufig eine wichtige Berechtigungseinschränkung, und das ist die Einschränkung auf “Nur für Freunde”. Wir haben dies in einem aktuellen Portalprojekt folgendermaßen implementiert.&lt;/p&gt;
&lt;p&gt;
	Neuer Service für Definition von Friends-Only Permissions. Hier wird schlicht die Klasse mit Private key und einem User definiert, die vor Durchführung hinterlegter Action-ID auf Freundstatus gepfrüft werden muss. ext-impl/src/de/eleon/liferay/socialpermission/service.xml:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_966718"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="comments"&gt;&amp;lt;!--?xml version="1.0"?--&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;service-builder&lt;/code&gt; &lt;code class="color1"&gt;package-path&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"de.eleon.liferay.socialpermission"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;namespace&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;Social&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;namespace&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;entity&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"SocialPermission"&lt;/code&gt; &lt;code class="color1"&gt;local-service&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"true"&lt;/code&gt; &lt;code class="color1"&gt;remote-service&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"false"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="comments"&gt;&amp;lt;!-- PK fields --&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"socialPermissionId"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"long"&lt;/code&gt; &lt;code class="color1"&gt;primary&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"true"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="comments"&gt;&amp;lt;!-- Audit fields --&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"userId"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"long"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"createDate"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Date"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"className"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"String"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"primKey"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"String"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"actionId"&lt;/code&gt; &lt;code class="color1"&gt;type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"String"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"UserId"&lt;/code&gt; &lt;code class="color1"&gt;return-type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Collection"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"userId"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"classNamePrimKey"&lt;/code&gt; &lt;code class="color1"&gt;return-type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Collection"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"className"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"primKey"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"classNamePrimKeyActionId"&lt;/code&gt; &lt;code class="color1"&gt;return-type&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"SocialPermission"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"className"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"primKey"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"actionId"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder-column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;finder&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;31&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;column&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;entity&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;33&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;service-builder&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Erweiterung von ext-imp/build.xml:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_583470"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="comments"&gt;&amp;lt;!--?xml version="1.0"?--&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;project&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"ext-impl"&lt;/code&gt; &lt;code class="color1"&gt;basedir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"."&lt;/code&gt; &lt;code class="color1"&gt;default&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"compile"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="color1"&gt;file&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"build-parent.xml"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"build-service-portlet-socialpermission"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt; &lt;code class="color1"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"build-service"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;param&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"service.file"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"src/de/eleon/liferay/socialpermission/service.xml"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;import&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;project&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Für den generierten Service brauchen wir nur eine Handvoll Methoden in der SocialPermissionLocalServiceUtil für die Anlage und Abfrage des Services. Dies wird definiert in ext-impl/src/de/eleon/liferay/socialpermission/service/impl/SocialPermissionLocalServiceImpl.java:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_713802"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;package&lt;/code&gt; &lt;code class="plain"&gt;de.eleon.liferay.socialpermission.service.impl;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;java.util.Date;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;java.util.List;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;com.liferay.counter.service.CounterLocalService;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;com.liferay.portal.SystemException;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;com.liferay.portal.kernel.annotation.BeanReference;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;de.eleon.liferay.socialpermission.NoSuchSocialPermissionException;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;de.eleon.liferay.socialpermission.model.SocialPermission;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;import&lt;/code&gt; &lt;code class="plain"&gt;de.eleon.liferay.socialpermission.service.base.SocialPermissionLocalServiceBaseImpl;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;class&lt;/code&gt; &lt;code class="plain"&gt;SocialPermissionLocalServiceImpl&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;extends&lt;/code&gt; &lt;code class="plain"&gt;SocialPermissionLocalServiceBaseImpl {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="color1"&gt;@BeanReference&lt;/code&gt;&lt;code class="plain"&gt;(name = &lt;/code&gt;&lt;code class="string"&gt;"com.liferay.counter.service.CounterLocalService.impl"&lt;/code&gt;&lt;code class="plain"&gt;)&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;protected&lt;/code&gt; &lt;code class="plain"&gt;CounterLocalService counterLocalService;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="plain"&gt;SocialPermission addSocialPermission(&lt;/code&gt;&lt;code class="keyword"&gt;long&lt;/code&gt; &lt;code class="plain"&gt;userId, String className, String primKey, String actionId) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;long&lt;/code&gt; &lt;code class="plain"&gt;socialPermissionId = counterLocalService.increment();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;SocialPermission sp = socialPermissionPersistence.create(socialPermissionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;sp.setUserId(userId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;sp.setClassName(className);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;sp.setPrimKey(primKey);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;sp.setActionId(actionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;sp.setCreateDate(&lt;/code&gt;&lt;code class="keyword"&gt;new&lt;/code&gt; &lt;code class="plain"&gt;Date());&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;31&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;socialPermissionPersistence.update(sp, &lt;/code&gt;&lt;code class="keyword"&gt;false&lt;/code&gt;&lt;code class="plain"&gt;);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;sp;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;33&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;34&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;35&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;removeSocialPermission(&lt;/code&gt;&lt;code class="keyword"&gt;long&lt;/code&gt; &lt;code class="plain"&gt;socialPermissionId) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException, NoSuchSocialPermissionException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;36&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;socialPermissionPersistence.remove(socialPermissionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;37&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;38&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;39&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;removeSocialPermission(SocialPermission socialPermission) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;40&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;socialPermissionPersistence.remove(socialPermission);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;41&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;42&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;43&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;removeSocialPermission(String className, String primKey, String actionId) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException, NoSuchSocialPermissionException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;44&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;socialPermissionPersistence.removeByclassNamePrimKeyActionId(className, primKey, actionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;45&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;46&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;47&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="plain"&gt;List&amp;lt;socialpermission&amp;gt; findByUserId(&lt;/code&gt;&lt;code class="keyword"&gt;long&lt;/code&gt; &lt;code class="plain"&gt;userId) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;48&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;socialPermissionPersistence.findByUserId(userId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;49&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;51&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="plain"&gt;List&amp;lt;socialpermission&amp;gt; find(String className, String primKey) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;52&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;socialPermissionPersistence.findByclassNamePrimKey(className, primKey);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;53&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;54&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;55&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="plain"&gt;SocialPermission find(String className, String primKey, String actionId) &lt;/code&gt;&lt;code class="keyword"&gt;throws&lt;/code&gt; &lt;code class="plain"&gt;SystemException, NoSuchSocialPermissionException {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;56&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;socialPermissionPersistence.findByclassNamePrimKeyActionId(className, primKey, actionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;57&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;58&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;59&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;60&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;&amp;lt;/socialpermission&amp;gt;&amp;lt;/socialpermission&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Für die Abfrage der Berechtigung ziehen wir den AdvancedPermissionChecker nach ext und erweitern diesen. ext-impl/src/com/liferay/portal/security/permission/AdvancedPermissionChecker.java:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_372266"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;120&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;121&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;boolean&lt;/code&gt; &lt;code class="plain"&gt;hasPermission(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;122&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;long&lt;/code&gt; &lt;code class="plain"&gt;groupId, String name, String primKey, String actionId) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;123&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;StopWatch stopWatch = &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;124&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;125&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(_log.isDebugEnabled()) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;126&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;stopWatch = &lt;/code&gt;&lt;code class="keyword"&gt;new&lt;/code&gt; &lt;code class="plain"&gt;StopWatch();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;127&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;128&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;stopWatch.start();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;129&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;130&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;131&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;Group group = &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;132&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;133&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;try&lt;/code&gt; &lt;code class="plain"&gt;{&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;134&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;SocialPermission socialPermission = SocialPermissionLocalServiceUtil.find(name, primKey, actionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;135&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(socialPermission != &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;136&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;boolean&lt;/code&gt; &lt;code class="plain"&gt;ret = SocialRelationLocalServiceUtil.hasRelation(socialPermission.getUserId(), user.getUserId(), SocialRelationConstants.TYPE_BI_FRIEND);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;137&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;ret;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;138&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;139&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;140&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;} &lt;/code&gt;&lt;code class="keyword"&gt;catch&lt;/code&gt; &lt;code class="plain"&gt;(NoSuchSocialPermissionException e) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;141&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;142&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;} &lt;/code&gt;&lt;code class="keyword"&gt;catch&lt;/code&gt; &lt;code class="plain"&gt;(SystemException e) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;143&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;e.printStackTrace();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;144&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;145&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;146&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="comments"&gt;// If the current group is a staging group, check the live group. If the&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;147&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="comments"&gt;// current group is a scope group for a layout, check the original&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;148&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="comments"&gt;// group.&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;149&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;try&lt;/code&gt; &lt;code class="plain"&gt;{&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;150&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(groupId &amp;gt; &lt;/code&gt;&lt;code class="value"&gt;0&lt;/code&gt;&lt;code class="plain"&gt;) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;151&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;group = GroupLocalServiceUtil.getGroup(groupId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;152&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;153&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(group.isStagingGroup()) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;154&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(primKey.equals(String.valueOf(groupId))) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;155&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;primKey = String.valueOf(group.getLiveGroupId());&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;156&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;157&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;158&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;groupId = group.getLiveGroupId();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;159&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;group = group.getLiveGroup();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;160&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;161&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(group.isLayout()) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;162&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;Layout layout = LayoutLocalServiceUtil.getLayout(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;163&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;group.getClassPK());&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;164&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;165&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;groupId = layout.getGroupId();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;166&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;167&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;168&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;169&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;catch&lt;/code&gt; &lt;code class="plain"&gt;(Exception e) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;170&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;_log.error(e, e);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;171&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;172&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;173&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;Boolean value = PermissionCacheUtil.getPermission(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;174&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;user.getUserId(), groupId, name, primKey, actionId);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;175&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;176&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(value == &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;177&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;try&lt;/code&gt; &lt;code class="plain"&gt;{&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;178&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;value = Boolean.valueOf(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;179&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;hasPermissionImpl(groupId, name, primKey, actionId));&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;180&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;181&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(_log.isDebugEnabled()) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;182&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;_log.debug(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;183&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="string"&gt;"Checking permission for "&lt;/code&gt; &lt;code class="plain"&gt;+ groupId + &lt;/code&gt;&lt;code class="string"&gt;" "&lt;/code&gt; &lt;code class="plain"&gt;+ name +&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;184&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="string"&gt;" "&lt;/code&gt; &lt;code class="plain"&gt;+ primKey + &lt;/code&gt;&lt;code class="string"&gt;" "&lt;/code&gt; &lt;code class="plain"&gt;+ actionId + &lt;/code&gt;&lt;code class="string"&gt;" takes "&lt;/code&gt; &lt;code class="plain"&gt;+&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;185&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;stopWatch.getTime() + &lt;/code&gt;&lt;code class="string"&gt;" ms"&lt;/code&gt;&lt;code class="plain"&gt;);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;186&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;187&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;188&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;finally&lt;/code&gt; &lt;code class="plain"&gt;{&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;189&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(value == &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;190&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;value = Boolean.FALSE;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;191&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;192&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;193&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;PermissionCacheUtil.putPermission(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;194&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;user.getUserId(), groupId, name, primKey, actionId, value);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;195&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;196&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;197&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;198&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;return&lt;/code&gt; &lt;code class="plain"&gt;value.booleanValue();&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;199&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Das war die Implementierung der neuen Berechtigungsfuntion. Die SocialRelation wird nun bei entsprechend hinterlegten Datenbankeinträgen – egal welchen Typs – als Vorraussetzung abgefragt. Hier eine Beispielhinterlegung aus einer WOL-Erweiterung für Rechtevergabe bei WallEntries:&lt;/p&gt;
&lt;div class="syntaxhighlighter  " id="highlighter_734145"&gt;
	&lt;div class="lines"&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="keyword"&gt;public&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;addWallEntry(ActionRequest actionRequest,&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;} &lt;/code&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(permission.equals(&lt;/code&gt;&lt;code class="string"&gt;"friends"&lt;/code&gt;&lt;code class="plain"&gt;)) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;addCommunityPermissions = &lt;/code&gt;&lt;code class="keyword"&gt;true&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1 highlighted"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;SocialPermissionLocalServiceUtil.addSocialPermission(socialActivity.getUserId(), SocialActivity.&lt;/code&gt;&lt;code class="keyword"&gt;class&lt;/code&gt;&lt;code class="plain"&gt;.getName(), String.valueOf(socialActivity.getActivityId()), Constants.VIEW);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							 &lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;} &lt;/code&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(permission.equals(&lt;/code&gt;&lt;code class="string"&gt;"community"&lt;/code&gt;&lt;code class="plain"&gt;)) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;addCommunityPermissions = &lt;/code&gt;&lt;code class="keyword"&gt;true&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;} &lt;/code&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(permission.equals(&lt;/code&gt;&lt;code class="string"&gt;"internet"&lt;/code&gt;&lt;code class="plain"&gt;)) {&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;addCommunityPermissions = &lt;/code&gt;&lt;code class="keyword"&gt;true&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;addGuestPermissions = &lt;/code&gt;&lt;code class="keyword"&gt;true&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;ResourceLocalServiceUtil.addResources(&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;socialActivity.getCompanyId(), socialActivity.getGroupId(), userId,&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;SocialActivity.&lt;/code&gt;&lt;code class="keyword"&gt;class&lt;/code&gt;&lt;code class="plain"&gt;.getName(), socialActivity.getActivityId(),&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;false&lt;/code&gt;&lt;code class="plain"&gt;, addCommunityPermissions, addGuestPermissions);&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt1"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;...&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
		&lt;div class="line alt2"&gt;
			&lt;table&gt;
				&lt;tbody&gt;
					&lt;tr&gt;
						&lt;td class="number"&gt;
							&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
						&lt;td class="content"&gt;
							&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/tbody&gt;
			&lt;/table&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
	Thats it! &lt;img alt="smiley" src="http://vm145.eleon.net/html/js/editor/ckeditor/plugins/smiley/images/regular_smile.gif" title="smiley" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:50:58Z</dc:date>
  </entry>
  <entry>
    <title>Zugriff auf gleiche Session zwischen http und https mit Grails</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/zugriff-auf-gleiche-session-zwischen-http-und-https-mit-grails" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/zugriff-auf-gleiche-session-zwischen-http-und-https-mit-grails</id>
    <updated>2011-05-13T13:49:39Z</updated>
    <published>2011-05-13T13:49:16Z</published>
    <summary type="html">&lt;p&gt;
	Wenn man seine Seite aus performance-Gründen gerne mit http ausliefern möchte, den Login jedoch nur über https erlauben will, steht man schnell vor dem Problem, dass unter https geöffnete Sessions mit http nicht zur Verfügung stehen. Das Problem lässt sich mit einem Filter, der die Session schon im http-Modus öffnet, bequem lösen. So machen wirs:&lt;br /&gt;
	grails create-filters Session&lt;/p&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="keyword"&gt;class&lt;/code&gt; &lt;code class="plain"&gt;SessionFilters {&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;def filters = {&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;all() {&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;before = {&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(!request.secure &amp;amp;&amp;amp; request.getSession(&lt;/code&gt;&lt;code class="keyword"&gt;false&lt;/code&gt;&lt;code class="plain"&gt;) == &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;) {&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;request.getSession(&lt;/code&gt;&lt;code class="keyword"&gt;true&lt;/code&gt;&lt;code class="plain"&gt;)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
	&lt;table&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td class="number"&gt;
					&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
				&lt;td class="content"&gt;
					&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="number"&gt;
				&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
			&lt;td class="content"&gt;
				&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:49:16Z</dc:date>
  </entry>
  <entry>
    <title>Liferay Entwicklungsumgebungen - So läufts bei uns</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/liferay-entwicklungsumgebungen-so-laufts-bei-uns" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/liferay-entwicklungsumgebungen-so-laufts-bei-uns</id>
    <updated>2011-08-01T11:33:45Z</updated>
    <published>2011-05-13T13:48:13Z</published>
    <summary type="html">&lt;p&gt;
	Zwischen “IDE im Subversion” und “Eine IDE und ein tomcat für alles” gibt es viele Variationen. Wir arbeiten so:&lt;/p&gt;
&lt;p&gt;
	Auf Entwicklungsrechnern arbeiten wir mit Windows 7. Wir haben für jedes Projekt ein eigenes Verzeichnis mit der projektspezifischen Entwicklungsumgebung. Das heißt, wir haben eine IDE pro Projekt, checken diese jedoch nicht in die Versionsverwaltung ein. Bei Liferay-Pojekten sieht das dann zum Beispiel so aus:&lt;/p&gt;
&lt;pre class="brush: shell;"&gt;
C:\projekt\
	apache-tomcat\
	data\
	deploy\
	eclipse\
	installer\
	plugins-sdk\ &amp;lt;- versioniert
	workspace\
		workspace\ext\ &amp;lt;- versioniert
		workspace\portal\
	sql\ &amp;lt;- versioniert
	[&amp;gt;] eclipse.exe
	[&amp;gt;] startup.bat
	[&amp;gt;] shutdown.bat
&lt;/pre&gt;
&lt;p&gt;
	Eigene Portlets die nicht innerhalb von EXT entstehen, bauen wir über das plugins-sdk und importieren diese ins Eclipse.&lt;/p&gt;
&lt;p&gt;
	Das Einbinden der IDE in den Projektordner hat sich sofort bewährt, da sich damit teaminterne Hilfseinsätze zur IDE-Rettung vermeiden lassen. Weitere Teammitglieder lassen sich schnell anbinden, in dem sie einfach den Projektordner eines bestehenden Teammitglieds per USB-Stick bekommen.&lt;/p&gt;
&lt;p&gt;
	Unsere Server sind fast immer Debian- oder Ubuntu-Systeme. Als Online-Testumgebung haben wir einen leistungsstarken Ubuntu-Server als vmware-Host. Auf diesem laufen in der Regel 20 – 30 Gastsysteme mit Liferay o.ä. paralell.&lt;/p&gt;
&lt;p&gt;
	&lt;em&gt;UPDATE 01.08.2011: Entwicklungs-Rechner sind inzwischen Linux Ubuntu und nicht mehr Windows 7. IDEs halten wir nicht mehr je Projekt sondern zentral. Die Projektstruktur und deren Versionierung wurde jedoch beibehalten.&lt;/em&gt;&lt;/p&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:48:13Z</dc:date>
  </entry>
  <entry>
    <title>Google Apps für Unternehmen – unser Exchange Killer</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/google-apps-fur-unternehmen-–-unser-exchange-killer" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/google-apps-fur-unternehmen-–-unser-exchange-killer</id>
    <updated>2011-05-13T13:46:00Z</updated>
    <published>2011-05-13T13:46:00Z</published>
    <summary type="html">&lt;p&gt;
	Wir lieben Microsoft. Naja, zumindest arbeiten wir damit. Unseren dummen Exchange mögen wir nicht. Wir verstehen nicht, was da für ein riesiger proprieterer File unsere Mails speichert und wir haben keine Lust rauszufinden, wie man da Mails wieder rauszuppft, wenn alles kaputt ist. Seit ein paar Monaten haben wir auf Google Apps für Unternehmen umgestellt. Mails, Kalender &amp;amp; Co haben wir jetzt nur noch webbasiert. Ein Outlook o.ä. gibt es nicht mehr. Aber das macht gar nichts außer Freude, da der Webclient von Google schneller ist, als alles was man sich so an Fatclients zur Mailverwaltung auf seinem Rechner installieren könnte. Spam gibt es übrigens auch keinen mehr. Unser Exchange-Spamfilter, für den wir bisher jährlich 400 EUR gezahlt haben, war nicht halb so gut.&lt;/p&gt;
&lt;p&gt;
	Die neue Lösung mit Google Apps für Unternehmen kostet 40 EUR pro Jahr und Mitarbeiter. Pro Postfach gibt es 20 GB Speicher. Der Import meiner gespeicherten 12.000 Mails der letzten Jahre belegt 10% des Kontospeichers. Das ist im Vergleich zu Outlook und Exchange dann doch etwas effizienter.&lt;/p&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:46:00Z</dc:date>
  </entry>
  <entry>
    <title>Installation von Liferay Änderungen aus der EXT-Umgebung auf das Produktivsystem</title>
    <link rel="alternate" href="http://www.eleon.de/eleon-blog/-/blogs/installation-von-liferay-anderungen-aus-der-ext-umgebung-auf-das-produktivsystem" />
    <author>
      <name>Dominik Förderreuther</name>
    </author>
    <id>http://www.eleon.de/eleon-blog/-/blogs/installation-von-liferay-anderungen-aus-der-ext-umgebung-auf-das-produktivsystem</id>
    <updated>2011-05-13T13:46:29Z</updated>
    <published>2011-05-13T13:44:50Z</published>
    <summary type="html">&lt;p&gt;
		Eine hochoffizielle Dokumentation zur Installation von Änderungen aus der EXT-Umgebung des Entwicklungssystems auf dem Produktivsystem ist mir bisher nicht untergekommen. Einige Zeit haben wir immer den kompletten Tomcat aus dem Entwicklungssystem gepackt, hochgeladen und auf dem Produktivsystem wurden dann die relevanten Teile aus dem Entwicklungssystem eingesetzt. Nach dem ca. 100MB großen Upload kam dann immer noch eine viertelstunde potentiell fehleranfälliges herumdoktern im Produktivsystem auf uns zu.&lt;/p&gt;
	&lt;p&gt;
		Besser spät als nie, hab ich vor einiger Zeit folgenden Ant-File als Installationshilfe gebaut. Das Script packt alle Änderungen aus der Ext-Umgebung in einen Zipfile, der dann in der Regel nur 2-3 Megabyte groß ist. Der Inhalt dieses ZIPs lässt sich mit “cp -Rf * /path/to/apache-tomcat/” in die Produktionsumgebung verschieben, ohne portal-ext.properties u.ä. zu überschreiben.&lt;/p&gt;
	&lt;p&gt;
		Hier der Ant-File:&lt;/p&gt;
	&lt;div class="syntaxhighlighter  " id="highlighter_36550"&gt;
		&lt;div class="lines"&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;project&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"build-installer"&lt;/code&gt; &lt;code class="color1"&gt;xmlns:antelope&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"antlib:ise.antelope.tasks"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.name"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"kundenname"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.dir"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"../../installer"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.dir.ext"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}/lib/ext"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.dir.root"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}/webapps/ROOT"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.dir.lib"&lt;/code&gt; &lt;code class="color1"&gt;value&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.root}/WEB-INF/lib"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.clean"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;delete&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;delete&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;tstamp&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;format&lt;/code&gt; &lt;code class="color1"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.time"&lt;/code&gt; &lt;code class="color1"&gt;pattern&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"yyyyMMdd-HHmm"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;format&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;tstamp&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.copy"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.ext}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.lib}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt; &lt;code class="color1"&gt;todir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.ext}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt; &lt;code class="color1"&gt;file&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"ext-service/ext-service.jar"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt; &lt;code class="color1"&gt;todir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.lib}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt; &lt;code class="color1"&gt;file&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"ext-impl/ext-impl.jar"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt; &lt;code class="color1"&gt;todir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.root}/WEB-INF"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"ext-web/tmp/WEB-INF"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt; &lt;code class="color1"&gt;todir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir.root}/html"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt; &lt;code class="color1"&gt;dir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"ext-web/docroot/html"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;31&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;fileset&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;copy&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;32&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;echo&lt;/code&gt; &lt;code class="color1"&gt;message&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;33&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;echo&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;mkdir&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;34&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;35&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.compress"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;36&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;input&lt;/code&gt; &lt;code class="color1"&gt;message&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Please enter filename"&lt;/code&gt; &lt;code class="color1"&gt;addproperty&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.zipname"&lt;/code&gt; &lt;code class="color1"&gt;defaultvalue&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.name}_ext_${installer.time}.zip"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;37&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;zip&lt;/code&gt; &lt;code class="color1"&gt;destfile&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}/${installer.zipname}"&lt;/code&gt; &lt;code class="color1"&gt;basedir&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"${installer.dir}"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;38&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;39&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;echo&lt;/code&gt; &lt;code class="color1"&gt;message&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Fertig, ${installer.zipname} erstellt!"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;40&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;echo&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;zip&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;41&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								 &lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;42&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt; &lt;code class="color1"&gt;name&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.install"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;43&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt; &lt;code class="color1"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.clean"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;44&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt; &lt;code class="color1"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.copy"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;45&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt; &lt;code class="color1"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"installer.compress"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt2"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;46&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;antcall&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;target&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
			&lt;div class="line alt1"&gt;
				&lt;table&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td class="number"&gt;
								&lt;code&gt;47&lt;/code&gt;&lt;/td&gt;
							&lt;td class="content"&gt;
								&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;property&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;project&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;p&gt;
		Wir legen dieses Script in der EXT-Umgebung neben der build.xml an und binden es in dieser mit&lt;br /&gt;
		&lt;br /&gt;
		ein. Danach steht einem das Ant-Target installer.install zur Verfügung. Nach Rückfrage zum Dateinamen wird zwei Ordner höher – bei uns ist das dann der Ordner in dem auch der workspace von eclipse liegt – ein Ordner namens “installer” angelegt und darin liegt das erstellte ZIP.&lt;/p&gt;
	&lt;p&gt;
		Vielleicht ist es ja dem einen oder anderen hilfreich. Wenn jemand einen anderen praktikablen Weg zur Installation von EXT-Änderungen ins Produktivsystem gefunden hat, bin ich für Hinweise dankbar.&lt;/p&gt;</summary>
    <dc:creator>Dominik Förderreuther</dc:creator>
    <dc:date>2011-05-13T13:44:50Z</dc:date>
  </entry>
</feed>


