<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Visual Dev - Host Integration</title>
        <link>http://geekswithblogs.net/murraybgordon/category/2739.aspx</link>
        <description>Notes on integrating host applications. (Mainframe IBM 3270, IBM 5270, etc.)
</description>
        <language>en-US</language>
        <copyright>Murray Gordon</copyright>
        <managingEditor>murraybgordon@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>N-Tier Session Management Question...</title>
            <link>http://geekswithblogs.net/murraybgordon/archive/2005/09/29/55485.aspx</link>
            <description>&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;I have a question for anyone who might be able to help. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;I am building a SmartClient app that uses .NET Remoting to communicate with it&amp;#8217;s BLL (Business Logic Layer). The app ultimately speaks to an IBM 3270 Host to execute units of work. The BLL and DAL (Data Access Layer) are for the most part, pass through layers to the real business logic on the mainframe. As the app evolves, functionality in the host might be moved onto other systems. &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;My question is&amp;#8230; I have to maintain state or a session between all the layers of the application. &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Symbol color=red size=2&gt;&amp;#183;&lt;FONT face="Times New Roman" size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;&lt;FONT face="Trebuchet MS" color=red size=2&gt;Do I need to create a &amp;#8220;Session&amp;#8221; class to maintain this state in each layer of the application? &lt;/P&gt;&lt;/FONT&gt;&lt;/B&gt;
&lt;P&gt;&lt;FONT face=Symbol color=red size=2&gt;&amp;#183;&lt;FONT face="Times New Roman" size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;&lt;FONT face="Trebuchet MS" color=red size=2&gt;How would I sync state across all layers?&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face="Trebuchet MS" color=red size=2&gt; &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;Here&amp;#8217;s the conceptual design diagram. Notice I have &amp;#8220;Session&amp;#8221; object on all three layers. &lt;/FONT&gt;&lt;B&gt;&lt;FONT face="Trebuchet MS" color=red size=2&gt;Am I off on this approach?&lt;/FONT&gt;&lt;/B&gt; &lt;/P&gt;
&lt;P&gt;&lt;IMG height=1 src="http://images.murraybgordon.multiply.com/image/2/photos/3/orig/1.gif?" width=1 border=0&gt;&lt;IMG height=1 src="http://images.murraybgordon.multiply.com/image/2/photos/3/orig/1.gif" width=1 border=0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG height=574 src="http://static.flickr.com/32/47718582_0d92d351b5_o.gif" width=800 border=0&gt;&lt;/P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;Here&amp;#8217;s my session class. It has a bunch of properties that about the user and their session that need to be passed around. This is what I&amp;#8217;m trying to pass around to be used on the UI, BLL and DAL. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG height=480 src="http://static.flickr.com/31/47719614_081e991303_o.jpg" width=113 border=0&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Trebuchet MS" color=green size=2&gt;Thanks in advance for anything. &lt;/P&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55485"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=55485" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/murraybgordon/aggbug/55485.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Murray Gordon</dc:creator>
            <guid>http://geekswithblogs.net/murraybgordon/archive/2005/09/29/55485.aspx</guid>
            <pubDate>Thu, 29 Sep 2005 11:55:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/murraybgordon/comments/55485.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/murraybgordon/archive/2005/09/29/55485.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/murraybgordon/comments/commentRss/55485.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/murraybgordon/services/trackbacks/55485.aspx</trackback:ping>
        </item>
        <item>
            <title>How to modernize mainframe 3270 applications? Without throwing away your investment...</title>
            <link>http://geekswithblogs.net/murraybgordon/archive/2005/06/14/43633.aspx</link>
            <description>&lt;p&gt;&lt;b&gt;&lt;font size="5" color="#0000FF"&gt;How to modernize mainframe 3270 applications? 
&lt;/font&gt;&lt;/b&gt; &lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;&lt;font color="#0000FF"&gt;&lt;b&gt;Without throwing away your investments...&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have recently been faced with an Integration and Deployment dilemma with 
one of our customers. The customer is a multi-billion dollar national 
distribution organization, with facilities around the country. They are 
currently running our &lt;b&gt;Control I &lt;/b&gt;Order Management System on IBM 3270 mainframe.
&lt;/p&gt;
&lt;p&gt; They were initially interested in implementing our &lt;b&gt;Control II&lt;/b&gt; version of the 
software that leverages a relational database and a completely re-architected 
code-base. It's a client/server solution that runs some of the largest 
distribution facilities in the world. But it's not a SOA-based solution, which 
is the direction that the client is looking to go for modernization. Fortunately 
our Control.NET application is a SOA-based solution. We are currently migrating our Control II order management system to 
run on the .NET CLR (&lt;b&gt;Control.NET&lt;/b&gt;). &lt;/p&gt;
&lt;p&gt;The new Control&lt;b&gt;.NET &lt;/b&gt;application leverages all the great features of 
the Microsoft server and .NET related technology offerings:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;The relational database is &lt;b&gt;SQL Server 2005&lt;/b&gt;.&lt;/li&gt;
	&lt;li&gt;The development environment is &lt;b&gt;Visual Studio 2005 Team System&lt;/b&gt;, 
	though we are still using &lt;b&gt;MKS Source Integrity&lt;/b&gt; to manage our code, 
	until we adequately test Team Systems code management features.&lt;/li&gt;
	&lt;li&gt;13 million lines of ANSI COBOL, recompiled to run on the .NET CLR using
	&lt;b&gt;Fujitsu's COBOL.NET &lt;/b&gt;compiler.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;BizTalk 2004 &lt;/b&gt;as the Business Process Management System (BPMS) for 
	communication and message coordination between systems.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;SharePoint Portal Server 2003 &lt;/b&gt;for personalize and targeted 
	information worker content and dashboarding.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;SQL Reporting Services 2005 &lt;/b&gt;for business intelligence and 
	reporting.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;ClickOnce &lt;/b&gt;deployment for web-enabled thin-client deployment that 
	allows rich user interface functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am trying to find a solution that would allow the customer to use our new 
&lt;b&gt;Control.NET&lt;/b&gt; order management system, but still be able to leverage the existing 
data on the mainframe without being forced to do a complete systems switch-over. 
They would like to migrate and modernize their system over time. &lt;/p&gt;
&lt;p&gt;This approach requires our system, &lt;b&gt;Control.NET&lt;/b&gt;, to be able to access data 
(i.e. Inventory, Customer or Vendor data) not from our relational database, but 
rather from the existing IBM 3270 mainframe data that exists in &lt;b&gt;IMS&lt;/b&gt; and 
&lt;b&gt;VSAM&lt;/b&gt; 
data files. Unfortunately this presents a dilemma. IMS and VSAM data files are 
not relational databases, but rather IMS data is a hierarchical database and 
VSAM data is just indexed files.&lt;/p&gt;
&lt;p&gt;&lt;font size="5" color="#0000FF"&gt;&lt;b&gt;Our Options&amp;#8230; &lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We have a few options for how we might solve the problem:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Option 1 &amp;#8211; Synchronize Databases&lt;/b&gt;. This option would require synchronization 
between the relational database we use for Control.NET and the VSAM / IMS data 
used in Control I. There are a few options we could go with here.&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;There are &lt;span style="background-color: #FFFF00"&gt;six approaches that you could pursue.&lt;/span&gt; As background and for IBM's 
recommendations, take a look at chapter 8 of the IBM Redbook titled, 
Cross-Platform DB2 Stored Procedures Building and Debugging, posted to http://www.redbooks.ibm.com/abstracts/sg245485.html. 
This IBM Redbook compares most of the approaches that are available to you:&lt;/p&gt;
	&lt;p&gt;1. Employ IBM DataPropogator to synchronize IMS DB records with SQL Server 
records.&lt;/p&gt;
	&lt;p&gt;2. Connect the IMS region to a DB2 instance using the IMS attachment 
facility, then use DTS to poll DB2 to capture changes. If you need to push 
changes to IMS, then see the next approach. &lt;/p&gt;
	&lt;p&gt;3. Update DB2 using SQL Server Replication or DTS, then pass the changes to 
DB2 to IMS DB using the standard DB2 stored procedures (see Redbook). &lt;/p&gt;
	&lt;p&gt;4. Call IMS program (using Transaction Integrator) that would read/write to 
IBM DB records on behalf of Microsoft SQL Server (albeit in a non-SQL way--you'd 
have create your own SQL consumer application to map from SQL Server Replication 
INSERT, UPDATE, DELETE statements to record access commands via TI). Also, you 
can use this same approach to call CICS program (using Transaction Integrator) 
that would read/write to IBM DB records on behalf of Microsoft SQL Server 
(albeit in a non-SQL way).&lt;/p&gt;
	&lt;p&gt;5. Create a new IMS program that calls SQL Server via the HIS 2004 
Transaction Integrator for Host-Initiated Processing.&lt;/p&gt;
	&lt;p&gt;IBM solves this problem with a commercial software application. Microsoft 
offers enabling technology only. You need to determine which platform is in the 
control position: SQL Server or IMS DB. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;Option 2 &amp;#8211; Direct ODBC Calls using 3rd 
Party App&lt;/b&gt;. This option would allow us to make calls to our DAO (data access 
objects), which would then make ODBC calls into a 3rd party application sitting 
on the Mainframe. The 3rd party application would be running in its own region 
on the mainframe waiting for ODBC commands from our application. When it 
receives a command, it would execute that ODBC call against the IMS database or 
VSAM files, depending on where the data is located. In essence our application 
would think it&amp;#8217;s calling a relational database, when in reality it&amp;#8217;s executing 
changes against VSAM data files or IMS hierarchical data. We would have a 
possible issue with two phased commits.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Option 3 &amp;#8211; Direct DAO to DAO Calls through BPMS&lt;/b&gt;. This option would allow us 
to make calls to our DAO (data access objects), which would then write the 
commands to MQ messages. The MQ messages would be sent to a BPMS (BizTalk or 
WebSphereMQ or Fuego -whatever the client wants). The BPMS executes the DAO&amp;#8217;s on 
the mainframe side and sends a transaction complete response to our application. 
In this case the BPMS would handle our two phased commit issues.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font color="#0000FF"&gt;Personally I like Option 3. The 3rd party solutions tack on a minimum of an 
extra $150K in software licensing. Needless to say I would love to find a 
solution that doesn&amp;#8217;t require that kind of added expense for software.&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=43633"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=43633" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/murraybgordon/aggbug/43633.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Murray Gordon</dc:creator>
            <guid>http://geekswithblogs.net/murraybgordon/archive/2005/06/14/43633.aspx</guid>
            <pubDate>Tue, 14 Jun 2005 15:26:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/murraybgordon/comments/43633.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/murraybgordon/archive/2005/06/14/43633.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/murraybgordon/comments/commentRss/43633.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/murraybgordon/services/trackbacks/43633.aspx</trackback:ping>
        </item>
    </channel>
</rss>