我想知道是否有人可以建议:我有一个场景,由Quartz运行的预定作业将每小时更新一个对象的arraylist.
但我需要这些对象的arraylist对Tomcat创建的所有会话都是可见的.所以我想的是我每隔一小时从运行的Quartz作业中的某个地方写这个对象,这样每个会话都可以访问它.
任何人都可以说这可能会达到最佳效果吗?我想知道从Quartz作业写入servlet上下文的对象?另一种方法是让每个会话从数据库表中填充对象的arraylist.
谢谢
摩根先生.
我曾经围绕贫血领域模型设计我的应用程序,因此我有许多存储库对象,这些对象被注入到大的,胖的,事务感知服务层.此模式称为事务脚本.它不是一个好的做法,因为它导致了程序代码,所以我想继续前进到域驱动设计.
在网上阅读了几篇文章后,听了Chris Richardson关于Parleys的演讲并阅读了POJO in Action的DDD章节,我想我已经了解了全局.
问题是,我不知道,如何在我的应用程序中组织事务.Chis Richardson在他的书中指出:
表示层通过直接或间接通过façade调用域模型来处理来自用户浏览器的HTTP请求,正如我在前一章中描述的那样,它是POJO或EJB.
好到目前为止,但InfoQ上的Srini Penchikala 文章指出:
一些开发人员更喜欢在DAO类中管理事务,这是一个糟糕的设计.这导致过于细粒度的事务控制,这不能提供管理事务跨越多个域对象的用例的灵活性.服务类应该处理事务; 这种方式即使事务跨越多个域对象,服务类也可以管理事务,因为在大多数用例中,Service类处理控制流.
好的,所以如果我理解正确的话,存储库类不应该是事务性的,服务层(现在更薄)是事务性的(因为它曾经是在事务脚本模式中).但是如果域对象直接被表示层调用呢?这是否意味着我的域对象应该具有事务行为?以及如何在Spring或EJB环境中实现它?
这对我来说似乎有些奇怪,所以如果有人澄清这一点,我会很高兴.谢谢.
我正在配置我的hibernate项目以使用二级缓存提供程序,以便我可以利用查询缓存.
我在ehcache中添加了一个依赖项:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我认为我想要使用的提供程序类是:
net.sf.ehcache.hibernateEhCacheProvider
Run Code Online (Sandbox Code Playgroud)
当我在eclipse中查看引用的库时,我会看到@Deprecated注释EhCacheProvider,同时也会看到注释SingletonEhCacheProvider.是什么赋予了?我可以使用最新的替代供应商吗?
我正在使用hibernate版本3.4.0.GA,以防万一.
如何使用Tomcat启用静态内容(images,css,js)的浏览器缓存?优选的解决方案是editingspring MVC配置文件或web.xml
当我尝试使用JPA/hibernate持久化一个名为"user"的实体时,它不起作用.该表未创建,因为user是postgresql中的保留字.除了命名表之外还有什么方法可以使其工作吗?
众所周知,TDD意味着"首先编写测试,然后编写代码".当谈到单元测试时,这很好,因为你在"单元"内是有限的.
然而,当涉及到UI时,事先编写功能测试对我来说意义不大(对我而言).这是因为功能测试必须验证(可能很长的)一组功能要求.这通常可以跨越多个屏幕(页面),前提条件如"登录","最近插入记录"等.
在需要进行全功能测试以确定成功或失败的情况下,测试驱动开发很难使用.这些示例包括用户界面,使用数据库的程序以及一些依赖于特定网络配置的程序.
(当然,维基百科不是"权威",但这听起来很合乎逻辑.)
所以,任何想法,或更好的体验,功能测试 - 首先是UI,然后是代码.它有用吗?它是"疼痛"吗?
我在Glassfish v3应用服务器上使用EJB和JPA.我有一个实体类,我强迫其中一个字段与@Column注释是唯一的.
@Entity
public class MyEntity implements Serializable {
private String uniqueName;
public MyEntity() {
}
@Column(unique = true, nullable = false)
public String getUniqueName() {
return uniqueName;
}
public void setUniqueName(String uniqueName) {
this.uniqueName = uniqueName;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将此字段设置为非唯一值的对象持久化时,当EJB容器管理的事务提交时,我得到一个异常(如预期的那样).
我有两个问题需要解决:
1)我得到的例外是无用的"javax.ejb.EJBException:Transaction aborted".如果我递归调用getCause()足够多次,我最终会得到更有用的"java.sql.SQLIntegrityConstraintViolationException",但是这个异常是EclipseLink实现的一部分,我真的不习惯依赖它的存在.
有没有更好的方法来获取JPA的详细错误信息?
2)EJB容器坚持记录此错误,即使我抓住它并处理它.
有没有更好的方法来处理这个错误,这将阻止Glassfish使用无用的异常信息混乱我的日志?
谢谢.
应该很容易:
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor" />
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
但这样就不会调用拦截器.
我希望这段代码能够显示true:
int[] array = {1, 2};
System.out.println(Arrays.asList(array).contains(1));
Run Code Online (Sandbox Code Playgroud) 假设我有一个应用程序必须缩短URL,但也做其他事情.(喜欢google.com和goo.gl,或者facebook.com和fb.me).
简单地部署两个应用程序很容易,但(现在)只需一个就可以了.使用弹簧和弹簧mvc.我有以下映射:
@RequestMapping(value="/{shortUrlKey}", headers="Host=foo.br")
...
@RequestMapping(value="/{username}")
Run Code Online (Sandbox Code Playgroud)
唉,headers注释不是提供更具体的信息,而是提供限制.所以,如果我有这两个,只有后者被调用,即使我打开它http://foo.br/asdf.如果只留下前者,它适用于来自的人foo.br,如果主人不同,则不会打开任何东西.
所以,问题:
如果有一些可插拔的方法解决机制,也许两者都可以工作.有这样的吗?
java ×7
spring ×4
spring-mvc ×3
caching ×2
hibernate ×2
jpa ×2
arrays ×1
collections ×1
database ×1
ehcache ×1
ejb-3.0 ×1
java-ee ×1
oop ×1
postgresql ×1
servlets ×1
tdd ×1
terracotta ×1
tomcat ×1
unit-testing ×1