Freeze and C#

in Help Center
I read Chapter 40 and reviewed the C++ and Java examples. Is Freeze only available to these languages, or are there bindings for C# as well?
In fact , are there any higher level features of the ICE framework that are not available in C#?
Thanks,
Ryan
In fact , are there any higher level features of the ICE framework that are not available in C#?
Thanks,
Ryan
0
Comments
The Freeze service is only available for C++ and Java. Other services (IceGrid, IceStorm etc.) are available in all language mappings.
Freeze is special because it's a library: there is no separate database server process. Freeze uses Berkeley DB for storage, and while Berkeley DB supports many programming languages, C# is not one of them.
Best regards,
Bernard
So Freeze is the only high level component not available to C#?
This may not be an issue for us, as we wanted to have remote, asynchronous persistence. Our solution leverages the utility computing model and we'll have an IceGrid cluster. However, all nodes share a common data repository, that has to be HA (high availability). So in theory the grid servers could still be C#, and they communicate through IceStorm to the central data storage server that is written in C++ and uses Freeze. Since the data store layer is inherently less scalable horizonatally, it makes more sense to do it in C++ anyway to squeeze out every possible cycle.
Does Freeze support clustering or HA, so that if one datastore server goes down, the other can continue? If so does it do this through replication, or sharing remote data files?
If necessary, I am thinking that by using IceStorm as the messaging / queueing component between the grid server sand the datastore server, I can simply have two independent datastore servers as subscribers. If one goes down temporarily, in theory when it comes back up it can get the items that were never delivered to it from IceStorm, and then get back "in sync" asap.
Of course, this means that IceStorm itself needs to be HA configurable, and I assume under the covers IceStorm is using Freeze to store received messages? If so, how does one achieve no single points of failure with IceStorm?
Has there been any thought about building a high throughput message queue on top of ICE core? I know MSMQ / Indigo is there, as well as the queue stuff for Java, but having language-specific bindings at the method level which automatically use a message queue under the covers would be extremely powerful. Nothing has this level of integration that is cross-platform.
It wouldn't have to support out params, return values, or exceptions; just simple store and forward. If "synchronous" messages were necessary, the app could built it with reverse queues.
I know this wouldn't be tremendously complex to build on top of Ice, and we'll do it if we need to. I just want to make sure we don't work on something that's already on the road map...
One the other hand, if it's absolutely known that this won't be offered any time soon (it has been actively discussed and discounted), that info would be useful as well.
Thanks,
Ryan
IceStorm is a publish-subscribe service, and does not provide message persistence. So far Ice does not include a store-and-forward service.
Regarding persistence, Freeze is just one option; Freeze stores its data in a Berkeley DB database. You can of course use Ice with your favorite database system instead (MySQL, Oracle, SQL Server...) and store your data in a replicated / HA database server if you like. The Ice distribution includes a few demos for Oracle (in C++) and MySQL (in Java).
Best regards,
Bernard
The reason I'm curious is I'm sure you guys looked at all options, and if Berkeley's replication was good enough for Ice Storm, it will (hopefully) be good enough for our MQ implementation. This if of course assume the underlying replication capabiltieis of Berkeley DB are available at the Freeze level.
We will definately be using a RDBMS for our main storage of the system, but for semi-transient data such as a short-lifetime message store needed by a MQ, I think Berkeley DB would be perfect. So I'm thinking we could potentially build our own MQ's on top of Freeze.
Thanks,
Ryan
IceStorm uses BerkeleyDB for its datastore, however, for replication we did not use Berkeley DB replication. Some details on the algorithm used are in the Ice manual, or you could look at the source code yourself.
*sigh* I wish the documentation in the Freeze section clearly noted that C++ and Java were the only supported languages. Other sections show examples from just a few of the language choices, leading to some confusion over Freeze.
I guess I'll just have to rewrite everything in C++