Tag: java ee

JPA + Hibernate + EHCache,出乎意料的行为

我正在尝试将EHCache实现到我的工作原型中,其中我有一个javax.persistence.Entity表示我的数据库上的表(MySQL,mysql-connector-java-5.1.20.jar),它作为XML提供给消费者。 我面临的问题是, 即使EHCache将查询结果存储在内存中 ,Hibernate仍然会从数据库中检索数据。 我正在使用EHCache监视器查看内存中的项目数,并在缓存过期之前直接在数据库上更改数据,以了解是否实际使用了缓存数据。 我一直在寻找这个问题的复制而没有成功,所以也许我错过了一些东西(我只是想进入java世界)。 我的文件 的pom.xml org.hibernate hibernate-validator 4.3.0.Final org.hibernate hibernate-entitymanager 4.1.4.Final org.hibernate hibernate-ehcache 4.1.4.Final net.sf.ehcache ehcache-core 2.5.2 org.terracotta ehcache-probe 1.0.2 实体类 package myPrototype.entities import javax.persistence.Cacheable; import javax.persistence.Entity; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity @Cacheable @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) @Table(name = “Cars”) @XmlRootElement @NamedQueries({ @NamedQuery(name = “Cars.findAll”, query = […]

不能使用来自不同Maven模块的类

需要创建一个由注册模块和主项目组成的多模块maven项目。 问题是不可能使用在不同模块中声明的类。 例如:我在父母的src / main / java目录中有一个ParentClaz在ParentClaz的src / main / java目录中有一个ChildClaz 。 现在,不可能在ChildClaz既不使用ParentClaz也不反之亦然。 该项目的结构如下所示: +– AdminPortal <- parent root +– registration <- child root — pom.xml <- child pom — pom.xml <- parent pom 我的AdminPortal POM: 4.0.0 com.example AdminPortal pom 1.0-SNAPSHOT AdminPortal http://maven.apache.org registration 这是孩子POM: 4.0.0 com.example AdminPortal 1.0-SNAPSHOT com.example.AdminPortal registration 1.0-SNAPSHOT war registration http://maven.apache.org […]

使用本地EJB,在同一个Container但不同的耳朵

我正在试图在同一个Glassfish中使用本地EJB,但不同的耳朵。 但Glassfish无法找到本地EJB或无法使用 我读到了这一点: 根据JavaEE教程,@ Local bean的客户端必须在与它访问的企业bean相同的JVM中运行。 在第一只耳朵中 ,我在jar中有本地接口 @Local public interface MyLocalBean { int getNumber(int num3); } 在另一个jar中,我有实现 @Stateless @LocalBean public class MyLocalBeanImpl implements MyLocalBean,Serializable{ public MyLocalBeanImpl() {} public int getNumber(int num3){…… 在第二只耳朵中 ,在同一条Glassfish中 我在jar里面有本地接口 @Local public interface MyLocalBean { int getNumber(int num3); } 在另一个jar子里,我有消费者 @Stateless @LocalBean public class BeanConsumer{ @EJB(name=”MyLocalBeanImpl”) private MyLocalBean beanlocal; 使用@EJB和(name […]

Eclipse如何在应用程序服务器中调试代码?

当我在Eclipse中以调试模式运行服务器时,Eclipse与我的应用程序服务器(JBoss)之间正在进行什么通信? 这是如何运作的?

不再使用EJB 3.0的主要原因?

场景 您已使用EJB版本3开发了一个webapp。 系统已部署,交付并由客户使用。 如果您必须从头开始重写系统,您会再次使用EJB吗? 是的 :不要回答这个问题,而是回答这个问题。 否 :根据您的个人经验,提供不再使用EJB的主要原因。 让答案只包含一个原因。 这将让其他读者投票支持远离EJB 3的首要原因。

泽西LoggingFilter与log4j

我有一个用泽西开发的rest服务,我有一个ContainerRequestFilters用于打印请求,如下所示: com.sun.jersey.spi.container.ContainerRequestFilters com.sun.jersey.api.container.filter.LoggingFilter 我使用log4j在post方法中记录了。 但LoggingFilter在日志中打印的log4j不同。 LogginFilter有没有办法使用log4j的配置? 我在log4j.xml文件中尝试过这个: 但它不起作用:(

从EJB无状态会话bean调用CDI会话范围的生产者方法

我想在所有层(即Web层,EJB层)上使用@Inject @Current User注入当前用户。 为了做到这一点,我有以下CDI Producer方法: @Named @SessionScoped public class UserController { @Resource SessionContext sessionContext; @EJB UserDao userDao; @Produces @Current public User getCurrentUser() { String username = sessionContext.getCallerPrincipal().getName(); User user = userDao.findByUsername(username); } } @Qualifier @Target({TYPE, METHOD, PARAMETER, FIELD}) @Retention(RUNTIME) public @interface Current{} 现在,我想将当前用户注入EJB无状态会话bean,如下所示: @Stateless public class SomeBackendService { @Inject @Current private User user; } 我的问题:当前用户对象是否总是在会话更改后重新注入,因为无状态会话bean的依赖关系通常在创建时注入一次,并且bean可能被池化并在不同的会话中使用?

在hibernate批量更新后,清除会话,刷新,刷新?

我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体。 所以我可以调用session.refresh来加载对我的会话实体的修改。 我们经常调用flush来将修改发送到DB,但是文档说它“同步”会话和db … 这是否意味着flush能够为我的会话实体设置好的新db值? 或者flush会最终删除存储在实体中的旧数据库的新数据库值? (顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是“好的价值”?)。 如果我不能在这种情况下使用flush,那么在每次批量更新后清除会话是一个好习惯,这样我们肯定会在会话中有好的值?

没有调用Spring单例bean的@PreDestroy方法

我在beans.xml定义了一个Spring bean,如下所示: […] bean内部有两个方法,必须在Web应用程序的开始和结束之前执行: public class BackendBean implements IBackend { private static final Logger LOGGER = LoggerFactory .getLogger(BackendBean.class); @PostConstruct public void init() { LOGGER.debug(“init”); } @PreDestroy public void destroy() { LOGGER.debug(“destroy”); } } 当我运行服务器( mvn jetty:run )时,我可以在控制台中看到init方法的输出,从中我得出结论是执行了init方法。 当我按下Ctrl-C并且Jetty开始关闭时,我看不到destroy方法的输出。 当应用程序终止时,为了执行destroy方法,我应该更改什么?

JMS – 消息选择器如何与多个队列和主题使用者一起工作?

假设您有一个JMS队列,并且多个消费者正在查看队列中的消息。 您希望其中一个消费者获得所有特定类型的消息,因此您决定使用消息选择器。 例如,您可以在名为targetConsumer JMS消息头中定义一个属性。 您应用于称为A的消费者的消息选择器类似于WHERE targetConsumer = ‘CONSUMER_A’ 。 很明显,消费者A现在只是抓住具有属性集的消息,就像在示例中一样。 但是,其他消费者是否会意识到这一点? IOW,如果它在消费者A之前查看队列,那么另一个不受消息选择器约束的消费者会抓住CONSUMER_A消息吗? 我是否需要将消息选择器(例如, WHERE targetConsumer ‘CONSUMER_A’应用于其他人? 我现在正在RTFMing并收集经验数据,但希望有人可能知道他们的头脑。