我有一个不断增长的Web应用程序,现在需要能够存储用户和系统首选项/设置.在过去,我总是推出自己的网络应用程序偏好系统,但我想知道其他人做了什么来解决这个问题?是否有人们可以推荐的Web应用程序的首选项库?
理想情况下,用户首选项应具有默认值,然后用户可以覆盖该默认值.并非所有首选项都应该向用户公开,因为有些首选项将用于对话框的最后位置.
如果我使用roll-my-own路由,我认为它将是一个单独的首选项表,所有首选项都存储为字符串,根据需要转换为真实的原始数据类型.例如,类似于key,user_key,setting_name,setting_value的表.我喜欢这种方法来处理每种数据类型的列,因为它会阻止设置意外地以两个值结束,并且设置的使用者应该知道他们想要什么样的数据类型.
我正处于需要在运行时确定EntityManager的单元名称的情况.
例如,我想做这样的事情:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
但是,注释不可能实现这一点.
当你不确定单元名称是什么直到运行时,是否可以创建EntityManager?
我正在开发一个部署在glassfish上的Java EE 6应用程序,我一直在阅读有关如何发送电子邮件的教程,但它们似乎已经过时或过于复杂.我希望可能在这个规范中有一种相当简单的发送邮件的方式,因为很多东西变得如此简单.你能指出我正确的方向还是可以给我看一些示例代码?
任何人都可以告诉我,目前是否可以通过Jetty"粘合"部分Java EE 6 Web配置文件?我发现了很多关于将独立EJB 3容器,JTA提供程序等与旧Jetty版本集成的文章,所以如果我可以将它们全部一起工作,我就会更加努力.我想组装一个Servlet 3.0 + CDI + EJB 3.1 + JTA(如果需要,我真正想要的是声明式事务管理)+ Jetty 8上的JPA 2环境(如果没有可用的Jetty替代品,则为Tomcat 7).我的问题是:可以做到吗?有人设法做到了吗?有关将OpenEJB,Atomikos,Weld,EclipseLink和Jetty(或任何其他类似的堆栈)协同工作的任何文章?有没有神奇的"全部"pom.xml文件?
PS:是的,我知道我可以使用GlassFish(我非常喜欢).我只是想知道使用Servlet容器做类似工作有多难,以及两个环境在复杂性,性能,大小,部署速度,硬件资源消耗等方面的比较.
我得到一个例外
object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例
抛出以下代码:
public void addThing(String key, String someData) {
Thing thing = new Thing();
booking.setData(someData);
booking.setParent(this);
bookings.put(key, thing);
}
Run Code Online (Sandbox Code Playgroud)
Parent映射是:
@ElementCollection(fetch=FetchType.EAGER)
@Column(name="thing", nullable=false)
@MapKeyColumn(name="key")
@JoinColumn(name="parent_id")
protected Map<String, Thing> things = Maps.newHashMap();
Run Code Online (Sandbox Code Playgroud)
孩子('Thing')映射是:
@ManyToOne
private Parent parent;
Run Code Online (Sandbox Code Playgroud)
根据Hibernate手册:
a上没有级联选项
ElementCollection,目标对象始终与父级一起保持,合并,删除.
但是 - 在我更改为新@ElementCollection映射之前解决了一个问题,即我为查询返回了明显的幻像元素,这段代码工作正常.
我知道我可以单独保存元素然后做一个引用,但我更喜欢自动完成它,我认为这是它应该工作的方式.有任何想法吗?
我试图找出,可以通过@Resource注释注入无状态会话Bean.我在哪里可以找到一份清单?它取决于容器(在我的例子中是Glassfish 3.1.1)吗?
我是ejbs的新手,我想知道有状态会话bean是否会被销毁.我在servlet中注入了一个有状态会话bean.即使在30分钟后,我发现豆子是活跃的.我正在使用jboss eap 6.0.我相信HttpSession与有状态会话bean无关.我使HttpSession失效,以确保HttpSession与statful会话bean无关.那么,如果我的应用程序有很多用户,如果我创建一个新bean,那么我的服务器的性能就会降低.容器如何管理有状态会话bean.豆被移除或销毁的时间是什么时候?
我读过这篇文章和其他几篇文章.但我没有明白.
在提出我的问题之前,只是关于EJB3.1异常的一些背景知识 -
应用程序例外包括
用户定义已检查或未检查的具有@ApplicationException批注的异常
所有已检查的例外
java.lang.Exception及它的子类异常,
除了java.rmi.RemoteException及它的子类异常
系统例外包括
java.rmi.RemoteException和它的子类异常
所有未经检查的例外情况
java.lang.RuntimeException和它的子类异常
java.lang.Error及它的子类异常
以下是我在本书中读到的声明
在EJB系统中,客户端不会例外,当遇到此类异常时,这些异常不会按原样传递给客户端,而是在javax.ejb.EJBException中包含.
我的问题 -
我需要在应用程序中维护一个对于集群环境中的所有用户和所有节点都是唯一的简单计数器.我想过如下使用单例会话bean注释javax.ejb.Singleton:
package foo;
import javax.ejb.Singleton;
@Singleton
public class Bean {
private int counter;
[...]
}
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,但如果在集群环境中按预期工作,我找不到答案.群集的每个节点都有自己的实例吗?
当然我可以将bean保存在数据库中,但它实际上只是一个计数器,这样做会有点过分.此外,我希望计数器在应用程序崩溃或重新启动时重置,因此持久存在会产生比解决的问题更多的问题.
我正在将我的应用程序从JBoss 7迁移到WildFly(v9.0.1),并且由于bean事务管理错误而未部署它.
Caused by: javax.naming.NamingException: WFLYNAM0062: Failed to lookup env/com.component.eventmgt.EventServiceImpl/transaction [Root exception is java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction]
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:157)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
... 90 more
Caused by: java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction
at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:319)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:143)
... 95 more
Caused by: javax.naming.NameNotFoundException: UserTransaction [Root exception is java.lang.IllegalStateException: WFLYEJB0137: Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction]
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:153)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83) …Run Code Online (Sandbox Code Playgroud)