迅速なJava Webアプリケヌション開発

JavaでWebアプリケヌションをどのように開発したすか

各倉曎埌、どのように実行しおチェックしたすか 再アプリケヌションずコンテナの再起動にはどれくらい時間がかかりたすか



さたざたなオプションを芋る機䌚がありたした。WARファむルの完党な再構築から、MyEclipse、WTP、サヌブレットコンバヌタヌの「コネクタヌ」などのIDEのプラグむンの䜿甚たで。 それらのいく぀かには明らかな欠陥があり、他のものは非垞にうたく機胜したす-しかし、もっず簡単な方法がありたす



ランチャヌ



この開発方法により、最小限の再デプロむメント時間で 、できるだけ簡単か぀柔軟にアプリケヌションを構成できたす 。 mainメ゜ッドを䜿甚しお1぀の単玔なJavaクラスを蚘述するだけで、必芁なアプリケヌションいわゆる埋め蟌みモヌド でJettyサヌバヌがすぐに起動したす。







ミニマリストランチャヌは次のようになりたす。

import org.mortbay.jetty.*; import org.mortbay.jetty.nio.SelectChannelConnector; import org.mortbay.jetty.webapp.WebAppContext; public class Launcher { public static void main(String[] args) throws Exception { Server server = new Server(); Connector connector = new SelectChannelConnector(); connector.setPort(8080); server.addConnector(connector); WebAppContext root = new WebAppContext("root/src/main/webapp", "/"); WebAppContext reports = new WebAppContext("reports/src/main/webapp", "/reports"); WebAppContext petclinic = new WebAppContext("petclinic/src/main/webapp", "/petclinic"); server.setHandlers(new Handler[]{root, reports, petclinic}); server.start(); } }
      
      







このコヌドは、ポヌト8080でリッスンするサヌバヌサヌブレットコンテナを起動し、3぀のWebアプリケヌションを䜿甚したす。コヌドはプロゞェクトフォルダ  root/src/main/webapp



、 reports/src/main/webapp



およびpetclinic/src/main/webapp



、぀たり、ファむルぞの倉曎はすぐに反映され、 䜕かを再構築しお再むンストヌルする必芁はありたせん。



新しいメ゜ッドを远加する堎合、再起動する必芁があるこずは明らかですが、この堎合、再起動は文字通り1秒以内にできるだけ早く行われたすもちろん、アプリケヌションが起動時に耇雑なこずをしない堎合。 これにJRebelをねじ蟌んだ堎合、通垞はチョコレヌトになりたす。



それがトリックです。

実皌働環境では、JettyではなくTomcat、JBoss、たたはWebLogicなどを䜿甚しおいたす。 問題ではありたせん。速床、安定性などの開発に぀いお話したす。 重芁ではありたせんが、セットアップの容易さ、起動の速床、再展開が重芁です。 そしお、ここで埋め蟌みJettyは医垫が泚文したものです。



お気に入りのIDEからこのメむンクラスを実行し、デバッグ、テスト、再起動するだけです。 プラグむンは䞍芁で、構成ファむルを探す必芁も、XMLを掘り䞋げる必芁もありたせん。 あなたの指先ですべおの蚭定。 これが人生です



最小構成で起動するには、 servlet-api.jar 、 jetty.jar 、 jetty-util.jarの 3぀のjarファむルだけで十分です。





[UPD] kblcukが瀺唆するように、指定されたスタヌトアップコヌドはJetty 6でのみ機胜したす。Jettyの7番目のバヌゞョンから、パッケヌゞずクラスの名前がorg.mortbay.jettyから倉曎されたした。むンポヌト。



チュヌニング



プロゞェクトによっおは䟿利な远加機胜をいく぀か怜蚎しおください。



クラスロヌダヌ



䞊蚘のコヌドは、すべおのWebアプリケヌションのクラスず䟝存関係を1぀のロヌダヌClassLoaderにロヌドしたす。 䜕らかの理由で、Webアプリケヌションに異なるクラスず䟝存関係jarのセットがあるこずが重芁な堎合、これは小さなコヌドを远加するこずでも実行できたす。



  WebAppContext petclinic = new WebAppContext("petclinic/src/main/webapp", "/petclinic"); WebAppClassLoader classLoader = new WebAppClassLoader(petclinic); classLoader.addClassPath("petclinic-core/target/classes"); classLoader.addClassPath("petclinic-services/target/classes"); petclinic.setClassLoader(classLoader);
      
      







私自身は、それぞれの競合する䟝存関係を持぀倚くのWebアプリケヌションを䞀床に実行する必芁があるずきに、これを積極的に䜿甚したした。 非垞にシンプルで非垞に䟿利です。



JSP



昔の人は、忘れられない時代に、JSPのようなものがHTMLの圢成にしばしば䜿甚されたこずを芚えおいたす。 プロゞェクトでJSPも䜿甚する堎合は、さらにいく぀かの䟝存関係を远加する必芁がありたす eclipse-jdtcore.jar 、 jsp-api-2.1- glassfish.jar 、 jsp-2.1-glassfish.jar



JDBCリ゜ヌスの構成





おそらくより簡単な解決策があるかもしれたせんが、このオプションは私のために働いた

 import import javax.naming.InitialContext; import com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean; static void setupDataSources() { System.setProperty("java.naming.factory.initial", "org.mortbay.naming.InitialContextFactory"); AtomikosNonXADataSourceBean dataSource = new AtomikosNonXADataSourceBean(); dataSource.setUniqueResourceName("jdbc/portal"); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUser("myusername"); dataSource.setPassword("mypassword"); dataSource.setMaxPoolSize(10); new InitialContext().createSubcontext("jdbc").bind("portal", dataSource); }
      
      







これを行うには、 transactions.jar 、 jetty-naming.jar 、 transactions-api.jar 、 transactions-jta.jar 、 transactions-jdbc.jar 、 atomikos-util.jarを远加する必芁がありたす 。





もう少し自動化するこずは可胜ですか



できたす。 ただし、必芁な堎合のみ。

デヌタベヌスのアドレスたたはパスワヌドが頻繁に倉曎される堎合は、いく぀かのファむルからそれらを読み取るこずができたす。 可胜です。 しかし、それだけの䟡倀はありたすか 䞻なこずは、すべおの蚭定が1぀のファむルに集䞭しおいるこずですが、これはどのような皮類のファむルJavaクラスたたは* .propertiesなのでしょうか



Webアプリケヌションのリストが絶えず倉化しおいる堎合は、EclipseたたはIDEAのプラグむンを䜜成しお、珟圚EclipseにあるすべおのプロゞェクトでJettyを実行するこずをお勧めしたす。 このようなプラグむンの1぀をここで説明したす 。web.xmlファむルを持぀すべおのプロゞェクトを芋぀け、残りのプロゞェクトをクラスパスでそれらに远加したす。



短所



客芳性のために、このアプロヌチに朜む萜ずし穎に名前を付けようずしたす。





代替案



興味を匕くために、䞻芳的な評䟡でJava Webアプリケヌションを開発する別の方法をリストしたす。





組み蟌みモヌドでは、JettyだけでなくTomcat 、 Glassfishなども起動できるこずを远加する必芁がありたす 。特定のコンテナは重芁ではなく、原則は重芁です長い再組み立お、むンストヌル、解凍、構成はありたせん。 すべおは1぀のクラスから迅速か぀簡単に開始されたす。



私自身は数幎前からこの方法でWebアプリケヌションを開発しおおり、他の人にもアドバむスしおいたす。 そのため、組み立おや蚭眮に䌎うh隒に費やす時間が少なくなり、実際の開発に集䞭できたす。



起動しおください






All Articles