Tuesday, 13 April 2010

A Win32Exception is thrown - The file size exceeds the limit allowed and cannot be saved

Currently we got an exception A Win32Exception is thrown - The file size exceeds the limit allowed and cannot be saved. It seems it is a bug from Windows after searching online for a while.
My colleague confirmed this with his change set although I do not know it works or not. And he referred to an article about this exception. The link is here http://daniel-richardson.blogspot.com/2008/12/handling-eventlogentrywritten-event-for.html

"A Win32Exception is thrown if EnableRaisingEvents is set to true on an empty EventLog. The exception message is "The file size exceeds the limit allowed and cannot be saved".
The workaround for this is to check if the EventLog is empty and write an entry if necessary before setting EnableRaisingEvents to true."
Or you do not set EnableRaisingEvents to true for no good reason.

Thursday, 1 April 2010

ActiveMQ Message Routing

There are several things to think about when you design the ActiveMQ message routing.

1) JMS Selectors. Selectors are a way of attaching a filter to a subscription to perform content based routing. Selectors are defined using SQL 92 syntax and typically apply to message headers; whether the standard properties available on a JMS message or custom headers you can add via the JMS code.
ActiveMQ message properties and JMS message properties should be considered when using JMS selectors.

2) Wildcards. ActiveMQ supports destination wildcards to provide easy support for federated name hierarchies. A subscriber could use wildcards to define hierarchial pattern matches to the destinations to subscribe from. Note wildcards are not part of the JMS specification so are custom enhancements.
I think this feature is quite useful when some messages are only interesting to part of the consumers and relation structure is complex.

3) Advisory Message. It is kind of administrative information of ActiveMQ which helps to watch the system by subscribing to regular JMS messages. By default this is disabled.

4) Message Redelivery. Messages are redelivered to a client when any of the following occurs:

  1. A transacted session is used and rollback() is called.
  2. A transacted session is closed before commit is called.
  3. A session is using CLIENT_ACKNOWLEDGE and Session.recover() is called.
(DLQ means dead letter queue)

Friday, 26 March 2010

Host multiple services with multiple configuration files

Definitely it should be good if we could do this - Host multiple services with multiple configuration files. I found a nice post talking about the way the author implements this. Basic idea is to use different AppDomain for different services and handling loading, hosting service manually. Here is the link: http://blogs.microsoft.co.il/blogs/alon/archive/2008/03/12/hosting-plug-in-wcf-services.aspx

I am not sure if this is a good idea. Creating different AppDomains in one process is a little scaring. Do not know how to catch thread level exceptions for each domain. It might be possible to do it. Have not tried. And another thing is how to handle threading context. Not sure. To be honest, I did not we could have different App.Domain in one process. Let's find out more about App.Domain.

===later added
By reading a little bit about App.Domain. I think it might be a good idea. Process is a concept of Windows OS. App.Domain is a concept of .Net Framework. It is about CLR running time resource. It might be good to separate AppDomain for different services.

Friday, 19 March 2010

Properties.Settings.Default.Save() saves to which file?

This did bother me for a while.

There are two options for Scope when we try to add a setting. User and Application. Both default settings are stored in the app.config of this project.

Where will it be saved if user changes the setting in the running time?
The save will save to app.config of the project if it is a application level setting. But it will save to C:\Documents and Settings\[user]\Local Settings\Application Data\[application_name] folder if it is a User level setting.

You can only get the default setting back by deleting the XML files in the above folders and run your application.

Wednesday, 3 March 2010

SharePoint 2010 Preliminary System Requirements

I probably will work on SharePoint for a while.
Microsoft announced preliminary system requirements for SharePoint server 2010. Obviously it goes for some big enterprise with enough budget.
  1. SharePoint Server 2010 will be 64-bit only.
  2. SharePoint Server 2010 will require 64-bit Windows Server 2008 or 64-bit Windows Server 2008 R2.
  3. SharePoint Server 2010 will require 64-bit SQL Server 2008 or 64-bit SQL Server 2005.

Wednesday, 10 February 2010

Threads allocated in ActiveMQ and options

I found a very nice post about threads allocated in ActiveMQ consumer, broker and producer. http://fusesource.com/wiki/display/ProdInfo/Understanding+the+Threads+Allocated+in+ActiveMQ
In the testing I did, Connection is really created in a new thread. Session part I am not sure. Do not know how to test it. OnMessage() always comes to same thread (different with connection thread). It is wired

Two wire protocol supported in ActiveMQ

Default wire protocol supported by ActiveMQ is Java OpenWire transport. OpenWire is used to marshal objects to byte arrays and back. http://activemq.apache.org/openwire.html
Another one is Stomp. The Stomp project is the Streaming Text Orientated Messaging Protocol site (or the Protocol Briefly Known as TTMP and Represented by the symbol :ttmp).
Stomp provides an interoperable wire format so that any of the available Stomp Clients can communicate with any Stomp Message Broker to provide easy and widespread messaging interop among languages, platforms and brokers.
I think wire protocol is the way ActiveMQ pack messages to byte arrays. OpenWire and Stomp are two different ways here. As ActiveMQ website says "OpenWire is designed for maximum performance and features; its the protocol used inside ActiveMQ. If you want a simpler protocol to work with to get started with a cross language client then tryStomp which is designed for ease-of-implementation so its easy to support many clients." So it is your choice.