打印

在resin-ee-2.1.5上构建j2ee应用服务

在resin-ee-2.1.5上构建j2ee应用服务

在resin-ee-2.1.5上构建j2ee应用服务
(100101)北京信息工程学院 蔡君 www.justhis.com

----如果要转载请注明来处和作者


一、所需软件
1.JDK
因为resin自己不带j2sdk,所以必须在安装resin之前要安装j2sdk,这样的话,我们可以使用任何版本的j2sdk, 与有些AppServer相比较,省去了千方百计修改jdk的苦恼。
Sun公司相关下载连接
http://java.sun.com/j2se/downloads.html

2.resin-ee
caucho公司的resin虽然现在没有多少人知晓,但是他的调试能力,他的执行速度实在让人惊叹,caucho 公司的resin对JSP、servlet的解析能力更是略胜一筹,国内许多大型网站都采用了resin的服务器(尽管许多 开发人员并未使用),象:http://www.163.com http://www.chinaren.com http://www.justhis.com.
resin-ee经过几次修订之后,已经越来越稳定了,他的CMP(容器管理)更是显示出强大的威力,可配置性、即使更新的功能更是让人瞠目结舌。
caucho相关下载
http://www.caucho.com/download/

PS:本人系统环境为win2kServerSP3+j2sdk1.4+resin-ee-2.1.5

二、构建环境
1、在Resin的目录下发布
在resin.conf中查找<web-app>标签,该标签表示一个web应用。
标签中,id属性表示该应用的Web路径。如<web-app id=’/test’>,表示该应用在Web上访问的时候应该用http://hostname/test/来访问。app-dir属性表示该应用的实际路径。如<app-dir>d: esindoc est</app-dir>表示该应用在d: esindoc est目录下面。默认值为根下面的和id同名的目录。Resin可以配置3种error-page:404错误也就是文件找不到错误页;Exception违例页;不能连接java引擎页。他们分别可以这样子设置
404文件找不到页
<web-app id=´/app1´>
<error-page error-code=´404´ location=´/file_not_found.jsp´/>
</web-app>
Exception 违例页
<web-app id=´/foo´>
<error-page exception-type=´java.lang.NullPointerException´
location=´/nullpointer.jsp´/>
</web-app>
不能连接到srun Servlet引擎错误页
该页设置和应用无关,属于服务器的设置。
<http-server>
<error-page exception-type=´connection´
location=´/missing_file.html´/>
</http-server>
classpath的设置
参见下面的语句:
<classpath id=´WEB-INF/classes´ source=´WEB-INF/src´ compile=´true´/>
id参数的值表示classpath中编译后的classpath的存放路径;source参数的值表示classpath中java源代码的存放路径;compile中的值可能是true或者false,表示是否由Resin的srun自动编译java源代码。Classpath的设置一般和javaBean或者Servlet的使用有关。id的值表示javaBean的编译好的包存放的根,source的值表示javaBean的java源代码存放的根。Servlet相同。
Servlet的设置
参见下面的语句:
<servlet-mapping url-pattern=´*.xtp´ servlet-name=´xtp´/>
<servlet-mapping url-pattern=´*.jsp´ servlet-name=´jsp´/>
<servlet-mapping url-pattern=´/servlet/*´ servlet-name=´invoker´/>
一般就是指定那些需要通过srun的解析。比如在这里,把*.jsp改成*.jss,其他不变,那么只要在访问时遇到*.jss的文件就和原来遇到*.jsp一样处理。通过这个可以指定解析的引擎,如以下的配置:
<servlet-mapping url-pattern=´*.xtp´ servlet-name=´com.caucho.jsp.XtpServlet´/>
在Servlet中,也可以指定servlet。如
<servlet servlet-name=´hello´ servlet-class=´test.HelloWorld´/>
<servlet-mapping url-pattern=´/hello.html´ servlet-name=´hello´/>
在servlet-mapping中有个重要的参数case-sensitive 如果在windows上,最好配置成false,忽略大小写,从而和windows的约定一致。
Session的配置
参见如下的配置语句:
<session-config>
<session-max>4096</session-max>
<session-timeout>30</session-timeout>
<enable-cookies>true</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
<file-store>WEB-INF/sessions</file-store>
</session-config>
session-max :最大 session数量
session-timeout :session过期时间,以分钟为单位。
是否允许cookie :指session是否采用cookies。如果采用cookies,浏览器必须支持session才能使用,发布时建议改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,enable-url-rewriting应该设成true比较合适。
file-store :该配置指示服务器是否把session作为文件存放在服务器上。如果把该项注释掉,则在你的web-app目录下的WEB-Inf/sessions目录不保存序列化后的session对象。Session还有jdbc-store配置,对应着把session通过jdbc永久保存在数据库中。其实也就是会话变量的序列化后的保存和重新载入的物理实现。在这里session还支持了多服务器的设置问题,
通过tcp-store参数设置。由于涉及到负载平衡的问题,在这里不详细叙述,只简单写一个例子:
<http-server>
<http id=´a´ port=´80´/>
<srun id=´a´ host=´host-a´ port=´6802´/>
<http id=´b´ port=´80´/>
<srun id=´b´ host=´host-b´ port=´6802´/>
<host id=´´>
<web-app id=´´>
<session-config>
<tcp-store/>
<always-load-session/>
</session-config>
</web-app>
</host>
</http-server>
这个例子表示session是按照tcp ring的方式传递。
temp-dir 的设置
temp-dir指的是应用的临时目录。也就是在javax.servlet.context.tempdir中用到的目录。模认是应用目录下的WEB-INF mp目录。
以上的设置都可以在<web-app>标签对中设置,控制某个web应用的设置。
2、打包成War发布
以下是介绍对如何在resin下使用已经打包成War的java Web应用进行发布。
其实这个是最简单也是最清晰的良好方法。在j2ee中,所有的项目都打包成ear发布。其中,Web应用打包成war,ejb应用打包成jar。在resin中,这些都可以直接部署。这里我只对打包成war的Web应用的部署做介绍。
在resin.conf中,查找这个:<war-dir id=´webapps´/>。他表示war文件应该被拷贝的路径。这里指的是相对于resin的安装路径,如以上的设置表示d: esinwebapps。只要重新启动Resin就可以了。Resin会把该war自动解包到webapps目录下。你可以在command控制台或者stdout.log中看到类似于
[2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的语句。这个表示该Web应用是自动安装的。只要这个应用是符合j2ee标准的Web应用,应该不会有问题。通过如上显示的路径就可以访问到这个应用。如果你到d: esinwebapps wtest中浏览,你会看到Resin已经为你生成了rwtest目录,下面是META-INF和WEB-INF还有你自己的JSPservlet 文件和目录。是完全符合j2ee的结构的。你可以在rwtest目录下建立新的jspservlet,一样可以被编译和解析并运行的。在实际操作中,可以使用Jbuilder 或者 WebSphere等Ide工具进行集成调试和打包,非常的方便。
3、打包成Ear发布
一个ear的发布带有就j2ee的一些文件,譬如一个jzjweb.ear他包涵有jzjwebEjb.jar和jzjweb.war,部署相当简单,就是把此文件拷贝到web-apps文件夹下面,这个时候您就可以看到resin的控制台显示有一些初始化的一些信息。这个时候可以通过浏览器进行浏览您的基于j2ee的应用服务器的webApplication了,呵呵,岂不很爽?
三、用resin作为AppServer进行开发的相关配置。
看到resin的这么多优点是不是已经迫不及待了?让我们进行深度探险吧。
1. 进行DataSource的配置

打开<resin_home>/confi/resin.conf,您可以看见里面已经有了这么一段
<resource-ref>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.caucho.jdbc.mysql.Driver"/>
<init-param url="jdbc:mysql_caucho://localhost:3306/test"/>
<init-param user="root"/>
<init-param password=""/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>


这些东西我想您一看就知道是什么意思了吧,略作介绍:
<resource-ref> 为资源参引
<res-ref-name>就是资源引用的名字,这个您可要记好了,这是在程序中LookUp的标识哟。
<res-type>就是为引用的类型,在此为DataSource同样也可以为其他的类型。
<ini-param >为初始化的参数
driver-name:为数据库的驱动程序
url: 为数据库的连接URL
user: 为数据库的用户名字
password:为数据库的连接密码
max-connections为数据库的最大连接量
max-idle-time:为最长连接时间

如果我们相配置一个基于oracle的Datasource应该怎么作呢,我不作解释了,只给出相应的代码,我想您肯定能够知道的。^_^
<resource-ref>
<res-ref-name>jzjwebDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="oracle.jdbc.driver.OracleDriver"/>
<init-param url="jdbcracle:thin:@10.1.7.128:1521ra817"/>
<init-param user="ecid"/>
<init-param password="ecid"/>
<init-param max-connections="120"/>
<init-param max-idle-time="30"/>
</resource-ref>
2. 进行web.xml的配置

Web.xml的配置可以说是关键的,不要听我这么一说感觉很难,其实resin自带一个例子cmp里面的配置说明已经相当经典,我们可以很容易的配置我们所需的webApp,其实有的时候在resin.conf里面的配置的东西,同样在web.xml也是适用,为了自动读取.ejb文件,并且观察ejb文件变化,我们先要引用一些资源文件,如下面的一段设置:

<resource-ref>
<res-ref-name>java:comp/env/cmp</res-ref-name>
<class-name>com.caucho.ejb.EJBServer</class-name>
<init-param data-source="java:comp/env/jdbc/test"/>
<!-- sets the JDBC isolation level -->
<init-param jdbc-isolation="serializable"/>
</resource-ref>
此定义中引用一个CMP的引用,其他的引用也是大同小异,如果要是引用remote的Bean,我们可以通过定义下面的Servelet映射,此映射主要是用来调用远程的EJB,如果您使用一个CMP就不必使用下面的映射了,可以将其删掉
<servlet-mapping>
<url-pattern id=´/burlap/*´/>
<servlet-name id=´com.caucho.burlap.EJBServlet´/>
<init-param url-prefix="http://localhost:8080/hello/burlap"/>
</servlet-mapping>

我们还需要定义对于远程jndi的调用URL,这与前面定义的Servelet要对应的,一个例子:
<jndi-link>
<jndi-name>java:comp/env/ejb</jndi-name>
<jndi-factory>com.caucho.burlap.BurlapContextFactory</jndi-factory>
<init-param java.naming.provider.url="http://localhost:8080/hello/burlap"/>
</jndi-link>
此处hello为App的名称,您可以在不同的地方修改。
通过以上的配置我们就可以运行我们的j2ee程序了,在默认的情况下,文件的存放为:
<<web-App>>/--
|-----.jsp
|---web-inf/
| .ejb
|web.xml
|<<classes>>/XXX/XXX/XXX.class
|<<lib>>/.jar

目录结构完全是安j2ee规范的。

四.一个使用resin服务器的Hello程序。

现在一个<<resin_home>>webapps目录下面建立一个目录hello
这个时候您要是通过浏览器浏览http://localhost:8080/hello 此时会在hello目录下面自动创建一个WEB-INF文件夹,然后在WEB-INF/目录下面建立web.xml文件 和 hello-stateless.ejb
在<<resin_home>>webappshelloWEB-INF 目录下面创建两个目录分别为classes , lib
其中classes为您的class的文件,而lib为您的jar文件存放地。程序代码,见附件。




后记:自己花了一个下午地时间把一个oracle+iplanet的j2ee的程序移至resin服务器下面,虽然还有一些问题,但是个人认为,利用resin进行开发再好不过了,不用把大把大把的时间花在重新启动服务器的,resin对于web.xml 和 java class文件改变都会重载应用程序。


GOOK Luck!


在resin-ee-2.1.5上构建j2ee应用服务
(100101)北京信息工程学院 蔡君( 阿菜) www.justhis.com

----如果要转载请注明来处和作者
从明天起,做一个幸福的人
喂马,劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开
陌生人,我也为你祝福
愿你有一个灿烂的前程
愿你有情人终成眷属
愿你在尘世获得幸福
我也愿面朝大海,春暖花开
Work like you don't need the money
love like you've never been hurt
and dance like no one is watching.

TOP

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-9-6 01:24 京ICP证060528 号

Designed By 17DST