最近改用Birt{Wtp} Eclipse,因为MyEclipse实在是很慢。而GlassFish plugin for Eclipse也还是不能顺利部署.
于是又捡起Tomcat来,去下了6.0.18.配置好数据源.迁移开发环境完毕.
可是遇到了很多问题.现将问题的解决方案一一说明如下,希望后来人少费力气~~
Question1、tomcat 6中的context.xml到底该怎么配.
1.确定数据库类型 ---oracle 9i2 数据库驱动 odbc14.jar或class12.jar,放到tomcat6的lib中----待测试
2.建立相应的dynamicWeb工程----testDataSource,发布到tomcat6的server上.这时,Eclipse会自动生成相应的server目录在左边Servers文件夹中.如下图.
这时server.xml中最下面Eclipse已经自动添加了一行.
<Context docBase="gzcdcWeb" path="/testDataSource" reloadable="true" source="org.eclipse.jst.jee.server:testDataSource"/>
3.继续在context.xml中本context块下添加如下一个resource元素.定义其中的数据源信息.
<Resource name="jdbc/XXXX" auth="Container" type="javax.sql.DataSource"
maxActive="20" maxIdle="10" maxWait="-1" logAbandoned="true"
username="un" password="pw" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@server:1521:XXXX"/>
Okay.
3.当有多个工程的时候怎么办.在一个context.xml中只能为一个Web工程配置相关信息.
tomcat默认在 ${WebProjectName}/META-INF下配置的context.xml即为该工程的对应context信息
将之前的context.xml放到 ${WebProjectName}/META-INF下即可.删除之前的context.xml中的Resource元素,一切正常.
did not find a matching property 应该是由于META-INF下未发现context.xml引起的.
最后一项未验证;
是否需要更新web.xml中的<resource-ref/>
<resource-ref>
<description>Oracle DataSoure for Tomcat 6.0</description>
<res-ref-name>jdbc/XXXX</res-ref-name>
<res-type>javax.sql.ConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Question 2、jdbc/XXXX 与 java:comp/env/jdbc/XXXX.
这个问题上回说到过,可能GlassFish比较高级,直接jdbc/XXXX就可以取到源了.
Tomcat上就得补上java:comp/env/jdbc/XXXX.
不过应该不是这个主要原因咯.先放着这个问题.我再看看.有没有终极解决方案.
不过像我一样,用tomcat做开发环境,在glassfish上做部署环境的朋友,可以先注意这个临时做法.
改一下Spring中的jndi命名或是应用中涉及jndi命名的地方.
Question 3、不匹配...
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:appName' did not find a matching property.
这个问题未明确.是不是跟Question 1的配置有关系未确定.不过看到警告就头疼.谁知道原因请告诉我.看字面意思是没有找到一个属性 source,从而无法将其赋值为......
Question 4、Struts版本问题
Struts 1从1.3开始把taglib等包就此分离出去了.
Struts 1从1.2开始,抛弃了很多过时的方法.
Struts 2和Struts1基本上不用比较了.
所以除了1和2的大版本,别想什么共存了.也不要随便更新版本.
Question 5、sun.jdbc.rowset.CachedRowset的方法问题.
这个类(CacheRowset)的实现是在Rowset.jar中的.不像很多人说的在JDK 1.5之后就自带了.1.5之后确实在包中有,但是那是一个接口,需要实例化.
真正的这个类实现可以去SpringFramwork上下载一个完整依赖版本,从里面抽出来.
Question 6、javaee.jar或者是j2ee.jar的问题.
一般是把这个jar包放到WEB-INF/lib下,但是运行时,会提示你这个jar不被load,为什么呢,它会告诉你根据什么规范什么规范来着.
但我操作的过程中,出现的问题,比这还要大,引起了更多的思考.
启动WebApp的时候报错如下:比较恐怖
org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationProcessingFilter' defined in file [D:\workspace\eclipse.birt.231\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gzcdcWeb\WEB-INF\classes\ie\appContext-security.xml]: Cannot resolve reference to bean 'authenticationManager' while setting bean property 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in file [D:\workspace\eclipse.birt.231\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gzcdcWeb\WEB-INF\classes\ie\appContext-security.xml]: Cannot resolve reference to bean 'daoAuthenticationProvider' while setting bean property 'providers' with key [0];
.....
这是Spring自初始化去查找bean的问题,通过Debug后发现缺少类 javax.transaction.TransactionManager,一想这不就是javaee.jar中的类嘛.怎么会没有呢.
再细想一下,当然是没有咯...Tomcat6只是一个Web容器,不需要去实现全部JavaEE标准.于是我将javaee.jar放到了${CATALINA_HOME}/lib下...这样肯定能找到类了.于是Spring初始化正常了.
呵呵,还没完呢.
Question 7、Tomcat与JavaEE
访问初始页面,直接报错,一大堆.
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.ServletException: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:275)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
....
这是什么问题呢,分析后知道是加载类版本出现冲突了.但是怎么会冲突呢,后来锁定了doFilter类,
发现${CATALINA_HOME}/lib中自带一个servlet-api.jar,里面正好是javaee.jar中servlet相关的类簇.
于是想当然的认为servlet-api.jar是javaeye.jar的子集.当然确实是子集,不过版本和使用环境有差别.
删掉了Servlet-api.jar后,Tomcat提示无法启动,想了一下.采用了比较变态的招数.
把javaee.jar改名成servlet-api.jar后,一切正常了...
下回再补充birt相关的问题.
Tomcat跟GlassFish在完备程度上还是没法比呀.不过快多了...
分享到:
相关推荐
Sun Microsystems声称,与Apache Tomcat相比,GlassFish应用服务器的Web容器功能更加可扩展、模块化、易于使用且更具适应性,同时还能提供相当的性能表现。此外,GlassFish还支持集群、持久化、消息传递等Tomcat不...
【标题】:“比tomcat更好用的glassfish应用服务器” 【描述】:“比tomcat好用的web容器,可靠速度快” 在IT行业中,选择合适的应用服务器对于任何Web应用程序的高效运行至关重要。Tomcat,作为Apache软件基金会...
2. 高性能:相比Tomcat,GlassFish在处理并发请求和大型应用时表现出更高的性能,特别是在使用EJB和JMS等高级特性时。 3. 扩展性:GlassFish支持集群部署,可以轻松扩展以应对高负载需求,通过Admin Console可以...
"Eclipse 与 GlassFish 3.1.1 配置指南" 概述: 本文档旨在指导读者如何在 Eclipse 中配置 GlassFish 3.1.1,实现连接池配置和 JNDI 配置。同时,也会解决在部署过程中可能出现的异常。 一、GlassFish 3.1.1 简介 ...
相比其他流行的开源应用服务器如Tomcat、Jboss和Resin,GlassFish 2.0 提供了更全面的企业级功能。 **Windows环境下GlassFish 2.0的安装步骤:** 1. **下载GlassFish Server v2.1**:访问官方网址...
手册的描述部分使用了重复的语言来强调其内容,即手册是关于Glassfish集群搭建的具体步骤和技巧。通过提及标签“glassfish”,我们可以知道该手册专注于Oracle Glassfish这一特定的产品。标签用于搜索和分类文档,在...
"mod_jk.so"是Apache HTTP服务器与Tomcat或Glassfish之间通信的动态链接库。Apache通过这个模块与应用服务器建立连接,实现请求的转发。 "commands.txt"可能包含了运行或管理Glassfish集群的命令,例如启动、停止...
`mq-tech-over.pdf`可能是Glassfish消息队列的技术概述,深入解析了其工作原理和技术细节,包括JMS API的使用,消息持久化策略,以及与外部消息系统的集成。 `application-development-guide.pdf`是应用开发指南,...
《Glassfish V2与Apache整合详解》 在IT行业中,服务器的高效运行和灵活配置是提升应用程序性能的关键。本文将详细介绍如何将Java EE应用服务器Glassfish V2与Web服务器Apache进行整合,以实现更强大的服务架构。...
至于压缩包内的文件"GlassFish_Tomcat[1].pdf",GlassFish是一个完整的Java应用服务器,它也支持Servlet和JSP,但与Tomcat不同的是,GlassFish是全功能的应用服务器,提供了EJB(Enterprise JavaBeans)、JMS(Java...
### 注意事项 - 在运行过程中,确保Glassfish所需的Java环境已安装并配置好。 - 确保在启动脚本中指定的域(domain1)已存在。如果没有,需要使用`asadmin create-domain`命令创建。 - 脚本中的命令可能需要根据你...
在使用 GlassFish 时,需要注意一些重要的事项。例如,在创建受管节点时,需要注意 hosts 文件中需要增加所有受管节点的主机名。同时,GlassFish 的密码默认为明文,为了安全性,需要对密码进行加密。可以使用 ...
本文档将指导 readers 通过安装和配置 GlassFish 服务器,并将其与 Eclipse 集成以便进行调试。 一、GlassFish 安装 GlassFish 安装非常简单,只需要下载 GlassFish 安装程序,运行安装程序,然后按照向导的提示...
Tomcat6远程调用GlassFish V2的session bean GlassFish V2 是一个比较完整的ejb3服务器,性能也有了很大的提高,因此最近试用了一下,并通过Tomcat进行了分布式调用。 Session Bean: ...
### GlassFish和Ant安装与配置 #### 一、概述 本文档主要介绍如何在Windows平台上安装和配置GlassFish服务器以及Ant构建工具,并在Eclipse IDE中进行相应的设置,以便能够顺利地开发、构建和部署Java Web应用程序...
本文详细介绍了如何使用Glassfish部署Web应用的过程,包括开发工具的选择、Glassfish的安装与配置以及Web应用的具体部署方法。通过本文的学习,读者应该能够掌握如何有效地在Glassfish环境下部署和管理Web应用。
glassfish-3.1.2-windows比Tomcat好用的服务器
#### 五、其他注意事项 - 在安装过程中,可能会遇到一些错误提示或异常情况,这时候需要根据日志文件中的信息进行排查。 - 如果安装失败或出现未知问题,建议查阅官方文档或寻求社区帮助。 - 为了确保系统的稳定性...