In primo luogo, Linux come nuova piattaforma non è un grosso problema. Java è basato sulla JVM che fa un buon lavoro nascondendo il sistema e l'hardware. Se hai bisogno di scavare nel sistema operativo, a mio parere né Java né C # sono la lingua prescelta. È molto simile allo sviluppo di PHP. Puoi farlo con un server web su Linux e Windows, e in quasi tutti i casi non ci sono differenze durante il runtime a causa del sistema su cui è distribuito.
Quando sviluppi applicazioni Web con Java, in particolare applicazioni Web aziendali, probabilmente utilizzerai Java EE , quindi dovrai utilizzare un contenitore ( JBoss , WebSphere , GlassFish , ecc.). Questi possono essere eseguiti su Windows o Linux, non importa. I nostri sistemi di produzione utilizzano Red Hat Enterprise Linux con JBoss, mentre la maggior parte degli sviluppatori ha sistemi Windows 7 e questa disomogeneità non ha mai causato problemi.
Anche il passaggio a Java da C # non è molto complicato. Le lingue sono abbastanza simili nella maggior parte degli aspetti. Mancherete davvero alcune funzionalità come Proprietà e LINQ , ma questa è davvero una preoccupazione minore.
Un problema molto più grande sono le API. Java e J2EE fatti bene differiscono parecchio dalle tecnologie .NET (web). Dovresti fare uno sforzo serio per imparare JPA e EJB best practice (se si utilizza Java EE, ovvero, JPA può anche funzionare in modalità standalone). Consiglio anche di utilizzare EJB 3.0 in quanto le versioni precedenti sono completamente sovrastampate e ora sono state semplificate. Purtroppo, la maggior parte dello sviluppo di Java in questi giorni è ancora un'avventura attraverso l'XML-Hell. Sebbene la convenzione sulla configurazione sia stata implementata nelle versioni più recenti della maggior parte delle API, c'è ancora molto XML da scrivere. Questo è particolarmente vero per lo sviluppo web ( JSF per esempio). Si noti che in questo contesto sto parlando di problemi di configurazione e non dello sviluppo dichiarativo dell'interfaccia utente.
Per quanto riguarda le tecnologie web, consiglierei di non usare JSF (che è propagato come standard), in quanto è complicato e troppo ingegnerizzato. Potrebbe migliorare con le prossime versioni. Preferisco usare Apache Wicket o Tapestry , che ti farà risparmiare un sacco di mal di testa, soprattutto se avrai la necessità di controlli utente personalizzati o di script ricchi di client.
Per quanto riguarda l'interoperabilità: se i servizi esistenti sono codificati in base agli standard del settore ( REST / SOAP ) quindi probabilmente non hai problemi a consumarli con .NET. Tuttavia, se devi utilizzare librerie e moduli esistenti, probabilmente è meglio usare Java, per mantenere alta la riusabilità ( ASCIUGA ) e per omogeneità.
Il mio consiglio è di mantenere pulito l'ambiente del cliente. Usa Java, il cambio di lingua non è così complicato. Allenati sulle API che desideri utilizzare ampiamente . So che gli sviluppatori stanno per imprecare, perché mancheranno LINQ e perché scriveranno un codice un po 'più standard, ma puoi sicuramente trasferire molta esperienza (specialmente sulla parte di modellazione) al nuovo ambiente.
Modifica
Per quanto riguarda le API di scelta, alcune persone (@TMN per esempio, grazie per averlo indicato) suggeriscono di saltare del tutto EJB e di adottare Spring Framework e Hibernate . Hibernate può anche essere utilizzato come provider JPA. Questo non è certamente un cattivo consiglio.