小编The*_*heo的帖子

您为JPA集合使用哪种Java类型?为什么?

您在JPA域模型中使用以下哪种集合类型以及原因:

  • java.util.Collection
  • java.util.List
  • java.util.Set

我想知道是否有一些基本规则.

更新我知道a Set和a 之间的区别List.A List允许重复并具有订单,并且Set不能包含重复元素,并且不定义订单.我在JPA的背景下问这个问题.如果你严格遵循定义,那么你应该总是最终使用Set类型,因为你的集合存储在关系数据库中,你不能有重复项,你自己定义订单的地方,即Java中的顺序List是不一定保留在DB中.

例如,大多数时候我使用的是List类型,而不是因为它有一个订单或允许重复(我无论如何都没有),因为我的组件库中的某些组件需要一个列表.

java jpa jpa-2.0

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

适用于Android的Java REST客户端API

我的服务器应用程序使用JAX-RS(Jersey实现)公开RESTful Web服务.调用此服务的最佳方法是什么(使用Apache HttpClient除外)?我想知道来自Jersey,Restlet,RESTeasy和其他框架的REST客户端API是否适用于Android.

谢谢,西奥

java rest android web-services

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

在h:selectManyCheckbox中使用enum

我想在一个中使用枚举值<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类型的列表,而不是枚举类型.有任何想法吗?谢谢!

jsf enums jsf-2 selectmanycheckbox

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

JSF 2:在呈现的属性中使用枚举

有没有办法以声明方式检查枚举是否具有指定值.例如:

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

这样做有更短/更好的方法吗?

jsf enums el jsf-2

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

CDI:跨不同模块/ bean归档使用拦截器

我的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 interceptor cdi ejb-3.1

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

Java EE 6中的多租户支持

我有一个现有的Java EE 6应用程序(部署在Glassfish v 3.1中),并且希望支持多个租户.我目前在我的应用程序中使用的技术/ API是

  • EJB(包括EJB计时器服务)
  • JPA 2.0(EclipseLink)
  • JSF 2.0
  • JMS
  • JAX-RS
  • 我也计划使用CDI

据我所知,添加多租户支持仅影响持久层.我的问题:以前有人这样做过吗?转换应用程序的步骤是什么?这会影响除持久性以外的其他层吗?

因此,将有大量租户,所有数据将驻留在相同的数据库架构中.

java java-ee multi-tenant java-ee-6

15
推荐指数
1
解决办法
5292
查看次数

JSF 2.0:对于CRUD应用程序,使用DataModel <T>而不是List <T>是否有任何优势

数据模型的一个优点是可以在表中获取行索引.但我发现这是不必要的,因为您可以使用varh:datatable 的属性访问当前行元素.我经常需要转换为要列出的数据模型,因为某些组件库需要列表.我想完全放弃DataModel.你怎么看?DataModel有什么优点吗?

谢谢,西奥

java jsf jsf-2

14
推荐指数
1
解决办法
7531
查看次数

在Amazon AWS上使用Glassfish集群无状态Java EE应用程序

在分布式环境中部署无状态Java EE 6应用程序以实现高可用性和可伸缩性的最佳方法是什么?我的申请是无国籍的.因此,我不需要复制任何会话状态(HTTP会话,EJB有状态bean等)

具体来说,我想知道以下内容:

  • 我是否需要Glassfish 3.1的群集功能(假设我不需要复制会话状态)?
  • 我大量使用JMS队列和消息驱动Bean.如何设置JMS以使其在群集环境中工作?
  • 我也在使用EJB计时器服务.这在群集环境中如何工作?除了使用共享数据库存储计时器(而不是嵌入式Derby DB)之外,还有什么我需要做的吗?

我计划使用Amazon AWS(具有多AZ部署的RDS,弹性负载平衡,EC2).

java jms glassfish java-ee amazon-web-services

14
推荐指数
1
解决办法
2375
查看次数

JPA - 如何在单元测试之间截断表

我希望在每个测试用例之后清理数据库而不回滚事务.我已经尝试过DBUnit的DatabaseOperation.DELETE_ALL,但如果删除违反了外键约束,它就不起作用.我知道我可以禁用外键检查,但这也会禁用对测试的检查(我想阻止).

我正在使用JUnit 4,JPA 2.0(Eclipselink)和Derby的内存数据库.有任何想法吗?

谢谢,西奥

dbunit unit-testing jpa jpa-2.0

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

使用CDI代替@ManagedBean:UnproxyableResolutionException,因为超类没有no-args构造函数

我正在尝试将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批注一切正常.

我将不胜感激任何帮助.谢谢,西奥

cdi jsf-2 jboss-weld

8
推荐指数
1
解决办法
8137
查看次数