Sunday, March 16, 2008

Enterprise Architecture Framework Applications towards SOA

I am in the final stages of completing my Thesis requirement for my MSc. in Information Systems at Athabasca University.

I am working through the final signoff but the latest version may be downloaded Enterprise Architecture Framework Applications Towards Service Oriented Architecture

A large challenge facing today’s enterprises is the integration of their own disparate systems to be more competitive and react more strategically to market opportunities. Service Oriented Architecture(SOA) is a style of architecture where the use of reusable and discoverable services are used as components to meet business requirements. The promise of SOA is that the use of these services will allow the organization to increase business agility and reuse of software components. There are some challenges to implementing a SOA. One of the challenges is to present view from the enterprise perspective. Typically, projects take only a view of individual business unit without concerns for the entire organization. Enterprise Architecture(EA) describes the current business and IT processes and how they map together. The two most popular EA Frameworks, Zachman Framework and The Open Group Architecture Framework(TOGAF), are designed to help the organization clarify the current IT Architecture and help provide a roadmap to the goal or future IT architecture. It is with the enterprise view that these frameworks provide that SOA can be supported towards a more successful implementation. There is work underway to determine the relationship between SOA and EA. Whether by clarification from industry experts or direct modifications of the EA Frameworks, EA Frameworks are being used to help implement SOA. It is through the enterprise view and architectural tools provided by the EA Frameworks that SOA can be supported.

Sunday, March 9, 2008

Getting 2 .NET applications to use different Oracle Clients

It is not necessarily evident how to get 2 .NET applications to use 2 different Oracle clients on the same server. The following are some rough notes, but you should get the idea and hopefully save you some time as well.

Information can be found at

But I will document what I found.

1. Getting the .NET applications to use the appropriate clients on my development machine

I had to follow some steps to get the different .NET applications to use the appropriate Oracle client.

Building a website with Oracle 92:
1. Close Visual Studio
2. Uninstall all Oracle Dlls to remove any 102 references
3. Install only the 9.2 Oracle dlls to the GAC:
4. Set Path with "C:\oracle\ora92\bin;" at the start of the Path environment variable
5. Start Visual Studio and Add Reference the first OracleDataAccess dll (despite what the version # says) to the project
6. Set the dll Copy Local to true for some reason then it compiles
7. Run the app and verify that the right dll is being used
Building a website with Oracle 102:
1. Close Visual Studio
2. Ensure that the 102 Oracle Dlls are in the GAC:
3. Set Path with "C:\oraclexe\app\oracle\product\10.2.0\server\BIN\;" at the start of the Path environment variable
4. Start Visual Studio and Add Reference the first OracleDataAccess dll (despite what the version # says) to the project
5. Run the app and verify that the right dll is being used

uninstall All Oracle GAC dlls
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Oracle.DataAccess
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Policy.9.2.Oracle.DataAccess
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u Policy.10.1.Oracle.DataAccess GAC install
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i C:\oraclexe\app\oracle\product\10.2.0\server\BIN\Oracle.DataAccess.dll
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i C:\oraclexe\app\oracle\product\10.2.0\server\ODP.NET\PublisherPolicy\Policy.10.1.Oracle.DataAccess.dll

9.2 GAC install only
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /i C:\oracle\ora92\bin\Oracle.DataAccess.dll

Your application can do a simple ""select count(*) on table" to verify functionality. To find out which dll you are exactly using, you can use
Type ttt = typeof(OracleConnection);
mes += "\n ttt.Assembly.FullName";

2. Note that setting the path variables for Windows Server does not help out the same as on XP

The path can be set in the application via setting the DLL path in the application itself as follows:

Inside Global.asax.cs:

static extern bool SetDllDirectory(string lpPathName);
protected void Application_Start(Object sender, EventArgs e)
string dllPath = ConfigurationSettings.AppSettings["DllPath"];
bool result = SetDllDirectory(dllPath);

Inside Web.config

<add key="DllPath" value="D:\oracle\Client_10g_1010\BIN">

Friday, March 7, 2008

Scheduling a Task to run on a remote server

If you want to set up a scheduled task to execute remote code on another box you can do the following.

Assuming the you have a job server and code server where the executable lives.

Step 1: Create job.bat and job.vbs on the job server
Step 2: Create Scheduled Task to execute job.bat on a regular basis

For more on Scheduling Tasks you can try or for more details

The files job.bat and job.vbs will reside on the job server and execute code living on the code server.

On the job server:

You will have a job.bat file to reference the job.vbs file:

Which will call a job.vbs file:

On Error Resume Next

Dim strComputer
Dim strCommand
Dim strUsername
Dim strPassword

'Configuration of Remote Server Location and credentials
strComputer = "computername"
strUsername = "username"
strPassword = "password"

'Task to execute on remote server
strCommand = """C:\Code\program.exe"""

'Script to execute remote command
ExecuteCommand strComputer,strCommand, strUsername, strPassword

Sub ExecuteCommand(strComputer,strCommand, strUsername, strPassword)

'wscript.echo("Executing " & strCommand & " on " & strComputer)

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSwbemServices = objSWbemLocator.ConnectServer(strComputer,"root\cimv2", strUsername , strPassword)
Set objSWbemObject = objSWbemServices.Get("win32_Process")

errReturn = objSWbemObject.Create(strCommand,null,null,intProcessID)

'if errReturn = 0 then
' Wscript.Echo strCommand & " was started with a process ID of " & intProcessID & "."
' Wscript.Echo strCommand & " could not be started due to error " & errReturn & "."
'end if

End Sub