我正在使用logback/slf4j来处理我的应用程序中的日志记录.在我开始使用EJB之前,一切都运行良好.一旦我将无状态EJB添加到我的应用程序,记录器就开始忽略我的logback.xml并停止使用我的appender.我切换到编程记录器配置以查看错误,现在当我尝试在EJB中使用我的记录器时,我收到以下错误:
org.slf4j.impl.JDK14LoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
来自这条线:
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
是否需要任何特殊配置才能使回归与EJB一起使用?如果重要的话我将部署在glassfish v3上.
我目前正在为一家运行基于Java Servlets构建的遗留Web应用程序的公司做一些工作(该系统早于JSP,尽管他们现在在构建新页面时使用它们).代码库是一个巨大的乱七八糟的混乱,因为它在过时的框架之上建立了大约10年.它们在代码库中几乎没有一致性(这个应用程序已经由不同的人多年来开发,其中大部分都不再在这里工作),没有DRY的概念(每个页面基本上都是从头开始创建的)很多不可读/含糊不清代码和一般非常不一致的基础架构.
正如我一直在这里工作,我一直在添加现代功能/尝试清理代码库一点点.我在我暴露的地方添加了一些jQuery,通过输入验证引入了一些安全性,清理了一些模块以采用不引人注目的JavaScript原则等.我的工作是在新模块上,所以我没有暴露很多旧的逻辑.我试图在他们当前的基础设施下为我的所有工作引入最佳实践,但我不得不调用他们的旧代码来使我的东西保持一致.
他们已经达到了他们正在考虑对系统进行大规模更新的程度.他们希望提高代码库的可维护性,并尝试转向某种现代框架/ MVC类型的应用程序.许多系统早于XHTML,内联样式标记,javascript:function()调用,没有单元测试,早于Hibernate等.有一些out.println html生成和从Servlet中调用jsp.
他们一直在关注的一些应用程序包括Wicket,Struts,Tapestry和Grails.问题是,转向其中任何一个可能需要对已经在使用的系统进行大量重写,并且他们无法重新开始.
我的问题是:在保留现有业务逻辑的同时,将这样的遗留代码库迁移到更现代的框架的最佳方法是什么(在重写经过测试和工作的东西时没有意义).
正在考虑的一些想法包括:
编写一个可与当前基础架构配合使用的内部模板系统(以一致的方式生成页面)
端口代码到一个框架,如tapestry(重用他们的旧代码)
使用现代框架从头开始重写系统,但从旧系统复制逻辑(如果可能)
保持旧系统不变,只需更新前端页面,使其更具现代感(可能最好给出时间/金钱等)
什么是将旧Java Servlet代码更新到现代框架(使用现代实践以便于维护,单元测试,DRY)同时保持逻辑完整的最佳方法?
欢迎任何见解.
我正在使用Hibernate 3.6.9final和Glassfish 3.1.1.
当我开始我的申请,我得到以下警告:"Hibernate不支持SequenceGenerator.initialValue()
,除非hibernate.id.new_generator_mappings
".
根据文档,我可以通过启用/禁用该hibernate.id.new_generator_mappings
值来打开/关闭对新序列生成器的支持.我在我persistence.xml
的属性中设置了以下选项:
<property name="hibernate.id.new_generator_mappings" value="true"/>
Run Code Online (Sandbox Code Playgroud)
这似乎完全被忽略了,我仍然得到了警告.这是一个无法在persistence.xml中设置的设置吗?我没有在应用程序中使用AnnotationConfiguration,也没有a hibernate.cfg.xml
或者hbm.xml
.
建议?
我正在构建一个数据库系统,并且我的一个表的设计有问题.
在该系统中,有一个用户表,一个对象表,一个项表和一个成本表.
成本表中的唯一记录由用户,对象,项目和年份确定.但是,如果项目不同,则可能有多个记录具有相同的年份.
层次结构为user-> object-> item-> year,每个项目有多个唯一年份,每个对象有多个唯一项目,每个用户有多个唯一对象,多个唯一用户.
设计成本表的最佳方法是什么?
我想将userid,objectid和itemid包含为外键,然后使用由userid,objecid,itemid和costyear组成的复合键.我听说复合键是糟糕的设计,但我不确定如何构建它以摆脱使用复合键.你可以告诉我的数据库建设技巧有点生疏.
谢谢!
PS如果重要,这是一个interbase数据库.
我想在CDI/JSF2应用程序中使用RESTful服务.我对JAX-RS不是很熟悉,但是我已经读过它的生命周期与CDI/JSF2不兼容.是否可以将JAX-RS与CDI/JSF2合并到JEE6堆栈中?如果没有替代品?
谢谢
我正在研究为应用程序编写Web服务.在此应用程序中,我们在事务中执行所有操作,因为"工作单元"通常不是单个实体,而是跨多个表的多个实体.在某些情况下,我们想要"全有或全无",交易也很有意义.我不确定如何在网络服务中这样做,也不是我应该这样做.
我觉得Web服务应该是无状态的,提供的API应该建立在每个实体的基础上,但我不确定如何处理一部分失败的"工作单元",应该发生回滚.
Web服务应该是事务性的吗?您将如何实现交易,是否会发送"开始交易"并以"结束交易"结束?
如果网络服务是无国籍的,你如何处理非独立的"工作单位"?关于这个话题,我是否有任何权威文献?
谢谢,
这是一个由两部分组成的问题:
首先,我很想知道从集合中删除重复元素的最佳方法是什么.到目前为止我一直在做的方法是简单地将集合转换为集合.我知道套装不能有重复元素所以它只是为我处理它.
这是一个有效的解决方案?循环和删除重复会更好/更惯用/更快吗?有关系吗?
我的第二个(相关)问题是:将数组转换为Set的最佳方法是什么?假设一个数组arr我一直这样做的方法如下:
Set x = new HashSet(Arrays.asList(arr));
这会将数组转换为列表,然后转换为集合.似乎有点迂回.与双转换方式相比,是否有更好/更惯用/更有效的方法?
谢谢!
我想在我的程序中进行条件编译.我知道如果你声明一个public static final boolean,编译器将忽略未遍历的分支.在构建程序之前,是否可以让ant目标更改变量?
例如,如果我有:
final public static boolean windows = false;
我想要两个蚂蚁目标:Windows和Mac.我希望命令
ant windows
将布尔值更改为true,同时
ant mac
保留变量.
谢谢.