Solaris是出色的Java開發平臺的原因

幾天前,我發布了“ OpenSolaris的死亡:為Java開發人員選擇操作系統 ”,其中我說Solaris是Java開發人員的絕佳平臺。 這篇文章的重點只是想知道自OpenSolaris淘汰以來我將使用哪個Solaris版本。 正如Neil的評論使我意識到的那樣,該帖子的確未能澄清,是您應該選擇Solaris作為開發平臺的原因。
我決定在這篇文章中寫這篇后續文章,以快速總結我最喜歡的文章,并介紹一些在此類技術派上用場的用例。

軟件可用性
盡管在過去的幾年中,Solaris仍然是一個小眾的操作系統(無論如何還是有許多其他平臺),但Sun和社區在將其推廣為開發人員的桌面替代品方面做得非常出色。 甚至為開發人員提供了一個特定的發行Solaris Express Developer Edition 。 它已經停產了,無論如何如今確實沒有必要了。 較新的Solaris發行版(例如SXCE,OpenSolaris,OpenIndiana)包括(捆綁或在官方軟件包存儲庫中):

  • 數據庫(MySQL,PostgreSQL)。
  • Web服務器(Apache,Java Enterprise System Web服務器等)。
  • 應用程序服務器(Glassfish)。
  • SAMP堆棧(Solaris + Apache + MySQL + PHP)。
  • IDE(NetBeans,Eclipse)。
  • 支持其他流行語言(Ruby,Groovy等)。
  • 身份管理(LDAP,Java Enterprise System身份服務器)。

Solaris還是企業選擇的平臺,因此支持常見的企業軟件包,作為Java開發人員或Java架構師,您將不會錯過構建開發環境所需的部分。 作為Java開發人員,我經常需要的非常基本的軟件包是:

  • Oracle RDBMS。
  • Oracle WebLogic應用服務器。
  • IBM WebSphere Application Server。
  • JBoss應用服務器。

Solaris的技術

Solaris獲得了一些獨特的技術,而其他UNIX(和類似UNIX的)系統可能缺少用作開發平臺的(或從Solaris移植過來的)。這里重要的不是“自身的技術”或僅在以下方面有用的技術:大型企業環境,但事實是:

  • 它們已經很好地集成在Solaris中,并且可以相互利用。
  • 在常見的使用案例中,這些技術確實對開發人員有幫助。

他們每個人都應該擁有幾個職位,但是,我將嘗試舉一些簡潔的例子。

Solaris服務管理工具

盡管該技術對于系統管理員來說可能是最有用的,但作為開發人員,我經常利用它。 SMF是為服務和服務管理提供統一模型的框架。 基本配方僅需要服務的XML描述符。 SMF可讓您:

  • 定義服務:啟動腳本的位置,參數和語義。
  • 建立服務之間的依賴關系:
    • 服務和服務實例可能依賴于其他服務實例。
    • 服務啟動是在并行考慮服務依賴關系的情況下執行的。
  • 增強的安全性和基于角色的細粒度訪問控制:
    • 只能為服務分配運行所需的最低特權集。
    • 可以使用Solaris RBAC(基于角色的訪問控制)將服務管理委派給非root用戶。
  • 服務健康控制:
    • 服務自動重啟。
    • 與Solaris Fault Manager的合作增強了服務的運行狀況,該功能可在發生硬件故障時防止服務降級。
  • 自動inetd服務包裝器:SMF自動包裝inetd服務。

典型用例

我使用的每個軟件包都有自己的SMF描述符(隨軟件包一起提供或由我定義),它大大減少了我設置開發機器所需的時間。 例如,對于WebSphere Application Server,我具有以下單獨的服務實例:

  • WebSphere IHS。
  • WebSphere Application Server。
  • WebSphere Application Server DMGR。
  • WebSphere Application Server集群節點。

在它們之間定義了依賴關系,我可以僅用一行代碼來啟動所需的WebSphere服務:

svcadm enable [websphere-service-name]

SMF將負責一切。

SMF的使用模式可以進一步增強。 假設您正在一個或多個項目中工作,并且每個項目都需要一組獨特的運行服務。 通常發生以下情況之一:

  • 您將它們全部安裝并運行。
  • 您將它們全部安裝,并在切換工作項目時手動啟動和停止它們。

對于開發人員而言,資源總是很少,而對于節省資源卻有些偏執。 使用SMF,您可以:

  • 為每個項目定義一個SMF服務。
  • 對于每個項目,請定義與所需服務的依賴關系。

這樣,您至少可以使用一個命令啟動和關閉特定項目所需的每個服務。 不再:

  • 每個服務的自定義外殼腳本。
  • inetd服務(例如Subversion,Apache等)的定制配置條目
  • 特定的操作系統定制。
  • 當您不需要服務并浪費資源時可以運行它們,否則可以使用。

以下帖子中提供了SMF服務清單定制的示例:

  • 向SMF注冊服務。
  • Solaris 10 SMF管理的服務的憑證和項目 。
  • 將Subversion設置為一個inetd服務 。

ZFS

就靈活性和易用性而言,ZFS文件系統是唯一的。 使用極其精簡的命令集,您可以:

  • 動態創建文件系統。
  • 動態快照文件系統。
  • 動態復制文件系統,幾乎沒有使用空間。

關于ZFS的文獻很多,我將限制描述我最喜歡的用例。

用例:復用您的開發環境。

軟件安裝僅僅是用戶體驗的開始。 通常,我們花時間:

  • 配置我們的環境。
  • 對它們進行微調。
  • 定義我們需要的其他庫集。
  • 定義我們的應用程序使用的服務器資源集(JDBC,JMS等)。

等等。 列表是無止境的。

有時有必要為同一項目的不同項目或不同開發階段準備不同的環境。 為了避免浪費時間和資源來構建不同的環境,我通常將按以下步驟進行操作:

  • 安裝和配置我的環境。
  • 為它制作一個ZFS快照。
  • 為我需要的所有其他設置制作一個ZFS克隆。

Oracle JDeveloper是我經常克隆的應用程序的一個很好的例子。 盡管采用了在用戶主目錄中使用按用戶配置目錄的通用方法,但JDeveloper基本上是一個單一用戶環境。 我只需要安裝一次,快照它的安裝目錄,然后創建一個ZFS克隆(每個環境一個),而不必擺弄腳本來設置每個用戶的配置參數。 我自己在用戶主目錄中使用了幾個JDeveloper環境的克隆。

ZFS克隆的功能可由Zones基礎結構使用,這將在下一節中看到,從而進一步增強了其功能。 在處理大型安裝(例如您喜歡的虛擬化技術的磁盤映像)時,克隆ZFS文件系統也很有利。

我寫的有關ZFS的其他文章可以闡明其一些用例:

  • 設置開發人員環境時,使用ZFS克隆保留磁盤空間 。
  • Sun xVM:克隆domU 。

容器和其他虛擬化技術

我認為Solaris是出色的桌面虛擬化平臺。 再次,用幾個命令。 您可以輕松創建半虛擬化的Solaris實例(區域)。 區域基礎結構支持ZFS,并且可以利用它。

可以使用其XML配置文件的命令行界面來配置區域。 創建區域非常簡單,并且由于它們是輕量級技術,因此您可以根據需要創建任意數量的區域。 如果您使用的是ZFS,則克隆區域的過程非常簡單,快捷。

用例:群集應用程序服務器

在開發Java EE應用程序期間,通常將需要以下一項(或多項)的實例:

  • 應用服務器。
  • Web服務器。
  • 數據庫;
  • 用戶注冊表。

還希望它們在隔離的環境中運行,以便您可以模擬預期的生產配置。 使用區域很容易:只需創建所需的多個區域,它們中的每一個將表現為一個單獨的Solaris實例:例如,每個區域都有:

  • 自己的網卡和IP配置。
  • 它自己的用戶,組,角色和安全策略。
  • 自己的服務。

您無需準備多次安裝和配置環境,而是準備帶有所需服務的“主”區域。 對于以下每一項,我都有一個“主”區域:

  • WebSphere Application Server。
  • WebLogic應用服務器。
  • Oracle數據庫。
  • MySQL數據庫。
  • LDAP目錄。

等等。 使用一個簡單的命令( zoneadm clone [-m復制] [-s zfs_snapshot] source_zone ),您將在幾分鐘之內得到一個全新的工作環境。

用例:VirtualBox和ZFS

有時,您寧愿使用其他操作系統的虛擬實例,例如GNU / Linux,FreeBSD和Windows。 Solaris是出色的VirtualBox主機,ZFS的強大功能將使您:

  • 為您需要的每個操作系統或每個“操作系統角色”創建“主”映像。
  • 即時對其進行克隆以創建全新的虛擬OS映像。

就我而言,我有:

  • 具有Visual Studio for .NET開發的Windows 7主客戶端。
  • 主Windows Server 2008。
  • 帶有SQL Server 2008的Windows Server 2008的主版本(以前版本的克隆)。
  • 熟練的Debian GNU / Linux。

每當我需要一個新實例時,我只需要克隆磁盤映像即可。 在短短的幾秒鐘內,我便有了所需的環境。 我不僅節省了寶貴的時間,而且還節省了大量的磁盤空間。 如果我不使用ZFS技術而存儲的所有映像(和區域),則至少需要4倍的磁盤。

用例:虛擬網絡堆棧

Solaris為您提供了非常強大的網絡虛擬化功能。 例如,您可以根據需要創建任意數量的虛擬NIC,并在Solaris Zones中或作為其他虛擬化技術(例如VirtualBox)的網卡獨立使用它們。網卡可以與虛擬交換機(etherstub)互連,并使您能夠創建“盒子中的網絡”。 您不僅可以使用虛擬化的實例來模擬您的生產環境,還可以創建一個虛擬化的網絡來模擬環境可能需要的復雜網絡策略。

如果您需要測試一個環境,如果沒有其他物理機器就無法復制其配置,則可以在其中使用虛擬化技術(例如Zones或VirtualBox)和虛擬化網絡堆棧。 我正在從事的項目的開發人員環境由以下組成:

  • 具有兩個負載平衡的IBM IHS實例的兩個區域。
  • 具有LDAP目錄的區域。
  • 兩個區域具有IBM WebSphere Application Server的兩個集群實例。
  • 具有IBM WebSphere DMGR實例的區域。

使用Solaris,我可以在生產環境中復制生產環境,并尊重我們使用的每個網絡配置。 沒有這些技術,要實現這個目標將變得更加困難,否則我將獲得自定義配置(例如,避免端口沖突)。 在所有情況下,如果區域不是那么容易使用,我將在管理和配置此類環境上浪費更多時間。

DTrace

DTrace功能非常容易向開發人員解釋。 同時,不親自嘗試就很難掌握其有用性。 Solaris上的DTrace提供了數以萬計的探針,其他探針可以即時創建。 此“探針”為您提供了一種非常有效的方法來解決應用程序和底層操作系統中的問題。 要使用探針,您必須使用D語言編寫的腳本。 幸運的是,這種語言在設計上非常簡單,您可以用幾行代碼編寫功能強大的D腳本。

DTrace毫不費力,即使在生產環境中,您也可以立即解決問題,而無需修改應用程序。 一些IDE(例如NetBeans)具有功能強大的插件,可讓您編寫D腳本并以精美的圖形查看探針收集的數據。

作為開發人員,我不止一次地重視DTrace的實用性。 我不必使用故障診斷程序來深入研究源代碼并引入其他代碼(即使在方便的情況下),我可以使用D腳本從外部觀察應用程序并快速收集數據,以幫助我確定問題可能出在哪里。

此外,在某些情況下,您會發現自己正在處理沒有可用代碼的情況。 我可以快速解決帶有D腳本的WebSphere Application Server所遇到的問題,而不是依賴于WebSphere跟蹤工具和解釋日志文件的任務。

結論

介紹性文章就這么多。 對于任何開發平臺,都必須“盡可能”地構建與目標環境盡可能接近的開發環境。 此外,我認為在盡可能接近生產環境的環境中工作不僅在應用程序開發階段為您提供了額外的價值和見解,而且還應視為我們參與的每個項目的強制性要求。 Solaris提供了開發人員實現此目標所需的所有工具。

Solaris是一個復雜的企業操作系統,具有許多您可能永遠不會使用的功能。 不過,正如我在本文中試圖指出的那樣,其中許多其他情況都有一個用例。 由于其中一些技術是使用開放源代碼許可證開發的,因此它們也可以在其他操作系統上使用:ZFS在FreeBSD上可用,并且需要社區的努力將其移植到OSX。 DTrace在OS X,Linux和FreeBSD上可用。

“ Solaris優勢”是所有這些技術都是高度集成的,并且可以相互利用。 結果比它們的總和還有價值。 這些技術具有非常完善且易于使用的管理界面:當時間很重要時,“您的工作方式”至關重要。

我希望這些見解可以幫助您了解Solaris操作系統是否以及何時對您有用。 即使您認為并非如此,我還是建議您嘗試一下:在工具箱中添加新技術總是很好的。

參考: The Gray Blog上的 JCG合作伙伴提供了Solaris之所以成為Solaris 出色 Java開發平臺的一些原因 。

相關文章 :
  • Java最佳實踐
  • 使用VirtualBox在PC上安裝Android OS
  • Java內存模型–快速概述和注意事項
  • 適用于Mac OS X的官方Java 7 –狀態
  • Java初學者指南

翻譯自: https://www.javacodegeeks.com/2011/05/solaris-java-development-platform.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374726.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python , angular js 學習記錄【2】

1.不同scope之間的通信 (1)無父子關系的scope通信: 在需要操作的scope里面定義一個事件,名稱為delete_host,參數為data $rootScope.$on(delete_host, function(event,data) {angular.forEach($scope.hosts, function (…

【轉】phpize學習

為什么使用phpize? 比如剛開始安裝的時候使用 ./configure --prefix/usr/local/php7 --exec-prefix/usr/local/php7 --bindir/usr/local/php7/bin --sbindir/usr/local/php7/sbin --includedir/usr/local/php7/include --libdir/usr/local/php7/lib/php --mandir/usr/local/ph…

GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示

不久前,我的一個朋友和同事向我飛過,說“世界上只有一半在使用Maven ”。 當我意識到最受歡迎的文章(到目前為止) GWT 2 Spring 3 JPA 2 Hibernate 3.5 Tutorial提出了一種基于Google的Web Toolkit( GWT ) …

Android的WiFi開啟與關閉

注意&#xff1a;要首先注冊開啟和關閉WiFi的權限&#xff0c; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.wyl.wifi"android:versionCode&q…

awk用法小結(作者總結)

http://www.chinaunix.net/old_jh/24/691456.htmlhttp://wenku.baidu.com/view/ebac4fc658f5f61fb736664d.htmlawk 用法&#xff1a;awk pattern {action} 變量名 含義 ARGC 命令行變元個數 ARGV 命令行變元數組 FILENAME 當前輸入文件名 FNR 當前文件中的記錄號 FS 輸入域分…

力扣盛最多水的容器

給你 n 個非負整數 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線&#xff0c;垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0) 。找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多…

Java最佳實踐–多線程環境中的DateFormat

這是有關使用Java編程語言時的擬議實踐的系列文章的第一篇。 所有討論的主題均基于用例&#xff0c;這些用例來自于電信行業的關鍵任務超高性能生產系統的開發。 在閱讀本文的每個部分之前&#xff0c;強烈建議您參考相關的Java API文檔以獲取詳細信息和代碼示例。 所有測試…

IntentDemo

Intent通信示例&#xff1a; 兩個Button&#xff0c;一個startBrowser, 一個startPhone. 其中&#xff0c;OnClickListener()是類View的一個interface&#xff0c;需要實現其中的onClick()函數。 startActivity()開啟另一個Activity&#xff0c;本示例中開啟Browser或Phone. In…

JBoss 4.2.x Spring 3 JPA Hibernate教程

在花了許多時間在網上搜索之后&#xff0c;嘗試找到對幾個項目使用Spring&#xff0c;JPA和Hibenate的最有效方法&#xff0c;我們得出了將在下面介紹的配置的結論。 將Spring與JPA和Hibernate集成包括幾個步驟&#xff1a; Spring容器的配置 JPA ORM層的配置 Hibernate Sec…

力扣長度最小的子數組

給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其和 ≥ target 的長度最小的 連續子數組 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其長度。如果不存在符合條件的子數組&#xff0c;返回 0 方法一&#xff1a;移動窗口 設置兩個指針&…

Yeelink:將復雜的傳感器以極簡的方式組到同一個網絡內

Yeelink&#xff1a;將復雜的傳感器以極簡的方式組到同一個網絡內轉載于:https://www.cnblogs.com/qxql2016/p/4692629.html

androidstudio新建項目中在布局文件中不顯示title的方法

在androidstudio新建項目的時候&#xff0c;在布局文件里有時候會出現如下情況&#xff1a; 上面的標題欄非常礙眼&#xff0c;要想隱藏標題欄的話&#xff0c;可以在Manifest文件的theme標簽里進行配置&#xff0c;自定義一個theme&#xff0c;加上如下兩句。或者直接在當前th…

OpenJDK作為Linux上的默認Java

大家好&#xff0c; 最近&#xff0c;我收到了很多人的私人來信&#xff0c;他們對Linux的默認Java軟件包的更改感到困惑/擔心。 對于許多Linux發行版&#xff0c;Java的Sun / Oracle官方版本已打包為該平臺的默認Java。 但是&#xff0c;由于最近的許可更改&#xff0c;情況將…

力扣 數組中的第K個最大元素

給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 k 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 分析&#xff1a;這是個排序題&#xff0c;只要排好序&#xff0c;一切迎刃而解。我決定把排序…

Ajax應用需要注意的事項

接觸Ajax&#xff0c;那時候的Ajax支持還不是很好&#xff0c;都要涉及底層&#xff0c;沒有現成的框架給你調用。現在把常見的問題列舉如下。 1、編碼問題 注意AJAX要取的文件是UTF-8編碼的。GB2312編碼傳回BROWSE后中文會亂碼。如果用VBScript的話還可以轉化&#xff0c;但是…

Xcode插件

古人云“工欲善其事必先利其器”&#xff0c;打造一個強大的開發環境&#xff0c;是立即提升自身戰斗力的絕佳途徑&#xff01;以下是搜集的一些有力的XCode插件。1.全能搜索家CodePilot 2.0你要找的是文件&#xff1f;是文件夾&#xff1f;是代碼&#xff1f;Never Mind&#…

JBoss Portal上的“ Hello World” portlet

Portlet概述 本教程將向您展示如何創建和部署簡單的Portlet。 Portlet是基于Java技術的Web組件&#xff0c;可以處理請求并生成動態內容。 Portlet不是自治實體&#xff0c;但是由Portlet容器管理&#xff0c;Portlet容器為Portlet執行提供了必要的運行時環境。 應當注意&…

Jenkins + GitHub + fir-cli 一行命令從源碼到fir.im

上周簡書作者宣X_x 分享了一篇文章——用JenkinsGitHubXcodefir搭了一個持續集成環境&#xff0c;整個記錄見(傳送門)。 _______ 其實fir.im為我們提供了一個更簡單的方式&#xff1a;fir-cli&#xff0c;我們只需要一條命令&#xff0c;就可以從源代碼到fir.im。不需要Jenkin…

力扣9. 回文數

給你一個整數 x &#xff0c;如果 x 是一個回文整數&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。例如&#xff0c;121 是回文&#xff0c;而 …

使用Maven編譯Tomcat源碼

使用Maven編譯Tomcat源碼 準備工作 編譯工具&#xff1a;Intellij Idea 15.0.2Tomcat版本&#xff1a;7.0.69 下載鏈接JDK版本&#xff1a;1.7.0_80Maven版本&#xff1a;3.05編譯步驟 1. 在工作空間中建立目錄 TomcatSource,下載源碼解壓到此文件夾&#xff0c;完成后目錄結構…