`
dinghy
  • 浏览: 33755 次
  • 性别: Icon_minigender_1
  • 来自: 京广之间
社区版块
存档分类
最新评论

关于Tomcat与GlassFish交替使用的注意事项

阅读更多

      最近改用Birt{Wtp} Eclipse,因为MyEclipse实在是很慢。而GlassFish plugin for Eclipse也还是不能顺利部署.

于是又捡起Tomcat来,去下了6.0.18.配置好数据源.迁移开发环境完毕.

 

       可是遇到了很多问题.现将问题的解决方案一一说明如下,希望后来人少费力气~~

 

      Question1、tomcat 6中的context.xml到底该怎么配.

 

1.确定数据库类型 ---oracle 9i2 数据库驱动 odbc14.jarclass12.jar,放到tomcat6lib----待测试

2.建立相应的dynamicWeb工程----testDataSource,发布到tomcat6server.这时,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在完备程度上还是没法比呀.不过快多了...

      

分享到:
评论
2 楼 dinghy 2008-10-17  
yingwuhahahaha 写道

引用
把javaee.jar改名成servlet-api.jar后,一切正常了... 确实有点变态

哈哈.
后来我仔细比对了差别.发现Tomcat6018的Servlet-api.jar中除了正常javax.servlet.*下的类簇,还包括javax.servlet.Resources里面还存放了Web应用常用的dtd和xsd引用文件.
1 楼 yingwuhahahaha 2008-10-15  
引用
把javaee.jar改名成servlet-api.jar后,一切正常了...


确实有点变态

相关推荐

Global site tag (gtag.js) - Google Analytics