小编Boz*_*zho的帖子

如何在Java servlet上下文中获取和设置全局对象

我想知道是否有人可以建议:我有一个场景,由Quartz运行的预定作业将每小时更新一个对象的arraylist.

但我需要这些对象的arraylist对Tomcat创建的所有会话都是可见的.所以我想的是我每隔一小时从运行的Quartz作业中的某个地方写这个对象,这样每个会话都可以访问它.

任何人都可以说这可能会达到最佳效果吗?我想知道从Quartz作业写入servlet上下文的对象?另一种方法是让每个会话从数据库表中填充对象的arraylist.

谢谢

摩根先生.

java servlets quartz-scheduler

20
推荐指数
1
解决办法
4万
查看次数

Spring环境中的域驱动设计和事务

我曾经围绕贫血领域模型设计我的应用程序,因此我有许多存储库对象,这些对象被注入到大的,胖的,事务感知服务层.此模式称为事务脚本.它不是一个好的做法,因为它导致了程序代码,所以我想继续前进到域驱动设计.

在网上阅读了几篇文章后,听了Chris Richardson关于Parleys的演讲并阅读了POJO in Action的DDD章节,我想我已经了解了全局.

问题是,我不知道,如何在我的应用程序中组织事务.Chis Richardson在他的书中指出:

表示层通过直接或间接通过façade调用域模型来处理来自用户浏览器的HTTP请求,正如我在前一章中描述的那样,它是POJO或EJB.

好到目前为止,但InfoQ上的Srini Penchikala 文章指出:

一些开发人员更喜欢在DAO类中管理事务,这是一个糟糕的设计.这导致过于细粒度的事务控制,这不能提供管理事务跨越多个域对象的用例的灵活性.服务类应该处理事务; 这种方式即使事务跨越多个域对象,服务类也可以管理事务,因为在大多数用例中,Service类处理控制流.

好的,所以如果我理解正确的话,存储库类不应该是事务性的,服务层(现在更薄)是事务性的(因为它曾经是在事务脚本模式中).但是如果域对象直接被表示层调用呢?这是否意味着我的域对象应该具有事务行为?以及如何在Spring或EJB环境中实现它?

这对我来说似乎有些奇怪,所以如果有人澄清这一点,我会很高兴.谢谢.

java oop spring design-patterns domain-driven-design

19
推荐指数
2
解决办法
6391
查看次数

为什么弃用EhCacheProvider?

我正在配置我的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,以防万一.

caching hibernate terracotta ehcache

19
推荐指数
4
解决办法
2万
查看次数

如何使用Tomcat启用静态内容(images,css,js)的浏览器缓存?

如何使用Tomcat启用静态内容(images,css,js)的浏览器缓存?优选的解决方案是editingspring MVC配置文件或web.xml

java spring tomcat caching spring-mvc

19
推荐指数
1
解决办法
1万
查看次数

无法在postgresql hibernate中使用名为"user"的表

当我尝试使用JPA/hibernate持久化一个名为"user"的实体时,它不起作用.该表未创建,因为user是postgresql中的保留字.除了命名表之外还有什么方法可以使其工作吗?

postgresql hibernate jpa

19
推荐指数
5
解决办法
1万
查看次数

用于具有功能测试的用户界面(UI)的测试驱动开发(TDD)

众所周知,TDD意味着"首先编写测试,然后编写代码".当谈到单元测试时,这很好,因为你在"单元"内是有限的.

然而,当涉及到UI时,事先编写功能测试对我来说意义不大(对我而言).这是因为功能测试必须验证(可能很长的)一组功能要求.这通常可以跨越多个屏幕(页面),前提条件如"登录","最近插入记录"等.

根据维基百科:

在需要进行全功能测试以确定成功或失败的情况下,测试驱动开发很难使用.这些示例包括用户界面,使用数据库的程序以及一些依赖于特定网络配置的程序.

(当然,维基百科不是"权威",但这听起来很合乎逻辑.)

所以,任何想法,或更好的体验,功能测试 - 首先是UI,然后是代码.它有用吗?它是"疼痛"吗?

tdd unit-testing functional-testing

19
推荐指数
3
解决办法
1万
查看次数

优雅地处理EJB/JPA环境中的约束违规?

我在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使用无用的异常信息混乱我的日志?

谢谢.

java database jpa java-ee ejb-3.0

18
推荐指数
2
解决办法
2万
查看次数

如何用spring mvc 3.0注册处理程序拦截器?

应该很容易:

<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)

但这样就不会调用拦截器.

java spring spring-mvc

18
推荐指数
4
解决办法
3万
查看次数

如何将int []数组转换为List?

我希望这段代码能够显示true:

int[] array = {1, 2};
System.out.println(Arrays.asList(array).contains(1));
Run Code Online (Sandbox Code Playgroud)

java arrays collections

18
推荐指数
3
解决办法
1万
查看次数

具有spring mvc的多个域

假设我有一个应用程序必须缩短URL,但也做其他事情.(喜欢google.comgoo.gl,或者facebook.comfb.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,如果主人不同,则不会打开任何东西.

所以,问题:

  • 如何为相同的路径创建两个处理程序,但不同的URL /主机
  • 是否可以使用属性占位符配置器动态解析主机(而不是在注释中对其进行硬编码)

如果有一些可插拔的方法解决机制,也许两者都可以工作.有这样的吗?

java spring spring-mvc

18
推荐指数
1
解决办法
6258
查看次数