Java vs. C# access modifiers looked at by a C# programmer

I’m looking into the SCJP 6 as I don’t have hands on experience on Java projects (only academic apps).

I had bookmarked long time ago a great C# vs. Java comparison Dave Obasanjo made:

A COMPARISON OF MICROSOFT’S C# PROGRAMMING LANGUAGE TO SUN MICROSYSTEMS’ JAVA PROGRAMMING LANGUAGE



I noticed tonight that the member’s access modifiers could use some tuning and show:

C# access modifier

Java access modifier

private

private

public

public

internal

Default (package-private)

protected

N/A

internal protected

protected



In Java, a protected member can only be accessed through classes on the same package and through subclasses whether they are on the same package or not.

The protected modifier specifies that the member can only be accessed within its own package (as with package-private or default) and, in addition, by a subclass of its class in another package. Package + Kids access.

The default access modifier in Java happens when a class member has no modifier (the default is also known as package-private). This means the member is only accessible by a class defined within the package.

Adding an empty item to an IList collection at runtime.

How can I add a new empty item to a datasource (BindingSource) if the collection that it contains has objects of unknown type at design time:

if (dataSource.GetType() == typeof(BindingSource))
{
IEnumerator en = dataSource.GetEnumerator();
en.MoveNext();
Type t = en.Current.GetType();

object o = System.Activator.CreateInstance(t, false);

dataSource.Add(o);
}

where dataSource is of type IList.

This was a request to add an empty line to a windows forms combobox and to a listbox.

BindingSource can be bound to any of the following:

  • Object
  • System.Type
  • IEnumerable
  • ICollection
  • IList
  • IListSource
  • IBindingList
  • IBindingListView

Old SQL Server 2005 merge replication bug, how to determine version on the subscribers and details

I got the following email from devx.com, unfortunately when I replied to this colleague, the email bounced. I’m hoping he can Google this up.

Hi Lizet,

I just read your article on www.devx.com about data loss in Merge Replication. Unfortunately we are experiencing this exact same bug. I have already upgraded the subscriber server to SP3. Do you know if the fix for this issue is included in SQL Server Express SP3 and will it get applied if I just upgrade an existing instance from SP2 to SP3? Or do I need to do a complete uninstall and reinstall? Also, is there anything I can do to verify the subscriber instance had the correct patches applied to it? I appreciate your help on this and the article you wrote. We have a lot of work ahead of us restoring data lost but it could have been worse if not for this article.

I appreciate your time.

My replies:

As far as I can remember any SQL Server Engine (whether Express or Standard or Enterprise) had the problem.
The publisher and the distributor (which can only be a Standard or an Express instance) should be patched as well. Any engine with a version lower than 9.00.3228.00 should be patched, whether applying SP3 or only the Cumulative Update they launched after the replication problem came to the public light.
You can check the version at the subscribers using sqlcmd.
If your subscriber engines are installed as the default engine and use windows authentication, you can connect to them using the following command, you need to be an administrator on the machine in order to apply the CU:
sqlcmd -E
checking the version on the sqlcmd command prompt would be:
> select @@version
>GO
I remember patching the subscribers was a pain, as we didn’t want to push the update automatically and we connected to every single subscriber remotely to make sure the patch (CU6 for SP2 in our case) was applied properly.

I added a post to my blog with the line of code that caused the mess. The link is
Hope this helps, good luck

and

I forgot to answer two of your questions:
Do you know if the fix for this issue is included in SQL Server Express SP3
Yes, the fix is included in SP3. Make sure you patch the publisher and distributor as well, not only the subscribers.
and will it get applied if I just upgrade an existing instance from SP2 to SP3?
Yes.
Or do I need to do a complete uninstall and reinstall?
No, just patch.

Usually you can recover the published database from a previous backup but as you usually don’t keep synchronized backups of each subscriber, you have to recreate the publication and subscriptions, potentially destroying any data at the subscribers that has not been merged yet. Or you could copy the subscriber database to a different location, recreate publication and subscription and manually add the data that didn’t merge from your saved database to the newly merged database.

Hopefully this reaches you, again good luck recovering the data.

A long awaited feature on Reporting Services 2008… rich text formatting

It’s finally here, had I had this feature at the beginning of last year…

Finally you can apply different styles to the text on your text boxes and even more, you can retrieve rich formatted text from the database and view the formatting on your report.

It doesn’t work well with background color attributes yet…

List of new features

Thread on MSDN about rich formatted text coming from the database

I might be able to use the rich text controls that generate HTML sooner than later…

Happy coding!

WCSF falling short on composing web applications?

I’m right now looking for options on composing web applications. I recently took part of an interesting project with the composite application block framework (CAB) developed by the patterns and practices team and am certainly looking for the web equivalent. That been said I should add I have a great deal of frustration now.

I had been subscribed to several discussion threads at Codeplex for the web composite application block and WCSF. At the moment of writing this post codeplex.com is down (it has been down for about 2 hours now at 4.18 PM EST) and southworks.net is down too.

SouthWorks.net is the company that has more developers maintaining these application blocks, afaik, and they also moderate most of the codeplex threads.

After reading about the road map of the Composite Web Applications I tried out the QuickStarts for the WCSF hoping to find the web equivalent of CAB or Prism.

My team has a couple of “legacy” web asp.net applications that were migrated to asp.net 2.0 two years ago.

We were looking for a framework that would serve as a skeleton for composing web solutions.

IoC containers such as Spring.NET allow composability at object level, but it’s cumbersome to have all the objects that you’ll inject into your main application defined in a main configuration file. *this is as far as what i’ve seen* And we wanted to be able to use existing applications with a minimum of re-write (maybe some style changes).

That’s why modules might be a better choice of dividing and composing applications. Each module could have it’s own set of configurable objects, it’s own configuration file and it’s own UI and would communicate with other modules through an event broker mechanism and would consume information presented by the services registered or published by the shell…

WSCF appeared to be the answer, until after we tried the QuickStarts.

The modules do not have a UI at all, the UI is defined in the main web application (web project) where the web.config file resides. The modules are merely a group of business objects and presenters. I don’t think the modules are loosely coupled at all, as the view is defined in the main application (web project) and the name of the view or web form is also declared in the sub module.

I might be very biased by the architectural design of Facebook, but composability in that case means, you can host *any* application on your main *shell* and this application will consume services to communicate with the main shell, using encryption with a key provided at the time the application is registered.

…they surely share session…

Why WSCF falls so short on this?

My real world problem: I would like to integrate the existing web applications into a new shell with minimum changes. These legacy applications are now on different virtual directory and run on different appdomains. They do share a single sign on implemented as shown here:
http://forums.asp.net/p/1023838/1390821.aspx
but there is no shared session.

These web applications although might be considered legacy, are fully functional and have been tested. Rewriting them would cause more pain that help the business.

It seems that if the team goes for WCSF we will have to end up rewriting these application into WCSF modules and moving all the webforms and user controls to the web project as oppose to do small modifications to integrate them into a true composable shell. This would be extremely painful.

I’m still looking and to be honest, I’m kind of lost, it must be it is Friday afternoon. Any comments or suggestions would be more than welcome…

Thanks!

I hope they deprecate the money data type in SQL Server

In SQL Server 2000 and 2005 you have the money data type and the smallmoney data type. (Oracle doesn’t have this data type)

You wouldn’t think there is anything smaller than a penny or a cent in money matters, so why did they designed these data types with 4 decimal places? To help hackers puts all the partial pennies in a separate bank account? :-p or to keep compatibility with Excel and allow easier data import from Excel spreadsheets?

Apparently, the only reason is to let developers insert currency symbols that won’t be preserved:

USE tempdb;
GO
CREATE TABLE TestMoney (cola INT PRIMARY KEY, colb MONEY);
GO
SET NOCOUNT ON;
GO

-- The following three INSERT statements work.
INSERT INTO TestMoney VALUES (1, $123.45);
GO
INSERT INTO TestMoney VALUES (2, $123123.45);
GO
INSERT INTO TestMoney VALUES (3, CAST('$444,123.45' AS MONEY) );
GO

-- This INSERT statement gets an error because of the comma
-- separator in the money string.
INSERT INTO TestMoney VALUES (3, $555,123.45);
GO
SET NOCOUNT OFF;
GO
SELECT * FROM TestMoney;



GO



DECLARE @dollars AS money
SET @dollars = $100
SELECT @dollars

The value returned is 100.0000, without a currency symbol.

If you’re a developer, these data types will make you round your values to two decimal places before retrieving them to your UI and they will also give you a couple of headaches with calculated data.

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=92830

Stay away from the money type, use decimal instead.