[求助]有关roller部署到eclipse中的问题

Bing 2010-04-06 09:59:47
最近几天一直想看下roller,我从网上下载了roller的源码,按照网上的方法但是不成功,哪位大虾把roller在eclipse上编译后放到tomcat成功过!

①把roller-src/apps/weblogger/src/java目录下的org整 个目录的源文件复制到项目中的src里面;
②向lib中添加jar文 件。二种方法,可以从roller-src中的tools目录中逐个目录地把所有的jar文件拷贝出来,为了简单起见,还是从它的发布程序中直接拿更方便,从roller-bin中的WEB-INF/lib下面的所有jar都复制出来,放到我们的项目中的lib中去;
③ roller默 认是使用MySQL数据库,但是lib里面缺少MySQL的JDBC驱动,所以还要自己从网上下载驱动的jar,添加到WEB-INF/lib中,如果你是使用的其它数据库,同样需要手动下载它对应的驱动程序;
④从roller-bin中复制除了WEB-INF目录以外的所有文件,粘贴到我们项目中的WebRoot下面, 这些是页面文件和一些资源文件;
⑤复制roller-bin中的WEB-INF目 录下除了classes外的所有文件到我们项目中的WEB-INF目录下,覆盖掉默认的web.xml,你还可以发现它的一些jsp文件是放在WEB-INF下面的,起到很好的保护作用,roller是基于struts2开发的;
⑥从roller-bin中的WEB-INF/classes目录中,复制除了org目录外的所有文件,到我们项目中的src里面,这些是系统的配 置文件,包括了国际化资源、struts配置、log配置、数据库脚本等等。
⑦ roller还 用到了邮件功能,需要把activation.jar,mail.jar二个j2ee的jar复制到tomcat的common/lib目录下,如果没有这一步,可能启动初始化会失败!导致应用无法正常运行。

修改部分内容
①在我们项目的src中新建一个名称为roller-custom.properties的文件,roller采 用这个扩展配置现覆盖系统的默认配置。网上有些说要把这个文件放到tomcat的common/classes中,其实不用的,只要放在classpath中能找到就行了,所以我们把它放在我们的src目录下面,方便修改,在该文件中添加如下内容:
installation.type=auto
database.configurationType=jdbc
database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8
database.jdbc.username=scott
database.jdbc.password=tiger
mail.configurationType=properties
mail.hostname=smtp-server.example.com
mail.username=scott
mail.password=tiger
注意database.jdbc.connectionURL这个配置后面需要带上上面编码的参数,不然安装的过程可能会出现一些乱码。修改url和username,password这些,如果你有能正常使用的邮箱服务器,也填上。

②创建MySQL数据库,名称为rollerdb,并指定编码为UTF-8。如果你使用的是root用户,则不用授权,如果不是,则需要 为用户授权,下面是一个示例:


启动roller的 时候它会查询数据库是否已经初始完成,如果没有,它会自动进入安装页面,引导用户进行安装,做得非常人性化。
③修改部分源代 码。org.apache.roller.weblogger包里面的pojos包是有问题的!刚开始的时候老是无法启动,报错提示的是JPA的一个异常,根本不知道如何解决,后来在CSDN上找到一篇文章,说是pojos这个包的源码有问题,可能跟发布包中的版本不一致,所以需要用变态一点的处理办法。


在我们的项目WEB-INF/lib中,找到roller-business.jar和roller-web.jar(如上图所示),这二个jar其实就是我们src中的所有java文 件的编译打包,为了不重复,先把roller-web.jar删除掉,然 后用winrar打开roller-business.jar,删除pojos以 外的其它四个包和那个WebloggerException.class。 这样,其它代码可以正常编译!

——————————————————————————————————————————————————————
我按照了上面的方法在eclipse中部署了roller可惜的是查看tomcat日志文件发现错误,找了好久还是找不到原因,求各位大侠们帮忙:
ERROR 2010-04-06 09:40:23,812 JPAPersistenceStrategy:<init> - ERROR: creating entity manager
javax.persistence.PersistenceException: Provider error. Provider: org.apache.openjpa.persistence.PersistenceProviderImpl
at javax.persistence.Persistence.createFactory(Persistence.java:175)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:111)
at org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy.<init>(JPAPersistenceStrategy.java:123)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.google.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:46)
at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:142)
at com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006)
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:37)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:756)
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:35)
at com.google.inject.Scopes$1$1.get(Scopes.java:53)
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.BindingBuilderImpl$ImplicitImplementation.get(BindingBuilderImpl.java:334)
at com.google.inject.InjectorImpl$SingleParameterInjector.inject(InjectorImpl.java:640)
at com.google.inject.InjectorImpl.getParameters(InjectorImpl.java:666)
at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:140)
at com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006)
at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:37)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:756)
at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:35)
at com.google.inject.Scopes$1$1.get(Scopes.java:53)
at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.BindingBuilderImpl$FactoryProxy.get(BindingBuilderImpl.java:299)
at com.google.inject.InjectorImpl$9$1.call(InjectorImpl.java:708)
at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:747)
at com.google.inject.InjectorImpl$9.get(InjectorImpl.java:702)
at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:728)
at org.apache.roller.weblogger.business.GuiceWebloggerProvider.bootstrap(GuiceWebloggerProvider.java:87)
at org.apache.roller.weblogger.business.WebloggerFactory.bootstrap(WebloggerFactory.java:134)
at org.apache.roller.weblogger.business.WebloggerFactory.bootstrap(WebloggerFactory.java:99)
at org.apache.roller.weblogger.ui.core.RollerContext.contextInitialized(RollerContext.java:156)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: <0.9.7-incubating nonfatal general error> org.apache.openjpa.util.GeneralException: org.xml.sax.SAXNotRecognizedException: http://java.sun.com/xml/jaxp/properties/schemaLanguage
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:376)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:315)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:292)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:266)
at org.apache.openjpa.persistence.PersistenceProductDerivation$ConfigurationParser.parse(PersistenceProductDerivation.java:440)
at org.apache.openjpa.persistence.PersistenceProductDerivation.parseResources(PersistenceProductDerivation.java:291)
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:258)
at org.apache.openjpa.persistence.PersistenceProductDerivation.load(PersistenceProductDerivation.java:156)
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:70)
at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:82)
at javax.persistence.Persistence.createFactory(Persistence.java:171)
... 57 more
...全文
78 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bing 2010-04-06
  • 打赏
  • 举报
回复
定位了抛出错误的代码行,
try {
this.emf = Persistence.createEntityManagerFactory("RollerPU", emfProps);

} catch (PersistenceException pe) {
logger.error("ERROR: creating entity manager", pe);
throw new WebloggerException(pe);
}

Persistence.createEntityManagerFactory("RollerPU", emfProps);这行抛出的异常!
Roller4.0的另外一套cas简单解决方案. 最近在使用roller4.0和cas的单点登录集成.间碰到了很多很多的问题.也许我碰到的问题都是属于自己的技术不成熟,能力不够引起的.但是我想应该还是有很多人和我是差不多的吧.我把自己碰到的问题和解决方案写出来和大家探讨一下.毕竟网上关于roller4的资料少之又少.对于cas的单点集成就更是少的可怜.我试验了一下roller自带的security.xml配置的cas方案.简直报错的夸张.根本没发用.roller使用的是acegi的用户验证框架.我自己下了一套acegi配置了一下.成功了.同样的方法放到roller里面就挂掉了..(无语….)所以只好另找方法. 注:下文所说的如图均在该文所附带的下载包有相应的word说明. 1.搭建roller的myeclipse环境. 首先搭建roller环境.老实讲.我一直觉得roller的源码下下来有问题.从官网下载下来后的源码会少一些文件.并且里面还有一些文件有错.是不能直接发布在eclipse的.但是下面的方法是需要介入到源码的.没有办法.只好采用一些bt的办法了. 首先.我们需要下载roller的源码以及它发布好了的代码. apache-roller-4.0.zip apache-roller-src-4.0.zip 在eclipse新建web项目.比如我新建的web项目为: 说明一下.下载下来的源码是少了一些配置文件的.而且源码里面的pojos包里面的源码是有问题的.这也就是不能发布的主要原因.不过我们做cas集成.不需要改原来的表结构.所以我们可以使用它已经发布了的jar的pojos包下的类.做法如下: 将apache-roller-src-4.0\apache-roller-src-4.0\apps\weblogger\src\java目录下面的org目录全部copy到自建项目的src目录下面. 然后打开官方提供的可以直接部署的那套发布包(不是源码了哦.!) 将apache-roller-4.0\apache-roller-4.0\webapp\roller\WEB-INF\classes目录下面的除了org目录外的所有文件都copy到自建项目的src目录. 删除自建项目: org\apache\roller\weblogger目录下面的pojos目录及该目录下的所有代码. 因为我们还是需要pojos目录的代码的.所以要从其他的地方取. 打开官方发布可以直接部署的代码里面的jar,路径为: apache-roller-4.0\webapp\roller\WEB-INF\lib下面的roller-business.jar用winrar打开. 如图: roller-business.jar,进入到jar里面的roller-business.jar\org\apache\roller\weblogger目录.删除该目录除了pojos目录的其他四个目录以及那个webloggerException类. 配置web目录的内容. 打开官方发布的可直接发布的部署包apache-roller-4.0\apache-roller-4.0\webapp\roller的目录,将该目录下面除了web-inf目录的其他所有文件复制到自建项目的/WebRoot目录下面 自建项目目录结构: (myeclipse建立的web项目应该都有这个目录吧.忽忽.自己看着办吧.) 打开官方发布的可直接发布的部署包apache-roller-4.0\webapp\roller\WEB-INF的目录,复制除了classes目录以外的所有目录到自建项目的WEB-INF目录下面.这里要注意一下.就是lib目录.首先lib目录我们已经修改了roller-business.jar.删除了除了pojos包下的其他所有的类.我们保留这个jar的原因还有就是在roller-business.jar\META-INF目录还有两个配置文件需要用到.索性直接导入这个jar.除此之外.,我们还要删除lib下的roller-web.jar.默认的src目录下的所有java文件在官方发布的时候打成了roller-business.jar和roller-web.jar两个jar.所以多余的那个jar我们还是删掉好了. 然后最终搭建出来的目录结构就是这样的: 然后到目前为止.我们就可以使用这个项目来发布了.其他的配置文件修改.什么数据库修改之类的.各位可以参看一下网络的其他资料.多如牛毛.比如cas的配置等等. 下面我主要说一下我改动的地方. 2.与cas的集成. 记得在这里要导入cas需要的客户端jar.我导入的是yale大学的casclient. 我首先试了一下修改roller自带的security.xml配置文件.报错的离谱.还碰到了其他的灵异问题.最灵异的问题是当我打开security.xml的cas配置属性.发布到tomcat时.会影响其他与其共存的与cas集成的系统.这让我好郁闷.这哪里是系统啊..怎么像病毒啊.会导致我其他访问cas的系统无法在得到从cas返回的用户名验证.晕倒. 我的解决方法是直接更改它的登陆页面链接.和登陆链接. 首先修改security.xml. 修改authenticationProcessingFilterEntryPoint节点为下面: 添加节点: 修改/roller/src/struts.xml文件 ..................剩下的具体看上传的文档和包内的说明以及源码实现

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧