您在JPA域模型中使用以下哪种集合类型以及原因:
java.util.Collection
java.util.List
java.util.Set
我想知道是否有一些基本规则.
更新我知道a Set
和a 之间的区别List
.A List
允许重复并具有订单,并且Set
不能包含重复元素,并且不定义订单.我在JPA的背景下问这个问题.如果你严格遵循定义,那么你应该总是最终使用Set
类型,因为你的集合存储在关系数据库中,你不能有重复项,你自己定义订单的地方,即Java中的顺序List
是不一定保留在DB中.
例如,大多数时候我使用的是List
类型,而不是因为它有一个订单或允许重复(我无论如何都没有),因为我的组件库中的某些组件需要一个列表.
我的服务器应用程序使用JAX-RS(Jersey实现)公开RESTful Web服务.调用此服务的最佳方法是什么(使用Apache HttpClient除外)?我想知道来自Jersey,Restlet,RESTeasy和其他框架的REST客户端API是否适用于Android.
谢谢,西奥
我想在一个中使用枚举值<h:selectManyCheckbox>
.正确填充复选框,但是,在选择某些值并提交它们时,它们的运行时类型是String
,而不是枚举.我的代码:
<h:selectManyCheckbox value="#{userController.roles}" layout="pageDirection">
<f:selectItems value="#{userController.rolesSelectMany}" />
</h:selectManyCheckbox>
Run Code Online (Sandbox Code Playgroud)
UserController类(SecurityRole是枚举类型):
public SelectItem[] getRolesSelectMany() {
SelectItem[] items = new SelectItem[SecurityRole.values().length];
int i = 0;
for (SecurityRole role : SecurityRole.values()) {
items[i++] = new SelectItem(role, role.toString());
}
return items;
}
public List<SecurityRole> getRoles() {
getCurrent().getRoles();
}
public void setRoles(List<SecurityRole> roles) {
getCurrent().setRoles(roles);
}
Run Code Online (Sandbox Code Playgroud)
当JSF调用setRoles方法时,它包含String类型的列表,而不是枚举类型.有任何想法吗?谢谢!
有没有办法以声明方式检查枚举是否具有指定值.例如:
<h:graphicImage name="error.png" library="images"
rendered="#{viewController.current.status == Status.ERROR}" />
Run Code Online (Sandbox Code Playgroud)
在托管beand中定义一个方法来检查每个枚举值,例如,有点单调乏味
public boolean isStateIsError() {
return current.getStatus() == Status.ERROR;
}
Run Code Online (Sandbox Code Playgroud)
这样做有更短/更好的方法吗?
我的Java EE 6应用程序由war文件和ejb模块组成,包含在ear文件中.我正在使用CDI for DI(即我在两个模块中都有一个beans.xml文件).我想使用war模块中的ejb模块中定义的日志拦截器.我在ejb的beans.xml中启用了拦截器:
<beans>
<interceptors>
<class>com.test.interceptor.LoggingInterceptor</class>
</interceptors>
</beans>
Run Code Online (Sandbox Code Playgroud)
这仅适用于使用ejb模块中的拦截器注释的类.战争模块中的类不被截获(尽管它们也被拦截器注释).我认为解决方案是在战争的拦截器中启用拦截器(如上所述).但是无法使用以下消息部署应用程序:
严重:加载应用程序时出现异常:WELD-001417启用拦截器类类com.test.interceptor.LoggingInterceptor既没有注释@Interceptor也没有通过可移植扩展注册
我的LoggingInterceptor看起来像这样:
@Log
@Interceptor
public class LoggingInterceptor {
private static final Logger logger = Logger.getLogger(LoggingInterceptor.class.getName());
static {
logger.setLevel(Level.ALL);
}
@AroundInvoke
public Object logMethod(InvocationContext ctx) throws Exception {
logger.log(Level.FINE, "ENTRY {0} {1}",
new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
long startTime = System.nanoTime();
try {
return ctx.proceed();
} finally {
long diffTime = System.nanoTime() - startTime;
logger.log(Level.FINE, "RETURN {0} {1}",
new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
logger.log(Level.FINE, "{0} took {1} ms", …
Run Code Online (Sandbox Code Playgroud) 我有一个现有的Java EE 6应用程序(部署在Glassfish v 3.1中),并且希望支持多个租户.我目前在我的应用程序中使用的技术/ API是
据我所知,添加多租户支持仅影响持久层.我的问题:以前有人这样做过吗?转换应用程序的步骤是什么?这会影响除持久性以外的其他层吗?
因此,将有大量租户,所有数据将驻留在相同的数据库架构中.
数据模型的一个优点是可以在表中获取行索引.但我发现这是不必要的,因为您可以使用var
h:datatable 的属性访问当前行元素.我经常需要转换为要列出的数据模型,因为某些组件库需要列表.我想完全放弃DataModel.你怎么看?DataModel有什么优点吗?
谢谢,西奥
在分布式环境中部署无状态Java EE 6应用程序以实现高可用性和可伸缩性的最佳方法是什么?我的申请是无国籍的.因此,我不需要复制任何会话状态(HTTP会话,EJB有状态bean等)
具体来说,我想知道以下内容:
我计划使用Amazon AWS(具有多AZ部署的RDS,弹性负载平衡,EC2).
我希望在每个测试用例之后清理数据库而不回滚事务.我已经尝试过DBUnit的DatabaseOperation.DELETE_ALL,但如果删除违反了外键约束,它就不起作用.我知道我可以禁用外键检查,但这也会禁用对测试的检查(我想阻止).
我正在使用JUnit 4,JPA 2.0(Eclipselink)和Derby的内存数据库.有任何想法吗?
谢谢,西奥
我正在尝试将CDI用于我的JSF/Java EE应用程序.我有以下类层次结构:
/**
* base controller class
* also contains some final methods and an inner enum class declaration
*/
public abstract class AbstractCrudController<K, E> implements Serializable {
private Class<E> entityClass;
public AbstractCrudController(Class<E> entityClass) {
this.entityClass = entityClass;
}
// ...
}
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class CategoryController extends AbstractCrudController<Long, Category> implements Serializable {
public CategoryController() {
super(Category.class);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在GF 3.1上部署应用程序时,我得到以下CDI/Weld异常:
严重:加载应用程序时出现异常:WELD-001435正常范围的bean类com.web.AbstractCrudController不可代理,因为它没有no-args构造函数.org.jboss.weld.exceptions.UnproxyableResolutionException:WELD-001435正常范围的bean类com.web.AbstractCrudController不可代理,因为它没有no-args构造函数.在org.jboss.weld.util.Proxies.getUnproxyableClassException(Proxies.java:215)在org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:166)在org.jboss.weld.util.Proxies.getUnproxyableTypesException (Proxies.java:191)位于org.jboss的org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:134)org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:148). weld.bootstrap.Validator.
即使我向基类添加了一个no-args构造函数,Weld仍然会抱怨该类不可代理,因为它有最终方法.为什么WELD强迫我改变我的班级设计?使用JSF @ManagedBean批注一切正常.
我将不胜感激任何帮助.谢谢,西奥
java ×5
jsf-2 ×4
java-ee ×3
jsf ×3
cdi ×2
enums ×2
jpa ×2
jpa-2.0 ×2
android ×1
dbunit ×1
ejb-3.1 ×1
el ×1
glassfish ×1
interceptor ×1
java-ee-6 ×1
jboss-weld ×1
jms ×1
multi-tenant ×1
rest ×1
unit-testing ×1
web-services ×1