<?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>Devon Hillard&#039;s Digital Sanctuary &#187; Java</title>
	<atom:link href="http://www.digitalsanctuary.com/tech-blog/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.digitalsanctuary.com/tech-blog</link>
	<description>Java, ATG, Seam, and related Technologies</description>
	<lastBuildDate>Mon, 30 Jan 2012 23:04:32 +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>Spark::red 2011 Review and 2012 Preview</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-2011-review-and-2012-preview.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-2011-review-and-2012-preview.html#comments</comments>
		<pubDate>Tue, 27 Dec 2011 06:14:19 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>
		<category><![CDATA[commerce]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[Spark::red]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=910</guid>
		<description><![CDATA[2011 has been an amazing year for Spark::red ATG Oracle Commerce Hosting. We&#8217;ve added several new clients (including a well known member of the Fortune 1000!) We&#8217;ve added 101 new dedicated servers and over 20 cloud computing instances We&#8217;ve opened &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-2011-review-and-2012-preview.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>2011 has been an amazing year for <a title="Sparkred ATG Hosting" href="https://www.sparkred.com" target="_blank">Spark::red ATG Oracle Commerce Hosting</a>.</p>
<ul>
<li>We&#8217;ve added several new clients (including a well known member of the Fortune 1000!)</li>
<li>We&#8217;ve added 101 new dedicated servers and over 20 cloud computing instances</li>
<li>We&#8217;ve opened an office in Boston</li>
<li>We&#8217;ve earned our PCI Level 1 MSP Certification</li>
<li>We&#8217;ve hired several employees, a large number of contractors, and even picked up an intern!</li>
<li>We&#8217;ve gone from 3 data centers in the USA to 13 data centers and 16 points-of-presence including several international facilities</li>
<li>While our competitors have raised prices, we&#8217;ve managed to keep prices the same or actually reduce them in many places.  All this while providing newer more powerful hardware across the board</li>
<li>We&#8217;ve introduced a new <a href="https://www.sparkred.com/solutions/Oracle_ATG_Commerce_Standard_Hosting_Package.xhtml?cid=10160" target="_blank">Oracle ATG Commerce Standard Hosting Package</a> which provides excellent performance, stability, and security, for a very affordable package price</li>
<li>Served well over 200 TB of content</li>
<li>Partnered with JBoss/Redhat, Oracle, Akamai, Keynote, Knowledge Path, and many other industry leaders in order to provide the absolute best hosting, support, and related services</li>
<li>More more!</li>
</ul>
<div>We&#8217;ve grown a lot in 2011 in every measurable dimension.  Clients, revenue, employees, contractors, servers, bandwidth, offices, processes, every aspect of the business has been growing nicely.</div>
<div></div>
<div>2012 is looking like it will be even bigger!  We have lots of prospective clients, two new international data centers opening in Australia and South America, international clients, new hires, a site redesign, a big sales and marketing push, new free ATG modules and open source code, and lots more!</div>
<div></div>
<div>I&#8217;m very excited about the upcoming year and what it will bring.  If you&#8217;d like to talk to us about what we can do to help you in 2012 give us a <a href="https://www.sparkred.com/about/contact.xhtml" target="_blank">call or email us about your ATG Hosting needs</a>!</div>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-2011-review-and-2012-preview.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What Oracle/ATG Could Do With Licensing</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/what-oracleatg-could-do-with-licensing.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/what-oracleatg-could-do-with-licensing.html#comments</comments>
		<pubDate>Thu, 18 Aug 2011 14:26:11 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>
		<category><![CDATA[licensing]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=773</guid>
		<description><![CDATA[This is a follow-up to my post earlier this week: ATG Licensing &#8211; One Step Forward, Two Steps Back. I feel like Oracle has really shot themselves in the foot on this. They&#8217;ve changed up how many licenses need to &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/what-oracleatg-could-do-with-licensing.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is a follow-up to my post earlier this week: <a title="ATG Licensing - One Step Forward, Two Steps Back" href="http://www.digitalsanctuary.com/tech-blog/java/atg/atg-licensing-one-step-forward-two-steps-back.html">ATG Licensing &#8211; One Step Forward, Two Steps Back</a>.<br />
<img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2011/08/3366720659_b746789dfd_m.jpg" alt="" title="Money" width="240" height="160" class="alignright size-full wp-image-875" /><br />
I feel like Oracle has really shot themselves in the foot on this. They&#8217;ve changed up how many licenses need to be sold as a minimum to small and medium customers, and they&#8217;ve done this without adequate training for their sales staff. They&#8217;ve dramatically increased the mid-market entry level costs, pricing themselves out of many deals &#8211; even with aggressive discounting. They&#8217;ve also really failed to take care of their existing customers. There&#8217;s a huge number of existing ATG customers out there, who were sold a bundle of licenses which prevents them from upgrading without spending a significant amount out of pocket. Those customers have been paying annual support fees against a broken promise of free upgrades.</p>
<p>The problem will get worse as future generations of processors start shipping with hex- and octo- core base configurations. In short Oracle&#8217;s licensing policy does not work with modern CPUs and ATG software pricing and infrastructure architecture.</p>
<p>So what could they do? I have a few solutions:</p>
<ol>
<li>Allow for software disabling of cores. This is simple. Just add an &#8220;ATG Licensing Addendum&#8221; to the contracts that allows for this. Problem solved now and in the future.</li>
<li>Use the Oracle Standard Database licensing model based on &#8220;Sockets&#8221; not &#8220;Processors&#8221;. This is really a clean solution, has precedent in Oracle&#8217;s licensing practices, and scales well in the future.</li>
<li>Automatically allow all MC4 bundle customers to upgrade to 6 &#8220;Processors&#8221; of Commerce and 6 &#8220;Processors&#8221; of Search on ATG 10, for free. They were sold a small but deployable bundle of Production and Staging licenses. They&#8217;ve been paying their support fees. They deserve to still be able to run a small but deployable setup of Production and Staging.</li>
<li>Automatically upgrade any customers who have been sold ATG 10 with less than 6 &#8220;Processors&#8221; of Commerce and Search to 6+6. These customers have been sold an impossible to deploy list of licenses. Through ignorance (most likely) their ATG Sales rep sold them a lie. Make it right.</li>
</ol>
<p>What do you think is most fair?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/what-oracleatg-could-do-with-licensing.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ATG Licensing &#8211; One Step Forward, Two Steps Back</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-licensing-one-step-forward-two-steps-back.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-licensing-one-step-forward-two-steps-back.html#comments</comments>
		<pubDate>Sat, 16 Jul 2011 13:10:28 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>
		<category><![CDATA[licensing]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=769</guid>
		<description><![CDATA[This is my fourth post on the subject of ATG Licensing. You may want to read the previous three posts: Rant About Core-Based Licensing, Why ATG’s Core Based Licensing is Stupid, and the latest The True Cost of ATG’s Core &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/atg-licensing-one-step-forward-two-steps-back.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is my fourth post on the subject of ATG Licensing.  You may want to read the previous three posts:  <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/rant-about-core-based-licensing.html" title="Rant About Core-Based Licensing" target="_blank">Rant About Core-Based Licensing</a>, <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/why-atgs-core-based-licensing-is-stupid.html" title="Why ATG’s Core Based Licensing is Stupid" target="_blank">Why ATG’s Core Based Licensing is Stupid</a>, and the latest <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/the-true-cost-of-atgs-core-based-licensing.html" title="The True Cost of ATG’s Core Based Licensing" target="_blank">The True Cost of ATG’s Core Based Licensing</a>.</p>
<p>Oracle bought ATG at the end of last year.  ATG 10 was released in a similar timeframe.  ATG 10 introduced some great licensing changes.  In ATG 9 and earlier, ATG&#8217;s License Manager enforced the license limitations encoded in the license files provided by ATG by checking the number of &#8220;CPUs&#8221; reported by the OS.  Unfortunately this number captured cores + HyperThreaded logical cores, and as I talked about in earlier posts, this number increased in each new generation of chip causing issues with license costs.  The typical solution was to disable HyperThreading in the BIOS and/or disable CPU cores within the OS in order to limit the server CPU resources to match the licenses.  I&#8217;m not sure there was ever written policy around this, but it was common practice and many sales reps and sales engineers explicitly okayed this approach during pre-sales architecture planning.</p>
<p>In ATG 10 the licensing stopped being technically enforced via the License Manager and changed over to be enforced by audits.  This means that HyperThreading is no longer a 2x penalty.  This is the upside!  It also means you can setup servers, or change IPs, without waiting for ATG to issue you new license files all the time.  This is also handy.</p>
<p>Now comes the bad news.  </p>
<p>I&#8217;ve just found out that Oracle&#8217;s (new) policy is that disabling cores is not permitted to meet license limits.  That means you need valid ATG licenses for every physical core installed in any of your ATG servers.  They&#8217;ve also dropped the &#8220;Staging&#8221; licenses which means you now need full price production licenses for your Staging environment hardware as well.</p>
<p>The current generation of Intel server CPUs are Westmere 56XX and they come in quad-core models on the low end, and hex-core models on the high end.  The previous generation of CPUs are Nehalem 55XX and they come only in quad-core models.  The generation before that were 54XXs and they also came only in quad-core models.  The generation before that were 53XX, again quad-core only.  </p>
<p>What this means is that the smallest ATG setup is basically two production app servers for failover/redundancy with single quad-core CPUs, and one staging app server, also with a single quad-core CPU.  That&#8217;s 12 cores of ATG Commerce you need licensing for (or 6 ATG Commerce &#8220;processor&#8221; licenses &#8211; which is how they sell it now: Intel chips have a .5 core multiplier to convert from &#8220;processors&#8221; to physical cores).  You also need ATG Search licenses.  Given how most ATG 10 sites are massively reliant on Search for facets and site navigation you really need two production Search servers, again for failover/redundancy, and another Search box in stage.  You *can* run Stage Search on the Stage App server, but you still need Search licenses for it.  So again, you&#8217;re looking at 12 cores/6 &#8220;processors&#8221; minimum.  Plus BCC and CSC Seats, etc&#8230;</p>
<p>So right now, anything less than 6 &#8220;Processors&#8221; of ATG Commerce and 6 &#8220;Processors&#8221; of ATG Search, isn&#8217;t actually deployable into a production + stage setup.  Unfortunately some in-flight sales proposal out there right now are smaller than that.  If you&#8217;re involved in an ATG deal with fewer licenses make sure you carefully go over your architecture and deployment plan with your ATG Sales rep and your hosting team.  </p>
<p>Here&#8217;s another fun fact: when upgrading from a previous version to ATG 10, your currently licensed cores will get you ATG 10 &#8220;Processor&#8221; credits based on the same core multiplier.  I&#8217;m not sure if your staging licenses will help at all, but if they do, they won&#8217;t count 100% or even close.  What this means is that all of the MANY MANY customers out there who were sold MC4 bundles (4 cores of ATG Commerce + Search + Merch + CSC, etc&#8230;) have a truly terrible upgrade path.  Those 4 cores of Commerce will get them 2 &#8220;Processors&#8221; of Commerce.  Leaving them 4 &#8220;processors&#8221; short.  Ditto for Search.  That&#8217;s well over $1,000,000 to upgrade, although you&#8217;ll probably get some discounts from your sales rep.  </p>
<p>That&#8217;s right: after paying hundreds of thousands of dollars a year in Support fees, entitling you to &#8220;free upgrades&#8221;, you&#8217;ll have to pony up somewhere in the six-figures range to upgrade to ATG 10.  </p>
<p>Oracle&#8217;s Enterprise licensing practices do not apply well to standard small/medium deal ATG licensing levels and certainly not to existing ATG customers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-licensing-one-step-forward-two-steps-back.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Seam Identity Management</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/jboss/seam/seam-identity-management.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/jboss/seam/seam-identity-management.html#comments</comments>
		<pubDate>Mon, 11 Jul 2011 15:34:32 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[Seam]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=761</guid>
		<description><![CDATA[During a recent coding getaway to Maine (see my post on the 2011 HackFestaThon) I decided to write a basic Seam project as a starting point for my future Seam based web applications.  The idea is to provide common features &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/jboss/seam/seam-identity-management.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>During a recent coding getaway to Maine (see my post on the <a title="Coding Weekend in Maine 2011" href="http://www.digitalsanctuary.com/blog/uncategorized/weekend-in-maine.html" target="_blank">2011 HackFestaThon</a>) I decided to write a basic Seam project as a starting point for my future Seam based web applications.  The idea is to provide common features such as Login, Logout, Registration, Forgot Password, User Management, Audit Logging, Image Upload Handling, Video Upload Handling, etc&#8230; so next time I have an idea that I want to hack together I won&#8217;t have to re-write or copy-paste in basic functionality like that.</p>
<p>I spent about a day working on things before I discovered that I really should be using the <a title="Seam 2.2 Identity Management" href="http://docs.jboss.org/seam/2.2.2.Final/reference/en-US/html/security.html#d0e9101" target="_blank">Seam framework&#8217;s Identity Management</a> feature.  So I threw out everything I&#8217;d done, and started by re-reading the docs, and went from there.  Seam&#8217;s Identity Management framework is VERY powerful, but is also a little complicated to get going and in many cases it seems like it would easier to just write stuff from scratch.  I&#8217;m banking on the powerful stuff being worth the initial learning curve and a little extra pain.</p>
<p>When I get the starter project in a more complete state I will be open sourcing the whole thing to help others along, but I wanted to share a few things I&#8217;ve learned so far:</p>
<p>In order to use the Email address as the login instead of a username, you need to remove the username property from your UserAccount entity and annotate the Email address property like so:</p>
<pre class="brush: java; title: ; notranslate">
@NotNull
@UserPrincipal
@Email
public String getEmail() {
    return email;
}
</pre>
<p>Actions like Registration need a RunAsOperation inner class to handle the fine grained security controls that the Identity Management framework enforces:</p>
<pre class="brush: java; title: ; notranslate">
    public void register() {
	verified = (confirm != null &amp;&amp; confirm.equals(password));

	if (!verified) {
	    FacesMessages.instance().addToControl(&quot;confirmPassword&quot;, &quot;Passwords do not match&quot;);
	}
	new RunAsOperation() {
	    public void execute() {
		try {
		    // Check if email address has already been used
		    if (identityManager.userExists(getEmail())) {
			FacesMessages.instance().addToControl(&quot;email&quot;, &quot;Email has already been used.&quot;);
			return;
		    }
		    identityManager.createUser(email, password, mFirstName, mLastName);
		} catch (IdentityManagementException e) {
		    // TODO Auto-generated catch block
		    e.printStackTrace();
		}
		identityManager.grantRole(email, &quot;member&quot;);
	    }
	}.addRole(&quot;admin&quot;).run();

	// Login the user
	identity.getCredentials().setUsername(email);
	identity.getCredentials().setPassword(password);
	identity.login();
    }
</pre>
<p>Populating custom properties on the User during things like registration requires observing events:</p>
<pre class="brush: java; title: ; notranslate">
    @Observer(JpaIdentityStore.EVENT_PRE_PERSIST_USER)
    public void prePersistUser(UserAccount pNewUser) {
	// Setup additional UserAccount properties before the user is created
	pNewUser.setRegistrationDate(new Date());
	pNewUser.setOptIn(isOptIn());
    }
</pre>
<p>You can log audit events with the user&#8217;s IP address by doing things like this:</p>
<pre class="brush: java; title: ; notranslate">
@Scope(ScopeType.EVENT)
@Name(&quot;userEvents&quot;)
public class UserEvents {
    @Logger
    private Log mLog;

    @Observer(JpaIdentityStore.EVENT_USER_AUTHENTICATED)
    public void loginSuccessful(UserAccount pUser) {
	mLog.info(&quot;User logged in with email: #0&quot;, pUser.getEmail());
	pUser.setLastLoginDate(new Date());
	Contexts.getSessionContext().set(&quot;currentUser&quot;, pUser);
	AuditEvent loginEvent = new AuditEvent(((ServletRequest) FacesContext.getCurrentInstance().getExternalContext()
		.getRequest()).getRemoteAddr(), pUser.getId(), &quot;Login Success&quot;, null);
	Events.instance().raiseEvent(&quot;auditEvent&quot;, loginEvent);
    }
}
</pre>
<p>Hopefully I&#8217;ll have the starter project ready soon and will share it with you all.  In the meantime, happy hacking!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/jboss/seam/seam-identity-management.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Spark::red is PCI Level 1 Certified!</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-is-pci-level-1-certified.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-is-pci-level-1-certified.html#comments</comments>
		<pubDate>Thu, 07 Jul 2011 13:45:33 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Spark::red]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=750</guid>
		<description><![CDATA[I&#8217;m happy to announce that Spark::red ATG Hosting has received our PCI DSS 1.2 Level 1 Certification as an eCommerce MSP.  We have been Level 2 certified for a while, but completing our Level 1 certification with TrustWave as our &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-is-pci-level-1-certified.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="attachment_751" class="wp-caption alignright" style="width: 310px"><img class="size-full wp-image-751 " title="Security Image" src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2011/07/2907496392_410f480f6b.jpg" alt="" width="300" height="192" /><p class="wp-caption-text">image from Purpleslog</p></div>
<p>I&#8217;m happy to announce that <a title="Sparkred ATG Managed Hosting" href="https://www.sparkred.com" target="_blank">Spark::red ATG Hosting</a> has received our PCI DSS 1.2 Level 1 Certification as an eCommerce MSP.  We have been Level 2 certified for a while, but completing our Level 1 certification with <a title="TrustWave Security" href="https://www.trustwave.com/" target="_blank">TrustWave</a> as our third-party auditor is a huge milestone for us.</p>
<p>PCI DSS is the <a title="PCI Security Standards" href="https://www.pcisecuritystandards.org/" target="_blank">Payment Card Industry&#8217;s Data Security Standard</a>.  It is a set of requirements and guidelines designed to ensure merchants who handle or process credit cards, do so securely.  There are different levels based on transaction volume and <a title="PCI Levels" href="http://www.pcicomplianceguide.org/pcifaqs.php#5" target="_blank">Level 1</a> is the highest level, required for the largest volume merchants.  Level 1 is also the most difficult certification to gain, requiring the strictest security protections, the strongest policies, and a very in depth audit by a certified auditing company, such as TrustWave.  Our certification process has taken many months and the completion of our Level 1 Report of Compliance (RoC) is a testament to our dedication to providing the highest level of secure environments to our clients and safeguarding their systems and information, as well as the information of all our clients&#8217; customers.</p>
<p>At Spark::red we focus strongly on Security and Performance beyond the core ATG hosting services.  We handle more PCI DSS requirements than any other ATG Hosting provider out there.  If you are looking for an ATG Hosting provider to help manage your ATG web application, we can offer PCI Level 1 compliant hosting and handle many of your security needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/sparkred-is-pci-level-1-certified.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Managing Static Assets in your ATG Application</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/managing-static-assets-in-your-atg-application.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/managing-static-assets-in-your-atg-application.html#comments</comments>
		<pubDate>Tue, 14 Jun 2011 18:24:00 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=736</guid>
		<description><![CDATA[The issue of where and how to manage your static assets for you ATG application is one that comes up in every application and every deployment.  This is my recommendation based on 13 years of ATG experience both on the &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/managing-static-assets-in-your-atg-application.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The issue of where and how to manage your static assets for you ATG application is one that comes up in every application and every deployment.  This is my recommendation based on 1<a title="Devon Hillard ATG Resume" href="http://www.digitalsanctuary.com/devon-hillard-resume.html" target="_blank">3 years of ATG experience</a> both on the development and <a title="Sparkred Managed ATG Hosting" href="https://www.sparkred.com" target="_blank">ATG hosting</a> sides of the house:</p>
<p>&#8220;<strong>Application Assets</strong>&#8221; go in the EAR in your store&#8217;s WAR.  Application Assets include CSS, JS, and all the images used for the application look and feel: logo, navigation images, css images, and so on.  These files typically only change in conjunction with a code/JSP release, and they need to be easy for the developers to manage on their local development instances.  Keeping everything needed to build, run, and browse the application in SVN and built into the EAR makes it easy to run developer instances and be sure you have the correct versions of the assets, etc&#8230;  It also allows you to leverage things like pack:tag which I discuss in my post about<a title="Improving Secondary Asset Loading Time for an ATG Application" href="http://www.digitalsanctuary.com/tech-blog/java/atg/improving-secondary-asset-loading-time-for-an-atg-application.html" target="_blank"> Secondary Asset Loading Time</a>.  My only complaint is that ATG doesn&#8217;t have a built-in mechanism for handling versioning of static assets, which allows you to set long expiration dates in the caching headers without the issue of stale browser caches corrupting the view of your site after a deployment.</p>
<p>Obviously you don&#8217;t want your JBoss instances handling every request for every static asset in production, but by utilizing cache headers, transparent caching on your web servers, or a CDN solution, this is easily avoided while still keeping all of the benefits of managing the Application Assets within the EAR.</p>
<p>&#8220;<strong>Catalog and Marketing Assets</strong>&#8221; get deployed to the web servers.  These assets typically include product and category images, promotional images, white papers, PDFs, etc&#8230;  These files are changed frequently by the marketing team or by data feeds from an internal catalog management system on a schedule independent of code/JSP releases.  The files also tend to be larger.  The assets are often managed via SFTP, or ATG Publishing deploying to a Web Publishing Agent, or a combination of the two.</p>
<p>By managing your files in this way you get the most benefits with the least downsides.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/managing-static-assets-in-your-atg-application.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First brush with Ruby On Rails</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/first-brush-with-ruby-on-rails.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/first-brush-with-ruby-on-rails.html#comments</comments>
		<pubDate>Tue, 31 May 2011 03:31:22 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=732</guid>
		<description><![CDATA[Earlier this week I was hanging out with a friend talking about a project he was working on and I decided to poke at it a bit with him, and as such got my first hands on experience with Ruby &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/general/first-brush-with-ruby-on-rails.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Earlier this week I was hanging out with a friend talking about a project he was working on and I decided to poke at it a bit with him, and as such got my first hands on experience with Ruby on Rails.</p>
<p>Ruby on Rails or RoR obviously has huge buzz and is a very popular web application development framework lately.  Lots of people have praised it and lots of great sites have been built using it.  I&#8217;ve never bothered to learn it myself for a few reasons.  First I&#8217;m a Java guy (ATG and Seam) and have been for years.  Given limited time and limited brain capacity I&#8217;d rather learn more Java/Java Frameworks/etc&#8230; than try to learn a whole new language.  Secondly many trusted friends advised me that while RoR does somethings REALLY well and makes some things REALLY easy, once you need to try to break outside of the pre-imagined structure/features that RoR provides out of the box, things rapidly go downhill.  Those reasons aside, the high level of buzz has meant I&#8217;ve always been somewhat curious, so this opportunity to finally get my hands a little dirty with RoR was welcome.</p>
<p>Getting started with RoR on Mac OS X is very easy.  It&#8217;s pre-installed and works right out of the box.  However after upgrading Rails and the gems I ran into a known blocking bug which after some Googling I was able to fix by downgrading rake to 0.8.7 in the Gemfile.  So not a 100% smooth start, but not too bad.</p>
<p>The Rails generate scaffold commands make it very easy to create a data object, the related schema changes (managed through the rake migration mechanism), and related CRUD pages and controllers.  You can be up and running very quickly and creating, browsing, editing, and deleting records.  This can make it very easy to get a basic application laid out, and provides lots of plumbing automatically.</p>
<p>I didn&#8217;t get much farther than some simple controller modifications, outbound e-mail sending, etc&#8230;  so I&#8217;m far from a real RoR developer.  However I ran into enough pain points so far that I don&#8217;t think RoR is for me.  I don&#8217;t want to start any language/framework wars, but here is what I ran into:</p>
<p>A lot of the &#8220;magic&#8221; seems great at first, but as soon as you want go outside of the box or tweak how things are working, it becomes a massive liability.  For instance when using the generate scaffold command to create data objects you can setup relationships/foreign keys by passing in a column name that matches the form OtherClass_id:integer, which will be interpreted to be a FK association to the other class&#8217;s id column to join the objects.  This is great.  However, what if you want to add two relationships to the same Other class?  For instance an Message has a Sender and a Recipient, both of which are Users.  I can use user_id:integer for one, but how do I do the other?  How do I use column/property names that don&#8217;t fit that naming convention, for instance I&#8217;d want sender_id and recipient_id.  None of the getting started guides I was able to find covered that.  Googling for things like &#8220;scaffold multiple foreign keys&#8221; didn&#8217;t answer the question, etc&#8230;  I&#8217;m sure it&#8217;s possible, but finding out how wasn&#8217;t easy, and the default way hides and obscures the actual plumbing so it&#8217;s not easy to figure out how to make simple changes or additions.</p>
<p>Data object classes in the app/model area all extend ActiveRecord::Base and as generated by generate scaffold are completely empty.  There&#8217;s no clue or indication of the fields, any logic available, any relationships, property types, etc&#8230;</p>
<p>Emailer classes use magic mappings between method names and e-mail templates.  Because it&#8217;s &#8220;magic&#8221; I have no idea how to change a template file name if I wanted to.  App/helper classes are created, but they&#8217;re empty, so I have no idea what they are doing, or meant to do.  And so on.  If I was an expert RoR developer I&#8217;m sure I&#8217;d know, or if I read a few books I&#8217;d understand, but starting from scratch and trying to learn as I go, it proved very frustrating.</p>
<p>The much touted RoR Community proved to be more of a liability than an asset to me.  Especially when combined with the many, rapid, backwards incompatible, RoR releases that have come out so far.  When looking for information, guides, and answers related to RoR you end up finding things spread all over: blogs, forums, mailing lists, Ruby sites, RoR sites, groups, etc&#8230;  Most of these posts/documents refer to older versions of RoR.  Most of them don&#8217;t have dates or specify which version they are working with.  Many questions on forums are unanswered.  The end result is you find what you hope is a reasonable solution for an issue only to find that the code sample or directions are written for a previous version of RoR, and trying to follow the instructions or paste the code in the current RoR version results in weird errors or worse.</p>
<p>Each new version of RoR seems to massively change and/or break common APIs and change how things are supposed to be done, etc&#8230;  I ran into several situations where it seems like a method was renamed, with no backwards compatible alias left in place, for no other reason than they wanted to change the name, which breaks older code for  no real purpose.</p>
<p>I&#8217;m also not a fan of weakly typed languages.  Strongly typed languages provide compile time validation, IDE auto-completion, and easy to navigate API documentation.  With larger, more complex projects, or projects involving many developers, or projects utilizing many 3rd party libraries, these advantages become significant in my opinion.</p>
<p>So from my standpoint, JBoss Seam provides most of the advantages of RoR, including several improvements, without many of the liabilities.  Plus it&#8217;s in Java which is my strongest programming language.  I&#8217;ll stick with Seam, but I&#8217;ll still respect the creations of folks who use other tools, including RoR.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/first-brush-with-ruby-on-rails.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stealing my Resume? Try Learning ATG First.</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/stealing-my-resume-try-learning-atg-first.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/stealing-my-resume-try-learning-atg-first.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 02:57:01 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=726</guid>
		<description><![CDATA[Apparently someone decided to copy big chunks of my resume and put her name at the top and then go apply for at least one (maybe more) ATG positions. The resume got her a phone screen, but things quickly came &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/stealing-my-resume-try-learning-atg-first.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Apparently someone decided to copy big chunks of my resume and put her name at the top and then go apply for at least one (maybe more) ATG positions.  The resume got her a phone screen, but things quickly came to a halt when it became apparent that she didn&#8217;t know ATG at all.</p>
<p>It didn&#8217;t take long before someone figured out that her resume was actually my resume.</p>
<p>Imitation is the sincerest form of flattery?</p>
<p>It&#8217;s hard to fake your way in to &#8220;hard&#8221; technical fields where either you know your stuff or you don&#8217;t and it&#8217;s pretty quickly apparent which side you&#8217;re on.  But the ATG community is so small that it&#8217;s doubly silly to try to pass someone&#8217;s resume off as your own.</p>
<p>Anyhow, I thought that whole story was pretty crazy so I had to share.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/stealing-my-resume-try-learning-atg-first.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ATG User Group in Boston!</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-user-group-in-boston.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-user-group-in-boston.html#comments</comments>
		<pubDate>Wed, 15 Dec 2010 02:30:42 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=722</guid>
		<description><![CDATA[Spark::red ATG Hosting is pleased to sponsor an ATG User Group in Boston! We invite everyone who works with ATG software and technologies to join us on January 12th (Wednesday) from 6 PM to 9 PM for an evening of &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/atg/atg-user-group-in-boston.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.sparkred.com" target="_new">Spark::red ATG Hosting</a> is pleased to sponsor an ATG User Group in Boston!  We invite everyone who works with ATG software and technologies to join us on January 12th (Wednesday) from 6 PM to 9 PM for an evening of great food, free drinks, networking, and a few enlightening presentations.</p>
<p>Boston is a hub of ATG activity, and we would like to bring the community together for a casual evening of meeting new people and learning a bit at the same time.  Both business and technical attendees are welcome and we plan to offer content for all audiences.  We plan on making this a regular occurrence, but let&#8217;s kick off 2011 with a great ATG User Group event!</p>
<p>Click here:  <a href="http://sparkred-atgug-boston-1.eventbrite.com/" target="_new">Sparkred ATG User Group &#8211; Boston</a> for details and to register for this FREE event!  I look forward to seeing you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/atg/atg-user-group-in-boston.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss Performance Tuning and MasterTheBoss</title>
		<link>http://www.digitalsanctuary.com/tech-blog/java/jboss/jboss-performance-and-mastertheboss.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/java/jboss/jboss-performance-and-mastertheboss.html#comments</comments>
		<pubDate>Tue, 02 Nov 2010 15:36:59 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=716</guid>
		<description><![CDATA[I review technical book manuscripts for a few different publishers, and recently had the pleasure of working on an upcoming book called JBoss Performance Tuning by Francesco Marchioni.  It&#8217;s coming out in December 2010 and will be a must have &#8230; <a href="http://www.digitalsanctuary.com/tech-blog/java/jboss/jboss-performance-and-mastertheboss.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I review technical book manuscripts for a few different publishers, and recently had the pleasure of working on an upcoming book called <a title="JBoss Performance Tuning Book" href="http://www.mastertheboss.com/jboss-server/255-announcing-jboss-performance-tuning-book.html" target="_blank">JBoss Performance Tuning by Francesco Marchioni</a>.  It&#8217;s coming out in December 2010 and will be a must have addition to your bookshelf if you deploy applications on JBoss.</p>
<p>The book contains extensive performance/load test results giving you hard data to work with when deciding which changes to make in your environment.  Some of the results were very surprising and the book has a lot of valuable data.</p>
<p>The author, Francesco Marchioni, also runs a popular <a title="MasterTheBoss Blog" href="http://www.mastertheboss.com" target="_blank">JBoss related blog called MasterTheBoss.com</a>.  There are a ton of great articles and posts there, so check it out!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/java/jboss/jboss-performance-and-mastertheboss.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/50 queries in 0.011 seconds using disk: basic
Object Caching 759/872 objects using disk: basic

Served from: www.digitalsanctuary.com @ 2012-02-07 00:12:42 -->
