<?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>Schauderhaft &#187; aop</title>
	<atom:link href="http://blog.schauderhaft.de/tag/aop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 05 Feb 2012 20:46:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Good Logging Practices</title>
		<link>http://blog.schauderhaft.de/2009/09/16/good-logging-practices/</link>
		<comments>http://blog.schauderhaft.de/2009/09/16/good-logging-practices/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 12:00:46 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[good practice]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[meta logga]]></category>
		<category><![CDATA[slf4j]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=210</guid>
		<description><![CDATA[Nearly everybody does some kind of logging in their application, but few do it in a well structured way. I&#8217;d like to point out some practices that I consider helpful in order to get the most out of your logging. This post will also work as a handout for my talk about logging at the [...]]]></description>
			<content:encoded><![CDATA[<p>Nearly everybody does some kind of logging in their application, but few do it in a well structured way. I&#8217;d like to point out some practices that I consider helpful in order to get the most out of your logging. This post will also work as a handout for my <a href="http://www.herbstcampus.de/hc09/program/sessions.html#29">talk about logging</a> at the herbstcampus conference. So here we go:</p>
<ol>
<li><strong>Know your audience</strong>. If you look at the log files of many applications you quickly realize who the intended audience is: Developers. The log is full with technical detail, but not much of it makes sense to anybody else. The groups you probably should have on your list are: <strong>Developers</strong> on the search for bugs, performance issues, <strong>Administrators</strong> trying to install, start or shutdown your application and <strong>Support</strong> personal trying to detect and analyze problems or trying to verify that a problem did not occur. Once you realize there are different audiences you&#8217;ll understand what kind of information is helpfull in the logs.</li>
<li><strong>Use a framework</strong>. The major options are: <a href="http://logging.apache.org/log4j/1.2/index.html">Log4j</a>, <a href="http://www.slf4j.org/">SLF4J</a>, <a href="http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html">JUL</a>, <a href="http://commons.apache.org/logging/">Commons Logging</a> or <a href="http://logback.qos.ch/">Logback</a>. Each one has it&#8217;s pros and cons, but they are all better then System.out.println. They allow you to configure at deploy or runtime, what gets logged where and in what format. If you don&#8217;t want to do any research, and don&#8217;t have special requirements, use SLF4J.</li>
<li><strong>Logging must be rock solid</strong>. If a logging causes problems. Throw it out. Don&#8217;t do experiments like remote logging, if you can avoid it.</li>
<li><strong>Define rules, when to use which Log Level</strong>: I propose the following:
<ul>
<li>DEBUG: Not important, except if you are researching a very specific problem.</li>
<li>INFO: General information like startup, shutdown, version and configuration of an application. Information about important decisions in the code or changes in the configuration.</li>
<li>WARN: Things that are fishy, but don&#8217;t represent a problem in themself, but might indicate a problem when appearing very often. E.g. a failed log in attempt is such a candidate. If it happens sometime it is not a problem, but if it happens a lot somebody might want to look into that.</li>
<li>ERROR: This should only be used when a problem occurs that somebody needs to look into. Typically but not necessarily relating to an exception in the code. Use this when only a limited part of the application is affected.</li>
<li>FATAL: If something goes completely wrong, rendering the application unable to recover this log level is appropriate, very likely accompanied by a shutdown of the application or the session.</li>
</ul>
<p>Of course your rules need some tayloring for your context, but absolutely need rules, and every developer must know and understand those.</li>
<li><strong>Log everything you log exactly once</strong>: When analyzing log files I often see log messages that always come in groups. This happens often when exceptions get caught, logged, and rethrown. Don&#8217;t do that. Log at the place where you actually do handle the exception. This is the only way to log an exception exactly once and also being able to decide which log level to use.</li>
<li><strong>Include useful information and data</strong>: The information should typically include answers to the following questions
<ul>
<li>Why are you logging this, typically the root cause of an exception.</li>
<li>What is the affected use case? Did it happen during creation of an order or when importing product data from a remote site?</li>
<li>What effect has it on the use case that was executing? Does the user need to repeat the action, or did it succeed? Did the complete batch fail, or just a single step?</li>
<li>What instance of the use case was effected? For example an order id.</li>
</ul>
<p>In order to make all this information available to your logs <a href="http://logback.qos.ch/manual/mdc.html">MDC (Mapped Diagnostic Context)</a> is tremendously helpful. If you don&#8217;t know MDC, follow the link and read about it NOW. MDC exists also in <a href="http://www.slf4j.org/api/org/slf4j/MDC.html">SLF4J</a> and <a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html">Log4J</a> and should be easy to port for other frameworks as well.</li>
<li><strong>Use <a href="/2009/02/24/logging/">more then one logging hierachy</a></strong>: The link contains more information about why. The simple idea is, that you can seperate different aspects you want to log by using different prefixes. This becomes especially usefull when adhering to the following points</li>
<li><strong>Log the time needed for stuff which might be intersting for tuning</strong>: Of course this includes the time used for access to remote resources (e.g. webservices or databases) and execution of complex algorithms, but possibly also the time spend in the various layers in the application. You can use different log level for three categories, a separate logging hierarchy for separating performance logging from other stuff. Performance problems a notorious difficult to hunt down, especially when they appear over time. You&#8217;ll love this logs, when performance becomes an issue.</li>
<li><strong>Log stuff that worked, not only what failed</strong>: Distributed systems become common place more and more. When debugging distributed system one often has the situation that requests just disappear, and it can be extremely challenging to decide which component failed. After all not everybody does such a fine logging as us, right? So I recommend the following log events:
<ul>
<li>RECEIVED: The application received a request through the UI, a Webservice or any kind of interface offered.</li>
<li>SEND: The application send a request to some other component.</li>
<li>GOT ANSWER:  The application got a reply to a request it send.</li>
<li>ANSWERED: The application answered to a request it received.</li>
</ul>
</li>
<li><strong>Log how often stuff happens</strong>: One possible reason for decreasing performance is a changed usage pattern. So logging how often per day, hour or minute a certain kind of use case is triggered can help tremendously.</li>
</ol>
<p>While obviously I recommend a lot of logging, it isn&#8217;t free of cost. So when doing some logging you should be sure to avoid it in tight loops that get executed millions of times. Also MDC keeps a reference to everything you put into, so make sure to clear it when you are done and think twice before putting complex objects in. And finally think about data privacy. A lot of people might have access to the log files. They shouldn&#8217;t find passwords, credit cards or similar information their.</p>
<p>Probably somewhere around point number 8 you might have started to think: &#8220;Man this guy is crazy. I&#8217;ll have more highly repetitive logging code than anything else in my application!&#8221; And if you do everything by hand you are probably right. But if you have cleanly structured code where you can deduct use cases, application layers, access to remote connections and so on from the method signature and the packages involved, most of these logging statement can get injected using AOP. So what is left is to create a framework that handles all this.</p>
<p>Since I couldn&#8217;t find an Open Source Solution I started my own: <a href="http://code.google.com/p/metalogga/">Meta Logga</a>. It is still in an extremely early stage, definitely not ready to be used, but possibly ready to understand where I am heading.</p>
<p>If you agree with me that this is indeed something that would be useful you can help in many extremely easy ways. Comment on this post, <a href="http://twitter.com/jensschauder">tweet</a> it, dzone it, blog about or in any other way make this post more visible to others. All this will help me to keep motivated, thus it will help the project.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/09/16/good-logging-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Where are the High Level Frameworks?</title>
		<link>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/</link>
		<comments>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 11:46:49 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=169</guid>
		<description><![CDATA[I became a java developer (and not a C developer for example) because java takes a lot of the pain away. I just love the garbage collector. Sure it can give you a hard time, but 99% memory is not an issue in the projects I am working on. The object oriented paradigm also made [...]]]></description>
			<content:encoded><![CDATA[<p>I became a java developer (and not a C developer for example) because java takes a lot of the pain away. I just love the garbage collector. Sure it can give you a hard time, but 99% memory is not an issue in the projects I am working on. The object oriented paradigm also made it way easier to write the big complex systems, enterprise applications seem to be these days. In this layers of abstraction we do loose a little performance, or actually a lot, but again: 99% of the time performance of java code is not an issue at all. Performance is controlled by network and database access.</p>
<p>So I should be pretty happy right? Well in the general sense actually I am, but as a developer, I have the feeling that I am operating on the wrong level of abstraction. A lot of the time I am working directly on the code level. Writing getters, setters, exception handling, logging. There are some areas, where the abstraction level moved considerable upwards in the last years. Persistence comes to the mind. Hibernate is pretty reasonable, although it has it&#8217;s problems, and it&#8217;s enemies. Another one might be rules engines, I haven&#8217;t tried those. But other then that &#8230;? Of course there has been progress. A lot of progress. We have hundreds of languages, many with very interesting features. We have a large choice of databases with innovative concepts to choose from, and of course a pletorea of java libraries for almost every purpose. We have IDEs so smart, I sometimes wonder if they are really just another piece of code. So what am I complaining about?</p>
<p>I think it is about time for the next paradigm shift. Why are we still coding objects? An example: I want to build the ubiquitous shopping system. I take a jar I found somewhere on the web to get started. Of course I have my own little idea, about how this thing should work, so I want to tweak the shopping cart a little. So what do I do?</p>
<pre>public class MyCart extends somebody.elses.Cart {
    public void setRealyCoolFeature() { ...</pre>
<p>But most of the time, this doesn&#8217;t work. Because the new attribute doesn&#8217;t get saved in the database. Or maybe it does, but the repository returns only Cart&#8217;s and not MyCart&#8217;s. The gui doesn&#8217;t show the new attribute, actually the gui of the component is for swing, but I want a web gui. No problem I can write that, but now I have tons of fireProperty noise in the code, that really nobody cares about. Of course it&#8217;s better than the other way round, because it is extremely tricky get fireProperty calls into a class without changing the source files.</p>
<p>Hold on a second I know what you are thinking: You fix that with a little AOP here, and this won&#8217;t be a problem if the component was cleanly designed in the first place. Agreed. But my point is: I want to use the concept of a shopping system. I don&#8217;t want to deal with technical detail like AOP, IoC and similar. Or from the perspective of the component provider: I want to code the concept of a shopping system, and I do not care, how the users want to store it, how they want to show it, and how they want to extend it. That is what I&#8217;d call a new paradigm.</p>
<p>Of course I am not the first calling for the next paradigm since OOP. Actually there are many alternatives out there on various levels: AOP, Functional Programming, Meta Programming on the very technical side. Business Process Modeling, Rule Engine, and Components pretend to operate on a higher level, but sometimes I get the feeling they&#8217;re just a glorified version of Basic. None of those come even close, to what I imagine. And I don&#8217;t even use drugs to get there. Still there might be a solution in sight. Imagine something along these lines:</p>
<p>If you write a component, you use a language that is much more expressive than java, possibly like groovy but two steps further and with a strong type checking (I&#8217;m a fan of strong type checking). In this language you specify the structure (the relationships) of you component. Using the equivalent of annotations on stereoids you specify things like transactional behavior, logging behavior, GUI representation, concurrency options, but on a very high abstraction level. For example for concurrency you don&#8217;t specify locks, latches and stuff like that, instead you specify data that is related and there for needs protection against concurrent access.</p>
<p>All this is not compiled into a single jar (or whatever we will call it), but actually ends up in separate ajars (Aspect Jars). So as a user, I can take the differnt pieces, and create a extension, specifying the various aspects  in the same way, thereby extending all the aspects I need to extend. This is possible, since the aspects are still separated, and not compiled in one big blob. And the original developer separated those, because it was the easiest thing to do.</p>
<p>The guy actually using the component, somebody else created, and extended be  me, uses the components in a high level DSL, that allows him to glue pieces together. For example he could specify which kind of order and invoice component should get created from the cart component. And although the three components come frome completely distinct developers, they would be joined automatically using domain information from the semantic internet. This joining would of course need some tweaking but it should give you a head start. I think this sounds extremely nice, doesn&#8217;t it?</p>
<p>Will it happen? Most certainly not. The description is to specific to fit whatever comes, yet way to vague for anybody to actually implement it. BUT I am pretty optimistic something along these lines will actually happen in the next 10 years. DSLs and AOP and new languages that allow Aspects to be written as easily as a for loop will be key players at it.</p>
<p>So if you are a genius with lots of time and a strong developer team at hand, get into contact with me to exchange ideas. If you just a stupid enterprise application developer as I am that needs a job for the next 30-40 years to come, get used to AOP, watch the new languages and don&#8217;t worry to much about concurrency.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 08: Sprachen,  Concurrency, Security, Architektur</title>
		<link>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</link>
		<comments>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/#comments</comments>
		<pubDate>Mon, 19 May 2008 18:40:08 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[jax08]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/</guid>
		<description><![CDATA[Wie schon erwähnt war ich vor ein paar Wochen auf der JAX 08, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse. Sprachen Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon <a href="/2008/04/24/komplexitat-und-die-neuen-sprachen/">erwähnt</a> war ich vor ein paar Wochen auf der <a href="http://it-republik.de/jaxenter/blog/2008/02/12/dynamische-sprachen-ruby-jruby-groovy-co/">JAX 08</a>, und ich bin immer noch mit den Nachwirkungen beschäftigt. Hier meine persönliche Zusammenfassung der wesentlichen Erkenntnisse.</p>
<p><strong>Sprachen</strong></p>
<p>Das aktuelle Thema überhaupt ist sicherlich Sprachen. Durch die Allgegenwart von zwei wesentlichen Laufzeitumgebungen (JVM von Java/Sun und der CLR von .NET/Microsoft) ist es extrem einfach neue Sprachen mal auszuprobieren. Zu dem Thema empfehle ich den <a href="http://www.voelter.de/data/articles/trends2007.pdf">Artikel von Markus Völter</a>.</p>
<p>Meine persönlichen Erkenntnisse dazu:</p>
<ul>
<li>Fast(?) nichts von den Konzepten ist neu. Die Basis für funktionale Sprache z.B. ist das Lambda Kalkül von 1930. Insbesondere das Polyglotte Programmieren ist doch längst Standard. Ich z.B. zähle in den meisten Projekten mindestens Java, SQL, PL/SQL, HTML und CSS zu meinem Handwerkszeug. Was sich ändern könnte, ist warum wir zwei oder mehr Sprachen einsetzen: Weil bestimmte Aspekte in der einen, andere in der zweiten Sprache besser darstellbar sind. Während bisher der Grund der Mangel an Alternativen ist. (Ja ich weiß, man kann auch in Oracle mit Java arbeiten. Aber wer das einwirft hat es noch nicht ernsthaft ausprobiert).</li>
<li>Wir werden uns damit beschäftigen müssen. Heiße Kandidaten für die praktische Anwendung sind für mich: Groovy und Scala.<br />
Auch spannend finde ich Haskell. Ich habe vor vielen Jahren an der Uni <a href="http://de.wikipedia.org/wiki/Miranda_%28Programmiersprache%29">Miranda </a>gelernt und hätte nie gedacht, dass dies mal im Berufsleben relevant werden könnte.<br />
Als Physiker, der einmal intensiv mit Fortran gearbeitet hat finde ich auch <a href="http://en.wikipedia.org/wiki/Fortress_%28programming_language%29">Fortress </a>sehr beeindruckend. Dies Sprache kann zumindest für Mathematiker und ähnliche <a href="http://research.sun.com/projects/plrg/faq/NAS-CG.pdf">sehr leserlich gerendert</a> werden und ist speziell auf (massiv)parallele Ausführung ausgerichtet.</li>
</ul>
<p>Womit wir bei einem weiteren Thema sind:</p>
<p><strong>Concurrency</strong></p>
<p>Das Moore&#8217;sche Gesetz als Basis des Quaketunings (18 Monate Quake spielen, schon ist die Anwendung doppelt so schnell) ist am Ende. Als &#8216;horizontale Ausweichbewegung&#8217; werden uns von AMD und Intel Mehrkern CPUs auf den Schreibtisch gestellt. Dadurch geraten überall Leute in Panik, existierende Anwendungen würden nun wie die Fliegen von den Wänden fallen, da Threadingprobleme sich nun manifestieren.</p>
<p>Nun ja, ich weiß nicht was für Anwendungen ihr schreibt, aber ich schreibe beruflich entweder Swing oder Webanwendungen, die auf Datenbanken gehen. Nur ein sehr kleiner Teil der Arbeit steckt in komplexen Algorithmen, und ich habe noch nie etwas davon parallelisiert. Datenbanken und Webserver laufen &#8216;schon immer&#8217; auf Mehrprozessormaschinen. Es sind heute halt 512 statt 16. Die Art und Weise wie dort Parallelverarbeitung eingesetzt wird, ist extrem einfach und daher handhabbar: Jede Anfrage bekommt einen Thread, und darf ihn für sich alleine verwenden, bis die Anfrage abgearbeitet ist. Zumindest sieht es aus der Sicht des Entwicklers so aus.</p>
<p>Nur in Swing muss man typischer Weise mit mehreren Threads arbeiten, da lang laufende Aktionen sonst die Darstellung der Anwendung blockieren. Dies wird man aber wenn irgend möglich minimieren,  da jeder der <a href="http://www.amazon.de/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.de%2FConcurrent-Programming-Java-Principles-Addison-Wesley%2Fdp%2F0321256174%3Fie%3DUTF8%26s%3Dbooks-intl-de%26qid%3D1211220705%26sr%3D1-5&amp;site-redirect=de&amp;tag=schauderhafte-21&amp;linkCode=ur2&amp;camp=1638&amp;creative=6742">Doug Leas Buch</a><img src="http://www.assoc-amazon.de/e/ir?t=schauderhafte-21&amp;l=ur2&amp;o=3" style="border: medium none  ! important; margin: 0px ! important" border="0" height="1" width="1" /> gelesen hat, weiß wie schwierig Concurrency ist.</p>
<p>Viele der neuen Sprachen haben aber Konstrukte, die die Verteilte Ausführung unterstützen und es ist ja nicht so, dass wir die nicht zu nutzen wüssten. Unabhängig von der Anzahl der Prozessoren gibt es nämlich einen Bereich, in dem Concurrency eine Rolle spielen sollte: bei dem Zugriff auf verteilte Ressourcen. Egal ob es die Datenbank oder der entfernte Web Service ist, wenn wir eine Anfrage abschicken und warten, bis die Antwort kommt, bevor wir die nächste Anfrage lostreten verschwenden wir mindestens Zeit, und meist auch wertvolle Ressourcen (mindestens den wartenden Thread). Je nachdem wie knapp die Ressourcen sind, wird man früher oder später genötigt sein, die Anfragen parallel anzustoßen und anschließend die Ergebnisse zusammenzuführen. Schön wenn die Sprache mit der man dies tut, ein solches Vorgehen angemessen unterstützt.</p>
<p><strong>Security</strong></p>
<p>Es gibt immer wieder Stimmen, die meinen, Security würde jetzt DAS große Thema. Vertraut mir, wird es nicht. Genauso wenig wie Gasmasken oder Panzertüren DAS große Thema werden. Aber Security ist ein Dauerbrenner, den niemand ignorieren sollte. Oder schließt ihr euer Auto und eure Wohnung nicht ab?  Daher gab es auch auf der JAX Vorträge zu diesem Thema.</p>
<p>Für mich die wichtigsten Punkt waren dabei:</p>
<ul>
<li> * Der <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Zyklus</a> gilt auch hier. D.h.
<ul>
<li> Plant was eure Sicherheitsziele sind und was ihr dafür tun müsst. Wollt ihr euch gegen Skriptkiddies schützen? Oder haltet ihr die NSA für euren Feind? In letzterem Fall könnte aber auch ein Psychater helfen <img src='http://blog.schauderhaft.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li> Führt die Maßnahmen durch.</li>
<li> Prüft, ob die Maßnahmen wirksam sind.</li>
<li> Wenn die Prüfung negativ ausfällt, reagiert darauf.</li>
</ul>
</li>
<li> Schwierig an dem Security Thema ist, dass selbst gigantische Sicherheitsprobleme nicht von allen erkannt werden. Wenn ich in mein Haus eine Tür aus Pappe einbaue, brauche ich keinen Experten um zu erkennen, dass das eine schlechte Idee ist. Bei Software ist das ganze deutlich weniger offensichtlich. Ich habe die privaten Schlüssel für Zertifikate schon gemailt bekommen. Daher gibt es eine ganz wichtige Aufgabe, wenn eine Anwendung &#8216;sicher&#8217; werden muss: Awareness schaffen. Alle Beteiligten (Entwickler, Designer, Tester, Administratoren, Anwender, &#8230;) müssen in Sachen Security geschult werden. Denn was nützt die schöne Sicherheitsarchitektur, wenn der Benutzer seines Sohnes Namen als Passwort verwendet und das auch noch per E-Mail verschickt und auf den Monitorrahmen schreibt?</li>
<li> Security heißt nicht einfach Benutzer Authentifizierung und Authorisierung sondern durchdringt den gesamten Entwicklungsprozess.
<ul>
<li> Bei der Analyse müssen die Anforderungen aufgenommen werden.</li>
<li> Diese müssen bei der Architektur und dem Design berücksichtigt werden.</li>
<li> Es muss natürlich implementiert werden,</li>
<li> aber auch getestet,</li>
<li> deployed</li>
<li> und genutzt</li>
</ul>
<p>Und wie ich oben skizziert habe, gibt es auch in den Bereichen Herausforderungen, wo man sie normalerweise vielleicht nicht erwartet.</li>
</ul>
<p><strong>Architektur</strong></p>
<p>Ist ein weiterer Dauerbrenner, und ähnlich wie bei Security lautet hier mein Hinweis <a href="http://de.wikipedia.org/wiki/Demingkreis">Deming Circle</a>! Eine Architektur hat eine Aufgabe zu erfüllen. Die Aufgabe sollte vorher klar sein und nachher muss geprüft werden, dass die Aufgabe gelöst wurde. Ansonsten ist Architektur ein Unfall oder Selbstbefriedigung des Architekten.</p>
<p>Durch das Thema Nr.1 &#8216;Sprachen&#8217; gewinnen wir gerade im Bereich Architektur gerade gewaltig an Möglichkeiten:</p>
<ul>
<li>Unterschiedliche Sprachen für unterschiedliche Bereiche.</li>
<li>DSLs für Spezialfälle</li>
<li>AOP oder spezielle Sprachstrukturen für die Umsetzung von Architekturentscheidungen</li>
</ul>
<p><strong>SOA und BPM</strong></p>
<p><a href="/2008/04/23/konferenzen-und-big-player-sessions/">Viel Hype und (fast) nichts dahinter</a>.</p>
<p><strong>Das 5. Element (Quintessenz)</strong></p>
<p>Die Probleme bleiben die alten. Die Lösungen sind auch nicht neu. Die Zeiten bleiben interessant.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/05/19/jax-08-sprachen-concurrency-security-architektur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

