|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。JBoss,作为J2EE使用服务器,以其EJB容器出色的功能、手艺的潮水性、开辟部署J2EE使用的便利性博得了良多J2EE开辟者的信任。个中,免安装、基于JMX构架、热部署(HotDeploy)、疾速开辟EJB使用等几项特性与其他商用服务器比拟,显得有些得意洋洋的模样。只管其自己没有严重的缺点,但究竟是OpenSource的开辟形式,文档很少,因而要很好的把握、精晓开辟基于JBoss的使用仍是显得有些力所能及。本文分离本人的开辟履历,给出在JBoss3.2.1下开辟J2EE一些相干的注重事项和划定规矩。个中,读者必定要晓得JBoss3.2.1作为JBoss的过渡产物(与JBoss3.0.x、JBoss4.x比拟),天然有些工具和JBoss3.0.x、JBoss4.x有很年夜不同。可是,一样平常情形下,本文先容的内容,大致上都合适JBoss各个版本。下载完JBoss3.2.1后,解压到一个没有空格的目次路径上面就能够运转JBoss,以是很便利,但条件是方针呆板安装了Java2StandardEdition。统统停当后,入手下手我们的路程。(假定JBoss3.2.1安装在:C:jboss-3.2.1_tomcat-4.1.24,本利用default设置)一,相干设置文件的设置为开辟J2EE使用,操纵数据库成了必不成少的内容;调治日记输入的具体水平成了调试J2EE使用的关头;EJB使用的调优历程是J2EE使用的中心。等等,这些内容都是我们必要晓得的。(1)数据源的设置:在JBoss3.2.1中,设置数据源的步骤很复杂,JBoss3.2.1自己带了支流数据库的设置实例,于目次下:C:jboss-3.2.1_tomcat-4.1.24docsexamplesjca。详细利用谁人设置文件取决于方针用户的数据库。假如是SQLServer2000,则必要利用mssql-ds.xml文件(撑持当地事件)大概mssql-xa-ds.xml文件(撑持全局事件);假如是Oracle9i数据库,则必要利用oracle-ds.xml文件大概oracle-xa-ds.xml文件。等等。这里以SQLServer2000为例。起首将mssql-ds.xml文件拷贝到目次:C:jboss-3.2.1_tomcat-4.1.24serverdefaultdeploy下。然后翻开文件,并作以下修正: <datasources>
<local-tx-datasource>
<jndi-name>VSSDB</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://125.16.45.158:1433;DatabaseName=DDD</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<password>sa</password>
<min-pool-size>50</min-pool-size>
<max-pool-size>200</max-pool-size>
</local-tx-datasource>
</datasources>假如方针J2EE使用只必要当地事件,则上述历程已完成了Datasource的设置,同时这个设置将用于JDBC和EJB经由过程JNDI利用。假如要完成EJB利用Datasource,则还必要修正位于目次:C:jboss-3.2.1_tomcat-4.1.24serverdefaultconf下的standardjbosscmp-jdbc.xml文件。好比,<jbosscmp-jdbc><defaults>
<datasource>java:/VSSDB1</datasource>
<datasource-mapping>MSSQLSERVER2000</datasource-mapping>
<create-table>true</create-table>
<remove-table>false</remove-table>
<read-only>false</read-only>
<time-out>300</time-out>
<pk-constraint>true</pk-constraint>
<fk-constraint>false</fk-constraint>
。。。。。。。。个中,<datasource>java:/VSSDB</datasource>中的VSSDB就是mssql-ds.xml设置的数据源;而“java:/”前缀标明该定名空间只是对JBoss自己可见,即运转于JBoss外的使用是不克不及够利用这里界说的数据源,这一点但愿读者注重。其次,<datasource-mapping>MSSQLSERVER2000</datasource-mapping>中的MSSQLSERVER2000能够在该文件的其他中央找到。(假如是其他数据库,情形都是相似的,但愿读者加以思索!)(2)日记的输入具体水平设置:
因为JBoss3.2.1开辟接纳了Log4j办理其日记信息(严厉地讲,它扩大了Log4j),因而懂得Log4j的机理,有助于了解JBoss3.2.1办理日记的体例。JBoss3.2.1接纳JMX架构的同时,且以.xml文件范例为设置文件,因而能够找到位于目次:C:jboss-3.2.1_tomcat-4.1.24serverdefaultconf下的log4j.xml文件。好比,个中一段设置示比方下: <appendername="CONSOLE"class="org.apache.log4j.ConsoleAppender">
<paramname="Target"value="System.out"/>
<paramname="Threshold"value="INFO"/>
<layoutclass="org.apache.log4j.PatternLayout">
<!--Thedefaultpattern:DatePriority[Category]Message-->
<paramname="ConversionPattern"value="%d{ABSOLUTE}%-5p[%c{1}]%m%n"/>
</layout>
</appender>好比,为了调治JBoss3.2.1把持台日记输入的具体水平(调剂为DEBUG级别),我们必要修正value=”INFO”,将INFO改成DEBUG。假如方针读者在开辟EntityBeans,能够调治位于与log4j.xml文件统一目次下的standardjboss.xml文件(该文件次要是供应修正EJB相干的调试、运转、调优、部署参数)。假如方针读者EntityBeans接纳的<container-name>为StandardCMP2.xEntityBean,则将个中的<call-logging>属性的取值改成true。 <container-configuration>
<container-name>StandardCMP2.xEntityBean</container-name>
<call-logging>false</call-logging>
<invoker-proxy-binding-name>entity-rmi-invoker</invoker-proxy-binding-name>
<sync-on-commit-only>false</sync-on-commit-only>
。。。。。。。。。完成上述两步后,读者在调试EntityBeans时经由过程把持台,能够看到EntityBeans收回的JDBC挪用细节。(3)Tomcat容器相干参数的设置:假如方针读者利用JBoss3.2.1与Tomcat4.1.24的集成版本,则能够经由过程调治分离位于目次:C:jboss-3.2.1_tomcat-4.1.24serverdefaultdeployjbossweb-tomcat.sar下的web.xml和目次:C:jboss-3.2.1_tomcat-4.1.24serverdefaultdeployjbossweb-tomcat.sarMETA-INF下的jboss-service.xml文件来到达方针读者特定需求。好比,假如想将HTTP服务端口改成80,则能够修正jboss-service.xml文件;假如想使方针J2EE使用处置更多的文件范例,能够修正web.xml文件。 (4)相干类库的安排:假如您的使用触及到第三方类库,好比JDBCDriver,则能够将这些JDBCDriver寄存到目次下:C:jboss-3.2.1_tomcat-4.1.24serverdefaultlib。注重,不是目次:C:jboss-3.2.1_tomcat-4.1.24lib下。假如是与方针J2EE使用相干,则能够寄存到方针.war(大概.ear)内里,大概xxx.war目次中的WEB-INFOlib下。不管那种情况,都必要遵守J2EE标准。固然,JBoss3.2.1的设置文件有良多,好比供应邮件服务的mail-service.xml文件,等等。在这里只是给读者一些信息,假如您有相干成绩,都能够试着本文先容的一些内容办理您的成绩。感谢。二,开辟EJB使用假如开辟EJB使用,倡议接纳JBoss作为开辟服务器,由于开辟、调试、部署速率快。假如接纳其他商用服务器,因为完成机理的分歧,其编译的速率很慢。假如接纳EntityBeans手艺,则您必要晓得这么几点。第一,您方针体系的数据源有几个操纵出口,便是否存在EntityBeans以外的体例来操纵数据库。假如有,则必要调治响应<container-name>的<commit-option>提交战略和<locking-policy>战略。好比,JBoss3.2.1接纳的<commit-option>体例有4种:A、B、C、D。固然,假如除EntityBeans会见数据库外,别无它出,接纳A是很明智的。假如有,则必要取决于详细的情形利用<commit-option>体例。同时,<commit-option>体例的选择与<locking-policy>战略有干系。可以接纳<read-only>的EntityBeans或EntityBeansMethods,则只管接纳,如许会削减或打消逝世锁产生的大概性。只管接纳1:n的干系来操纵n方的数据表布局,如许可以进步EJBContainer的效力。个中,本文重点给出EJB事件处置方面的切磋。一样平常情形下,J2EE使用服务器撑持JDBC事件、JTA事件、容器办理事件。同时,最好不要在程序中同时利用上述三种事件范例,好比在JTA事件中嵌套JDBC事件;第二方面,事件要在尽量短的工夫内完成,不要在分歧办法中完成事件的利用。好比,上面给出了回滚JDBC事件的代码示例: publicvoidprocessT(Stringorders){
ContextinitCtx=newInitialContext();
javax.sql.DataSourceds=javax.sql.DataSource)initCtx.lookup("java:comp/env/jdbc/OrdersDB");
java.sql.Connectionconn=ds.getConnection();
try{
conn.setAutoCommit(false);//变动JDBC事件的默许提交体例
orderNo=createOrder(orders);
updateOrderStatus(orderNo,"orderscreated");
conn.commit();//提交JDBC事件
}catch(Exceptione){
try{
conn.rollback();//回滚sJDBC事件
thrownewEJBException("事件回滚:"+e.getMessage());
}catch(SQLExceptionsqle){
thrownewEJBException("呈现SQL操纵毛病:"+sqle.getMessage());
}
}
} (修正自,TransactionsinJ2EE(RedBooks).pdf中的一段Bean办理的JDBC事件) 上面给出了JTA事件代码示例: publicvoidprocessOrder(StringorderMessage){
UserTransactiontransaction=mySessionContext.getUserTransaction();//取得JTA事件
try{
transaction.begin();//入手下手JTA事件
orderNo=sendOrder(orderMessage);
updateOrderStatus(orderNo,"ordersent");
transaction.commit();//提交JTA事件
}catch(Exceptione){
try{
transaction.rollback();//回滚JTA事件
}catch(SystemExceptionse){
se.printStackTrace();
}
thrownewEJBException("事件回滚:"+e.getMessage());
}
} (修正自,TransactionsinJ2EE(RedBooks).pdf中的一段Bean办理的JTA事件)同时,假如SessionBean接纳JTA办理事件,必定不要经由过程JNDI猎取JTA事件,不然了局不可思议;而是接纳相似,“mySessionContext.getUserTransaction()”的办法猎取。最初,可使用容器办理事件(CMT)。在利用CMT过程当中,假如声明让容器完成事件回滚,则方针EJB使用必需抛出体系级非常,不然容器是不会满意事件的ACID。在包javax.ejb的非常类中,除NoSuchEntityException和EJBException属于体系级非常外,其他的非常全体是使用级非常。上述3点内容,值得读者注重。大概有些读者在利用EJBCMT过程当中,老是会碰到本人已将事件声明为“Required”,但就是不克不及够包管事件的ACID。因而,但愿读者注重J2EE使用中事件利用的分歧体例。具体情形,能够参考J2EETutorial一书中的事件处置章节。 别的, 1)在开辟EntityBeans过程当中,可以利用CMP的中央只管不要接纳BMP的体例。假如拟接纳BMP的体例,还不如接纳SessionBean+JDBC,个中能够经由过程JTA把持事件(假如功能成绩不是很主要的话)。
2)可以经由过程容器完成的事件(即,经由过程声明)的中央只管接纳,进步开辟效力,使得您能够加倍专注于营业逻辑自己。
3)只管接纳J2EE标准接纳的各项手艺。假如方针体系必要移植,但利用了良多与JBoss独有的手艺,其移植事情则很贫苦。 三,开辟Web使用一样平常情形下,开辟Web使用最好接纳一些Thirty-Part软件大概Framework。好比,Struts、Log4j、webMethods等等。其上风不言而喻。就今朝而言,Struts的使用基础上成了开辟Web使用的尺度。行将推出来的JSF很好的完成了与Struts的增补和集成。同时,JSF也将给疾速开辟JSPWeb前端使用带来反动。别的,Struts也恰好增进了JSF的开展。开辟JBoss3.2.1下的Web使用的历程和其他使用服务器下都差未几。同时,JBuilder8、9都已撑持Struts1.1。假如读者必要JBoss3.2.1下,分离Struts、EJB、JSP、Servlet、JavaBean相干实例的文章,能够给我提些倡议。 四,总结经由过程本文,将开辟J2EE使用相干的几个基础成绩做了开端的切磋。开辟J2EE使用触及到的成绩是一个体系工程成绩,也不是几篇文章、几本书可以回覆分明的,良多内容必要人人在理论中探索、进修,往前进。感谢人人。接待人人给我来信,配合切磋J2EE相干开辟、使用成绩。
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。 |
|