<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alexander-Projects.de</title>
	<atom:link href="http://www.alexander-projects.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexander-projects.de</link>
	<description></description>
	<lastBuildDate>Wed, 27 Jul 2011 13:06:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Cognos TM1-Prozess über Java API ausführen</title>
		<link>http://www.alexander-projects.de/2011/05/25/cognos-tm1-prozess-uber-java-api-ausfuhren/</link>
		<comments>http://www.alexander-projects.de/2011/05/25/cognos-tm1-prozess-uber-java-api-ausfuhren/#comments</comments>
		<pubDate>Wed, 25 May 2011 19:05:01 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[Cognos TM1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[objekt]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[prozess]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tm1]]></category>
		<category><![CDATA[tm1val]]></category>
		<category><![CDATA[turbointegrator]]></category>

		<guid isPermaLink="false">http://www.alexander-projects.de/?p=103</guid>
		<description><![CDATA[In diesem Artikel geht es darum, über die Cognos TM1 Java-API eines Prozess mit und ohne Parameter zu starten.

Um einen TM1-Prozess auszuführen wird ein TM1Server-Objekt benötigt. Die Verbindung von Java mit dem TM1-Server wurde bereits <a title="Grundlegendes zur Cognos TM1 Java API" href="http://www.alexander-projects.de/2011/05/25/grundliegendes-zur-cognos-tm1-java-api/" target="_blank">in diesem Artikel</a> behandelt.

Die nachfolgende Methode startet beispielsweise einen Prozess, dessen Name als Parameter an die Methode über geben wird. Dieser muss selbstverständlich auf dem TM1-Server vorhanden sein. Desweiteren wird der Methode dein Pfad übergeben. Dieser wird diesem Prozess als Parameter übergeben. So ist es beispielsweise möglich, bei einem Datenimport über einen TurboIntegrator-Prozess den beim Erstellen des Prozesses gesetzten Dateinamen zu überschreiben, um so nur einen Prozess zu haben, der beliebig viele Dateien mit Daten in einen Cube zu laden.
<pre class="brush:java">private void executeProcess(String proName, String file) {
	TM1Process tm1p = server.getProcess(proName);
	TM1Val pArray = TM1Val.makeArrayVal(1);
	pArray.addToArray(new TM1Val(file));
	TM1Val errorCode = tm1p.executeEx(pArray, true);
	if (!errorCode.getString().equals("")) {
		System.out.println("Err: "+errorCode.getString());
	}
}</pre>
Jeder Prozess den man über die Java-API ausführt erwartet ein Array von Parametern. Will man einen Prozess ausführen, der keine Parameter besitzt, so ersetzt man diese Zeile:
<pre class="brush:java">pArray.addToArray(new TM1Val(file));</pre>
durch diese Zeile:
<pre class="brush:java">pArray.addToArray(new TM1Val(null));</pre>
Wichtig ist nur, dass dem <em>TM1Process</em>-Objekt auf jeden Fall ein Array mit <em>TM1Val</em>-Objekten übergeben wird.]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, über die Cognos TM1 Java-API eines Prozess mit und ohne Parameter zu starten.</p>
<p>Um einen TM1-Prozess auszuführen wird ein TM1Server-Objekt benötigt. Die Verbindung von Java mit dem TM1-Server wurde bereits <a title="Grundlegendes zur Cognos TM1 Java API" href="http://www.alexander-projects.de/2011/05/25/grundliegendes-zur-cognos-tm1-java-api/" target="_blank">in diesem Artikel</a> behandelt.</p>
<p>Die nachfolgende Methode startet beispielsweise einen Prozess, dessen Name als Parameter an die Methode über geben wird. Dieser muss selbstverständlich auf dem TM1-Server vorhanden sein. Desweiteren wird der Methode dein Pfad übergeben. Dieser wird diesem Prozess als Parameter übergeben. So ist es beispielsweise möglich, bei einem Datenimport über einen TurboIntegrator-Prozess den beim Erstellen des Prozesses gesetzten Dateinamen zu überschreiben, um so nur einen Prozess zu haben, der beliebig viele Dateien mit Daten in einen Cube zu laden.</p>
<pre class="brush:java">private void executeProcess(String proName, String file) {
	TM1Process tm1p = server.getProcess(proName);
	TM1Val pArray = TM1Val.makeArrayVal(1);
	pArray.addToArray(new TM1Val(file));
	TM1Val errorCode = tm1p.executeEx(pArray, true);
	if (!errorCode.getString().equals("")) {
		System.out.println("Err: "+errorCode.getString());
	}
}</pre>
<p>Jeder Prozess den man über die Java-API ausführt erwartet ein Array von Parametern. Will man einen Prozess ausführen, der keine Parameter besitzt, so ersetzt man diese Zeile:</p>
<pre class="brush:java">pArray.addToArray(new TM1Val(file));</pre>
<p>durch diese Zeile:</p>
<pre class="brush:java">pArray.addToArray(new TM1Val(null));</pre>
<p>Wichtig ist nur, dass dem <em>TM1Process</em>-Objekt auf jeden Fall ein Array mit <em>TM1Val</em>-Objekten übergeben wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/05/25/cognos-tm1-prozess-uber-java-api-ausfuhren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grundlegendes zur Cognos TM1 Java API</title>
		<link>http://www.alexander-projects.de/2011/05/25/grundliegendes-zur-cognos-tm1-java-api/</link>
		<comments>http://www.alexander-projects.de/2011/05/25/grundliegendes-zur-cognos-tm1-java-api/#comments</comments>
		<pubDate>Wed, 25 May 2011 17:34:24 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[Cognos TM1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bean]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tm1]]></category>

		<guid isPermaLink="false">http://www.alexander-projects.de/?p=105</guid>
		<description><![CDATA[Um die Cognos TM1 Java API verwenden zu können, muss man zunächst das JAR-File der API dem gewünschten Java-Projekt hinzufügen. Dieses befindet sich z.B. hier: <em>C:\Program Files\Cognos\TM1\bin\classes\TM1JavaApi.jar</em>.

Ist dies geschehen kann man eine Verbindung per Java zum TM1-Server herstellen. Der nachfolgende Code demonstriert das:
<pre class="brush:java">import com.applix.tm1.*;
...
TM1Bean bean = new TM1Bean();
bean.setAdminHost("tm1AdminHost");
TM1Server server = bean.openConnection("tm1ServerName", "tm1UserName", "tm1UserPW");</pre>
Wenn sich der TM1-Server auf dem gleichen Rechner befindet ist es nicht nötig, den Admin Host zu setzten.

Über das Bean erhält man mit der Methode openConnection unter Angabe des Servernamen, eines Usernamen und des passenden Passworts ein Serverobjekt. Mit diesem kann man nun die gewünschten Operationen auf dem TM1-Server ausführen, wie beispielsweise das Erstellen von Dimensionen oder Cubes oder das Ausführen von Prozessen.

Wichtig beim Verwenden der Java-API ist es, das TM1-SSl-Zertifikat ins JRE zu integrieren, da es ansonsten zu einer <em><strong>SSL Certificate Exception kommt</strong></em>. Näheres zum Vorgehen dazu in <a title="TM1 Java API SSL Zertifikat" href="http://www.alexander-projects.de/2011/05/22/tm1-java-api-ssl-zertifikat/">diesem</a> Artikel.]]></description>
			<content:encoded><![CDATA[<p>Um die Cognos TM1 Java API verwenden zu können, muss man zunächst das JAR-File der API dem gewünschten Java-Projekt hinzufügen. Dieses befindet sich z.B. hier: <em>C:\Program Files\Cognos\TM1\bin\classes\TM1JavaApi.jar</em>.</p>
<p>Ist dies geschehen kann man eine Verbindung per Java zum TM1-Server herstellen. Der nachfolgende Code demonstriert das:</p>
<pre class="brush:java">import com.applix.tm1.*;
...
TM1Bean bean = new TM1Bean();
bean.setAdminHost("tm1AdminHost");
TM1Server server = bean.openConnection("tm1ServerName", "tm1UserName", "tm1UserPW");</pre>
<p>Wenn sich der TM1-Server auf dem gleichen Rechner befindet ist es nicht nötig, den Admin Host zu setzten.</p>
<p>Über das Bean erhält man mit der Methode openConnection unter Angabe des Servernamen, eines Usernamen und des passenden Passworts ein Serverobjekt. Mit diesem kann man nun die gewünschten Operationen auf dem TM1-Server ausführen, wie beispielsweise das Erstellen von Dimensionen oder Cubes oder das Ausführen von Prozessen.</p>
<p>Wichtig beim Verwenden der Java-API ist es, das TM1-SSl-Zertifikat ins JRE zu integrieren, da es ansonsten zu einer <em><strong>SSL Certificate Exception kommt</strong></em>. Näheres zum Vorgehen dazu in <a title="TM1 Java API SSL Zertifikat" href="http://www.alexander-projects.de/2011/05/22/tm1-java-api-ssl-zertifikat/">diesem</a> Artikel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/05/25/grundliegendes-zur-cognos-tm1-java-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TM1-Forum</title>
		<link>http://www.alexander-projects.de/2011/05/24/tm1-forum/</link>
		<comments>http://www.alexander-projects.de/2011/05/24/tm1-forum/#comments</comments>
		<pubDate>Tue, 24 May 2011 21:49:38 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[Cognos TM1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[Dimensionen]]></category>
		<category><![CDATA[Forum]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Java-Api]]></category>
		<category><![CDATA[tm1]]></category>
		<category><![CDATA[Würfel]]></category>

		<guid isPermaLink="false">http://www.alexander-projects.de/?p=100</guid>
		<description><![CDATA[Unter nachfolgendem Link gibt es ein großartiges Cognos TM1 Forum für alle die sich näher mit der Materie befassen wollen oder müssen.

In den nächsten Tagen werde ich ein paar Programmbeispiele veröffentlichen, die sich näher mit der Java-API von Cognos TM1 befassen. Dabei geht es um das automatisierte erstellen, neuerstellen und laden von Datenwürfeln mitsamt ihrer Dimensionen.

Hier der Link zum Forum: <a title="TM1-Forum" href="http://www.tm1forum.com" target="_blank">www.tm1forum.com</a>]]></description>
			<content:encoded><![CDATA[<p>Unter nachfolgendem Link gibt es ein großartiges Cognos TM1 Forum für alle die sich näher mit der Materie befassen wollen oder müssen.</p>
<p>In den nächsten Tagen werde ich ein paar Programmbeispiele veröffentlichen, die sich näher mit der Java-API von Cognos TM1 befassen. Dabei geht es um das automatisierte erstellen, neuerstellen und laden von Datenwürfeln mitsamt ihrer Dimensionen.</p>
<p>Hier der Link zum Forum: <a title="TM1-Forum" href="http://www.tm1forum.com" target="_blank">www.tm1forum.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/05/24/tm1-forum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TM1 Java API SSL Zertifikat</title>
		<link>http://www.alexander-projects.de/2011/05/22/tm1-java-api-ssl-zertifikat/</link>
		<comments>http://www.alexander-projects.de/2011/05/22/tm1-java-api-ssl-zertifikat/#comments</comments>
		<pubDate>Sun, 22 May 2011 18:29:46 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[Cognos TM1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jre]]></category>
		<category><![CDATA[keytool]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[tm1]]></category>
		<category><![CDATA[zertifikat]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=69</guid>
		<description><![CDATA[<div>

Um die TM1 Java API verwenden zu können muss man  dem Java Runtime Environment (JRE) das TM1 SSL Zertifikat hinzufügen.  Dabei geht man wie folgt vor:
<ol>
	<li>Kommandozeilen-Fenster öffnen (Start -&#62; Ausführen -&#62; "cmd")</li>
	<li>Das Verzeichnis auf den bin Ordner seines JRE's leiten (z.B. cd "C:\Program Files\java\jdk1.5.0_06\jre\bin")</li>
	<li>Den folgenden Befehl ausführen:<strong>keytool -import -file "C:\Program Files\Cognos\TM1\bin\ssl\applixca.der" -keystore ..\lib\security\cacerts</strong></li>
</ol>
Die Pfade sind an die eigene Umgebung anzupassen. Das Standardpasswort für den SSL-Manager ist: <strong>changeit</strong><strong></strong>

<strong>Quelle: </strong><a href="http://publib.boulder.ibm.com/infocenter/ctm1/v9r5m0/index.jsp?topic=/com.ibm.swg.im.cognos.tm1_op.9.5.2.doc/tm1_op_id15030RunningTM1inSecureModeUsingSSL_N120007.html" target="blank">Running in Secure Mode Using SSLTM1</a>

</div>]]></description>
			<content:encoded><![CDATA[<div>
<p>Um die TM1 Java API verwenden zu können muss man  dem Java Runtime Environment (JRE) das TM1 SSL Zertifikat hinzufügen.  Dabei geht man wie folgt vor:</p>
<ol>
<li>Kommandozeilen-Fenster öffnen (Start -&gt; Ausführen -&gt; &#8220;cmd&#8221;)</li>
<li>Das Verzeichnis auf den bin Ordner seines JRE&#8217;s leiten (z.B. cd &#8220;C:\Program Files\java\jdk1.5.0_06\jre\bin&#8221;)</li>
<li>Den folgenden Befehl ausführen:<strong>keytool -import -file &#8220;C:\Program Files\Cognos\TM1\bin\ssl\applixca.der&#8221; -keystore ..\lib\security\cacerts</strong></li>
</ol>
<p>Die Pfade sind an die eigene Umgebung anzupassen. Das Standardpasswort für den SSL-Manager ist: <strong>changeit</strong><strong></strong></p>
<p><strong>Quelle: </strong><a href="http://publib.boulder.ibm.com/infocenter/ctm1/v9r5m0/index.jsp?topic=/com.ibm.swg.im.cognos.tm1_op.9.5.2.doc/tm1_op_id15030RunningTM1inSecureModeUsingSSL_N120007.html" target="blank">Running in Secure Mode Using SSLTM1</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/05/22/tm1-java-api-ssl-zertifikat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parameter bei JMeter</title>
		<link>http://www.alexander-projects.de/2011/01/25/parameter-bei-jmeter/</link>
		<comments>http://www.alexander-projects.de/2011/01/25/parameter-bei-jmeter/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 19:08:48 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Fiddler]]></category>
		<category><![CDATA[Generator]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTP-Request]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JMX]]></category>
		<category><![CDATA[Parameter]]></category>
		<category><![CDATA[programm]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[Testplan]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=32</guid>
		<description><![CDATA[Beim Erstellen von Lasttests mit JMeter kommt man gelegentlich in  Situationen, bei denen man Seitenaufrufe mit unzähligen Parametern  simulieren muss. Diese manuell einzutragen ist Zeitaufwändig und  ermüdend. Hier lohnt es sich, sich mit dem gespeicherten Testplan von  JMeter auseinander zu setzen. Dieser liegt als .jmx-Datei vor und ist  nach XML-Strukturen aufgebaut.

In vielen Fällen geschieht die Simulation der Seitenaufrufe anhand  von Protokollierungen des Traffics durch Tools wie beispielsweise  Fiddler. Diese liefern sämtliche übertragenen Parameter und die  übertragungsart (standartmäßig Post oder Get). Der Fiddler-Output eines  Seitenaufrufes sieht beispielsweise so aus:
<div style="padding-left: 30px;">GET  http://www.google.de/search?hl=de&#38;source=hp&#38;q=Wie+f%C3%BCgt+man+Parameter+in+JMeter+geschickt+ein&#38;aq=f&#38;aqi=&#38;aql=&#38;oq=&#38;fp=4d9f1e7e21e257ea  HTTP/1.1
Host: www.google.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Referer: http://www.google.de/
Cookie: PREF=ID=ba066cfb5e57109c:U=6b212b101f47784d:FF=0:
TM=1295956157:LM=1295956337:S=AoUcCTa0d1GBlEYT;  NID=43=AHfuZhjXNVnP8Anb3hitIHrT9r9ysl_FwvhgPL31BBhzx2cIzufWd6nJY2Hb3eh3tg62w-tH-GO96i3Xx4SUuWYbpbWSEWcTGHlUdwhM4RaIEnoKR9jj2vprkNs42sNt</div>
Dieser Beispielrequest zeigt eine Suchanfrage an <em>www.google.de</em>.  Die Parameter werden per GET übertragen und befinden sich in der URL  nach dem Fragezeichen. Möchte man nun diesen Aufruf simulieren, so  kopiert man sich die Zeichenkette der Parameter in ein Script und lässt  dieses die Erstellung der JMeter-Parameter übernehmen.

Das Script muss dazu folgende Aufgaben übernehmen:
<ul>
	<li>Aufteilen der Parameter, die duch ein &#38; getrennt sind</li>
	<li>Aufteiler der einzelnen Parameter in Variablen und Wert</li>
	<li>Jedes dieser Variable-Wert-Paare in einen JMeter-Parameter umwandeln</li>
</ul>
Das nachfolgende Beispiel zeigt den Aufbau eines JMeter-Parameters.  Diese Struktur muss entstehen, um den Output des Scriptes direkt in die  jmx-Datei übernehmen zu können.
<div>
<pre class="brush:html">
	false
	Wert
	=
	true
	Variable</pre>
</div>
Im folgenden Programm wird den Anforderungen entsprechend für jedes  Variable-Wert-Paar eine Zeile des Templates generiert und die  Platzhalter werden ersetzt.
<pre class="brush:java">package main;

public class Generator {
	String template = "" +
			"false" +
			"&#60;@&#60; wert &#62;@&#62;" +
			"=" +
			"true" +
			"&#60;@&#60; name&#62;@&#62;" +
			"";

	public static void main(String[] args) {
		Generator g = new Generator();
		g.process();
	}

	private void process() {
		String parameterLine = "hl=de&#38;source=hp&#38;q=Wie+f%C3%BCgt+man+Parameter+in"
			+"+JMeter+geschickt+ein&#38;aq=f&#38;aqi=&#38;aql=&#38;oq=&#38;fp=4d9f1e7e21e257ea";
		String[] parameterArray = parameterLine.split("&#38;");
		String[] parameter;
		for(int i=1;i &#60;= parameterArray.length;i++){
			//parameter[0] = Var parameter[1] = Value

			parameter = parameterArray[i].split("=");
			String buffer = "";
			buffer = template.replaceAll("&#60;@&#60; name &#62;@&#62;", parameter[0]);
			if (parameter.length &#62; 1) {
				buffer = buffer.replaceAll("&#60;@&#60; wert &#62;@&#62;", parameter[1]);
			} else {
				buffer = buffer.replaceAll("&#60;@&#60; wert &#62;@&#62;", "");
			}
			System.out.println(buffer);
		}
	}
}</pre>]]></description>
			<content:encoded><![CDATA[<p>Beim Erstellen von Lasttests mit JMeter kommt man gelegentlich in  Situationen, bei denen man Seitenaufrufe mit unzähligen Parametern  simulieren muss. Diese manuell einzutragen ist Zeitaufwändig und  ermüdend. Hier lohnt es sich, sich mit dem gespeicherten Testplan von  JMeter auseinander zu setzen. Dieser liegt als .jmx-Datei vor und ist  nach XML-Strukturen aufgebaut.</p>
<p>In vielen Fällen geschieht die Simulation der Seitenaufrufe anhand  von Protokollierungen des Traffics durch Tools wie beispielsweise  Fiddler. Diese liefern sämtliche übertragenen Parameter und die  übertragungsart (standartmäßig Post oder Get). Der Fiddler-Output eines  Seitenaufrufes sieht beispielsweise so aus:</p>
<div style="padding-left: 30px;">GET  http://www.google.de/search?hl=de&amp;source=hp&amp;q=Wie+f%C3%BCgt+man+Parameter+in+JMeter+geschickt+ein&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;fp=4d9f1e7e21e257ea  HTTP/1.1<br />
Host: www.google.de<br />
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729)<br />
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br />
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3<br />
Accept-Encoding: gzip,deflate<br />
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive: 115<br />
Proxy-Connection: keep-alive<br />
Referer: http://www.google.de/<br />
Cookie: PREF=ID=ba066cfb5e57109c:U=6b212b101f47784d:FF=0:<br />
TM=1295956157:LM=1295956337:S=AoUcCTa0d1GBlEYT;  NID=43=AHfuZhjXNVnP8Anb3hitIHrT9r9ysl_FwvhgPL31BBhzx2cIzufWd6nJY2Hb3eh3tg62w-tH-GO96i3Xx4SUuWYbpbWSEWcTGHlUdwhM4RaIEnoKR9jj2vprkNs42sNt</div>
<p>Dieser Beispielrequest zeigt eine Suchanfrage an <em>www.google.de</em>.  Die Parameter werden per GET übertragen und befinden sich in der URL  nach dem Fragezeichen. Möchte man nun diesen Aufruf simulieren, so  kopiert man sich die Zeichenkette der Parameter in ein Script und lässt  dieses die Erstellung der JMeter-Parameter übernehmen.</p>
<p>Das Script muss dazu folgende Aufgaben übernehmen:</p>
<ul>
<li>Aufteilen der Parameter, die duch ein &amp; getrennt sind</li>
<li>Aufteiler der einzelnen Parameter in Variablen und Wert</li>
<li>Jedes dieser Variable-Wert-Paare in einen JMeter-Parameter umwandeln</li>
</ul>
<p>Das nachfolgende Beispiel zeigt den Aufbau eines JMeter-Parameters.  Diese Struktur muss entstehen, um den Output des Scriptes direkt in die  jmx-Datei übernehmen zu können.</p>
<div>
<pre class="brush:html">
	false
	Wert
	=
	true
	Variable</pre>
</div>
<p>Im folgenden Programm wird den Anforderungen entsprechend für jedes  Variable-Wert-Paar eine Zeile des Templates generiert und die  Platzhalter werden ersetzt.</p>
<pre class="brush:java">package main;

public class Generator {
	String template = "" +
			"false" +
			"&lt;@&lt; wert &gt;@&gt;" +
			"=" +
			"true" +
			"&lt;@&lt; name&gt;@&gt;" +
			"";

	public static void main(String[] args) {
		Generator g = new Generator();
		g.process();
	}

	private void process() {
		String parameterLine = "hl=de&amp;source=hp&amp;q=Wie+f%C3%BCgt+man+Parameter+in"
			+"+JMeter+geschickt+ein&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;fp=4d9f1e7e21e257ea";
		String[] parameterArray = parameterLine.split("&amp;");
		String[] parameter;
		for(int i=1;i &lt;= parameterArray.length;i++){
			//parameter[0] = Var parameter[1] = Value

			parameter = parameterArray[i].split("=");
			String buffer = "";
			buffer = template.replaceAll("&lt;@&lt; name &gt;@&gt;", parameter[0]);
			if (parameter.length &gt; 1) {
				buffer = buffer.replaceAll("&lt;@&lt; wert &gt;@&gt;", parameter[1]);
			} else {
				buffer = buffer.replaceAll("&lt;@&lt; wert &gt;@&gt;", "");
			}
			System.out.println(buffer);
		}
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/01/25/parameter-bei-jmeter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lebensdauer von Objekten in PHP</title>
		<link>http://www.alexander-projects.de/2011/01/23/lebensdauer-von-objekten-in-php/</link>
		<comments>http://www.alexander-projects.de/2011/01/23/lebensdauer-von-objekten-in-php/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 19:06:55 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[lebensdauer]]></category>
		<category><![CDATA[Objekte]]></category>
		<category><![CDATA[Objektorientiert]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Session]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=29</guid>
		<description><![CDATA[Seit Version 5 ist PHP nun vollständig objektorientiert. Dies war bisher nur bedingt möglich, da das Überladen von Klassen oder Datenkappselung nicht möglich war.

Nach diesen Änderungen stellt sich für viele nun die Frage, wie lange denn diese Objekte existieren.

Dabei gilt das selbe wie bei Java. Objekte existieren, solange bis ihr Gültigkeitsbereich (auch Scope genannt) verlassen wird.

Hat man vor, Objekte auch nach einem neuen Seitenaufruf noch benutzen zu können, so kann man diese als Sessionvariable speichern. Dabei ist wichtig, dass die PHP-Datei, welche den Code der Klasse enthält eingebunden wird, bevor ein Objekt aus einer Session geholt wird. Ansonsten gehen die Daten des Objekts verloren

Wer zur Performanceoptimierung nicht jedes mal auf die Datenbank zugreifen will, um Objekte von Klassen zu erzeugen, dem sei gesagt, dass das Abspeichern der Objekte in einer Session keine geeignete Alternative ist. Denn das Zurückholen der Daten aus der Session dauert länger als das Zugrefein auf die Datenbank. Das liegt daran, dass auch die Daten der Session irgendwo in Datei-Form gespeicher sein müssen, und erst wieder deserialisiert werden müssen]]></description>
			<content:encoded><![CDATA[<p>Seit Version 5 ist PHP nun vollständig objektorientiert. Dies war bisher nur bedingt möglich, da das Überladen von Klassen oder Datenkappselung nicht möglich war.</p>
<p>Nach diesen Änderungen stellt sich für viele nun die Frage, wie lange denn diese Objekte existieren.</p>
<p>Dabei gilt das selbe wie bei Java. Objekte existieren, solange bis ihr Gültigkeitsbereich (auch Scope genannt) verlassen wird.</p>
<p>Hat man vor, Objekte auch nach einem neuen Seitenaufruf noch benutzen zu können, so kann man diese als Sessionvariable speichern. Dabei ist wichtig, dass die PHP-Datei, welche den Code der Klasse enthält eingebunden wird, bevor ein Objekt aus einer Session geholt wird. Ansonsten gehen die Daten des Objekts verloren</p>
<p>Wer zur Performanceoptimierung nicht jedes mal auf die Datenbank zugreifen will, um Objekte von Klassen zu erzeugen, dem sei gesagt, dass das Abspeichern der Objekte in einer Session keine geeignete Alternative ist. Denn das Zurückholen der Daten aus der Session dauert länger als das Zugrefein auf die Datenbank. Das liegt daran, dass auch die Daten der Session irgendwo in Datei-Form gespeicher sein müssen, und erst wieder deserialisiert werden müssen</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/01/23/lebensdauer-von-objekten-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SVN Hooks</title>
		<link>http://www.alexander-projects.de/2011/01/21/svn-hooks/</link>
		<comments>http://www.alexander-projects.de/2011/01/21/svn-hooks/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 19:05:08 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[Client-Hook]]></category>
		<category><![CDATA[Hook]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Server-Hook]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=21</guid>
		<description><![CDATA[<img class="alignleft size-medium wp-image-22" title="hookScript" src="http://www.alexander-projects.de/wp-content/uploads/2011/05/hookScript-300x196.png" alt="" width="226" height="148" />SVN hat die Möglichkeit bei beliebigen Aktionen des Nutzers wie beispielsweise einem Commit Programme automatisch zu starten. Im Falle des Pre-Commit-Hooks würde dies vor der Commit-Funktion geschehen.

In den SVN-Tortoise Settings kann man Hooks einrichten. Dazu wählt man die Art des Hooks aus, in welchem Verzeichnis er gültig sein soll, und welches Programm gestartet werden soll. Hier empfiehlt es sich, eine Batch-Datei oder ähnliches zu starten, welche die Aufrufe des gewünschten Programmes beinhaltet.

<img class="alignright size-medium wp-image-25" title="hookScriptAdd" src="http://www.alexander-projects.de/wp-content/uploads/2011/05/hookScriptAdd-300x110.png" alt="" width="300" height="110" />Wer einen solchen Hook auf mehreren Rechnern installieren muss, für den empfiehlt es sich, den Eintrag automatisch vornehmen zu lassen. Die Hooks werden in der Registry abgespeichert und können somit automatisch per Script eingegeben werden. Einzige Problematik stellt hier die Kodierung des Registry-Schlüssels dar, der Zeilenumbrüche beinhaltet.

Achtung: Wer den Pre-Commit-Hook dazu verwendet, Dateien zu formatieren, der muss damit rechnen, dass man danach nicht mehr nachvollziehen kann, welche Dateien sich beim Commit geändert haben, da sich durch die Formatierung alle Zeilen ändern]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-22" title="hookScript" src="http://www.alexander-projects.de/wp-content/uploads/2011/05/hookScript-300x196.png" alt="" width="226" height="148" />SVN hat die Möglichkeit bei beliebigen Aktionen des Nutzers wie beispielsweise einem Commit Programme automatisch zu starten. Im Falle des Pre-Commit-Hooks würde dies vor der Commit-Funktion geschehen.</p>
<p>In den SVN-Tortoise Settings kann man Hooks einrichten. Dazu wählt man die Art des Hooks aus, in welchem Verzeichnis er gültig sein soll, und welches Programm gestartet werden soll. Hier empfiehlt es sich, eine Batch-Datei oder ähnliches zu starten, welche die Aufrufe des gewünschten Programmes beinhaltet.</p>
<p><img class="alignright size-medium wp-image-25" title="hookScriptAdd" src="http://www.alexander-projects.de/wp-content/uploads/2011/05/hookScriptAdd-300x110.png" alt="" width="300" height="110" />Wer einen solchen Hook auf mehreren Rechnern installieren muss, für den empfiehlt es sich, den Eintrag automatisch vornehmen zu lassen. Die Hooks werden in der Registry abgespeichert und können somit automatisch per Script eingegeben werden. Einzige Problematik stellt hier die Kodierung des Registry-Schlüssels dar, der Zeilenumbrüche beinhaltet.</p>
<p>Achtung: Wer den Pre-Commit-Hook dazu verwendet, Dateien zu formatieren, der muss damit rechnen, dass man danach nicht mehr nachvollziehen kann, welche Dateien sich beim Commit geändert haben, da sich durch die Formatierung alle Zeilen ändern</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/01/21/svn-hooks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter und JSF (ViewState)</title>
		<link>http://www.alexander-projects.de/2011/01/20/jmeter-und-jsf-viewstate/</link>
		<comments>http://www.alexander-projects.de/2011/01/20/jmeter-und-jsf-viewstate/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 18:23:32 +0000</pubDate>
		<dc:creator>Alexander Widmann</dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[Extractor]]></category>
		<category><![CDATA[Hidden Field]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Regular]]></category>
		<category><![CDATA[Regular Expression]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[ViewState]]></category>

		<guid isPermaLink="false">http://www.alexander-projects.de/?p=93</guid>
		<description><![CDATA[Beim simulieren von JSF-Seitenaufrufe mit JMeter muss man beachten, dass im generierten HTML-Code ein Hidden-Field ist, welches ein ViewState beinhaltet. Der Inhalt dieses Feldes muss bei jedem Request an den Server mitgesendet werden.

Um diese ViewState zu ermitteln benötigt man einen Regular Expression Extractor. Dieser kann anhand eines Regulären Ausdrucks im Quellcode der vorherigen Seite nach diesem versteckten Feld suchen und die ViewState ermitteln.

Der reguläre Ausdruck sollte in etwa so aussehen:
<pre class="base:xml"><input id="javax\.faces\.ViewState" name="javax\.faces\.ViewState" type="hidden" value="(.+?)" /></pre>
Als Reference-Name gibt man den Namen an, mit dem man die ViewState später abrufen möchte. Das funktioniert wie bei Variablen so: <strong>${ViewState}</strong>]]></description>
			<content:encoded><![CDATA[<p>Beim simulieren von JSF-Seitenaufrufe mit JMeter muss man beachten, dass im generierten HTML-Code ein Hidden-Field ist, welches ein ViewState beinhaltet. Der Inhalt dieses Feldes muss bei jedem Request an den Server mitgesendet werden.</p>
<p>Um diese ViewState zu ermitteln benötigt man einen Regular Expression Extractor. Dieser kann anhand eines Regulären Ausdrucks im Quellcode der vorherigen Seite nach diesem versteckten Feld suchen und die ViewState ermitteln.</p>
<p>Der reguläre Ausdruck sollte in etwa so aussehen:</p>
<pre class="base:xml">
<input id="javax\.faces\.ViewState" name="javax\.faces\.ViewState" type="hidden" value="(.+?)" /></pre>
<p>Als Reference-Name gibt man den Namen an, mit dem man die ViewState später abrufen möchte. Das funktioniert wie bei Variablen so: <strong>${ViewState}</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexander-projects.de/2011/01/20/jmeter-und-jsf-viewstate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

