小编Boz*_*zho的帖子

从JPA持久化上下文中分离实体(JPA 2.0/Hibernate/EJB 3/J2EE 6)

我编写了一个无状态EJB方法,允许以"只读"模式获取实体.

执行此操作的方法是使用EntityManager获取实体,然后将其分离(使用JPA 2.0 EntityManager).

我的代码如下:

@PersistenceContext
private EntityManager entityManager;

public T getEntity(int entityId, Class<T> specificClass, boolean readOnly) throws Exception{
  try{
    T entity = (T)entityManager.find(specificClass, entityId);
    if (readOnly){
      entityManager.detach(entity);
    }
    return entity;
  }catch (Exception e){
    logger.error("", e);
    throw e; 
  }
}  
Run Code Online (Sandbox Code Playgroud)

获取实体工作正常,但对detach方法的调用返回以下错误:

GRAVE: javax.ejb.EJBException
    at ...
Caused by: java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerImpl.detach(Ljava/lang/Object;)V
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.detach(EntityManagerWrapper.java:973)
    at com.mycomp.dal.MyEJB.getEntity(MyEJB.java:37)
Run Code Online (Sandbox Code Playgroud)

我无法获得更多信息,也不明白问题是什么......

有人可以帮忙吗?

hibernate jpa ejb-3.0

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

如何根据Content-type添加响应头; 在提交响应之前获取Content-type

我想Expires为所有image/*和设置标题text/css.我正在这样做Filter.然而:

  • 在调用chain.doFilter(..)Content-type 之前还没有"实现"
  • 调用chain.doFilter(..)Content-type 后,内容长度也是如此,禁止添加新标题(至少在Tomcat实现中)

我可以使用所请求资源的扩展,但由于某些css文件是由richfaces通过从jar文件中获取而生成的,因此文件的名称不是x.css,但是/xx/yy/zz.xcss/DATB/....

那么,有没有办法在提交响应之前获取Content-type.

java tomcat servlets

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

有界,自动丢弃,无阻塞,并发收集

我正在寻找一个集合:

  • 是Deque/ List- 即支持在"顶部"插入元素(最新项目到顶部) - deque.addFirst(..)/ list.add(0, ..).它可能是a Queue,但是迭代顺序应该是反向的 - 即最近添加的项应该首先出现.
  • 是有界的 - 即限制20项
  • 达到容量时,自动丢弃最旧的项目("在底部",最先添加)
  • 非阻塞 - 如果双端队列为空,则检索不应阻止.它也应该不会阻塞/返回false/null/throw异常是deque已满.
  • 并发 - 多个线程应该能够对它进行操作

我可以LinkedBlockingDeque把它包装到我的自定义集合中,在add操作检查大小并丢弃最后一个项目时.有更好的选择吗?

java collections

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

Java关键字不允许作为EL标识符

最近我将我的开发tomcat从7.0.0升级到7.0.4.我有类似的东西:

<c:set var="static" value=".." />
<c:set var="class" value=".." />
Run Code Online (Sandbox Code Playgroud)

两者都在7.0.0上工作但在7.0.4上停止工作.我打开了一个bug,它被关闭了,答案是:

就其本身而言,该标签将进行编译.

对Java标识符的检查已添加到EL处理中,因此我怀疑您在页面的其他位置有一些非法的EL.

这听起来不太清楚,但我没有得到随后的答案,所以我看了EL规格.对于JSP 2.1(最新版本为2.2),我发现:

第1章,第21页:标识符被约束为Java标识符 - 例如,no - ,no /等.

这是我发现的最多.我将以适用于java标识符的语法要求适用的方式读取此行,但不应用保留字(因为更新class也不会static出现在EL中的保留字列表中).JLS没有被称为术语"Java标识符"(并且它适用于2.2规范中的一些其他情况,我没有完全查看)

那么,Tomcat是否有权拒绝这些名字; 他们指的是哪个规范,你认为他们正确地解释它.

java jsp tomcat el

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

春天无法注入方面

我正在尝试注入一个方面内的对象.但它总是无效.这个拦截器用于使用aspectj注入域对象,因此除了以下定义之外,不受spring管理

<context:load-time-weaver />
<context:component-scan base-package="framework.interceptor" />

@Aspect
public class LoggingInterceptor {
     @Autowired
     EventLogManager eventLogManager;
 .....
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试是这样的.当调用asa.execute()时,它会被LoggingInterceptor拦截,但LoggingInterceptor.eventLogManager始终为null.但下面的testInjection()工作正常.

 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = {     "classpath:applicationContext-dao.xml",
                                    "classpath:applicationContext-service.xml",
                                    "classpath:applicationContext-resources.xml",
                                    "classpath:LoggingTest-context.xml"})
public class LoggingInterceptorTest {

    @Autowired
EventLogManager eventLogManager;

@Test
public void testInjection(){
    Assert.assertNotNull(eventLogManager);
}

@Test
public void testAccountSaveActionAdvice(){
    AccountSaveAction asa = new AccountSaveAction();
    asa.execute();
}
}
Run Code Online (Sandbox Code Playgroud)

我的applicationContext-service.xml具有以下内容

<bean id="eventLogManager"
    class="service.impl.EventLogDBManagerImpl">
    <property name="eventLoggingDao" ref="eventLoggingDao" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我在META-INF中的aop.xml看起来像这样

<aspectj>
<weaver>
    <!-- only weave classes in this package -->
    <include within="action..*" />
</weaver>
<aspects>
    <!-- use only this aspect …
Run Code Online (Sandbox Code Playgroud)

spring

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

Collections.unmodifiableCollection(list)是否复制了集合?

private List list;
Run Code Online (Sandbox Code Playgroud)

如果我们使用Collections.unmodifiableCollection(list),它会返回该集合的副本,还是比创建副本更快?我们可以做,other.addAll(list)但我们有600,000个对象的列表,所以addAll不太好.

调用者只需要一个只读集合.

java collections

8
推荐指数
3
解决办法
6102
查看次数

关闭弹簧文件的XSD验证

Spring尝试针对xml架构验证xml配置文件.哪个没问题,但可能存在验证失败的情况(例如,过时的架构).有没有办法关闭xsd验证?

java xml spring

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

将数据从Servlet返回到Java Client

嗨,我有一个从Servlet返回数据到Java客户端的问题.这是我第一次使用servlet.我在网上看到的所有示例都将数据返回到HTML页面,但我想制作服务器客户端软件,其中服务器执行某些操作并返回字符串列表.

如何从GET/POST方法返回一个数组到客户端?我在setContentType中设置了什么?我不明白我怎么能回应我想要的信息(如int,array,String)并返回客户端.

如果有人可以举例说明Java客户端发出POST请求并且Servlet向他返回一个数组或ArrayList,我将非常高兴.

java servlets

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

如何使Class.getMethod()抛出SecurityException

我有一个实用工具方法来查找特定字段的对象的getter方法(使用反射):

public static Method findGetter(final Object object, final String fieldName) {
    if( object == null ) {
        throw new NullPointerException("object should not be null");
    } else if( fieldName == null ) {
        throw new NullPointerException("fieldName should not be null");
    }

    String getterName = getMethodNameForField(GET_PREFIX, fieldName);

    Class<?> clazz = object.getClass();
    try {
        return clazz.getMethod(getterName);
    } catch(final NoSuchMethodException e) {
        // exception handling omitted
    } catch(final SecurityException e) {
        // exception handling omitted
    }
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个涵盖SecurityException场景的单元测试,但是如何让getMethod抛出SecurityException呢?

javadoc声明getMethod …

java reflection junit

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

JVM开销过大

我有一台服务器的内存问题.这是一个亚马逊微实例,所以它的内存非常有限(free -m表示603 MB).这就是我开始使用tomcat的原因

-server -Xmx290m -Xms290m -XX:MaxPermSize=65m
Run Code Online (Sandbox Code Playgroud)

但是,"java"进程大约占总内存的86%,即518M.518-355 = 163 MB开销.这看起来很多,并且是可疑的,尤其是:

  • 在另一个微实例上运行另一个jvm版本的类似应用程序没有这么大的开销
  • 本地运行的同一个应用程序只需40 MB的开销.本地它运行在Windows 7,64位.

有问题的服务器上的java版本是:

java version "1.7.0_09-icedtea"
OpenJDK Runtime Environment (amzn-2.3.3.13.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
Run Code Online (Sandbox Code Playgroud)

本地运行时与服务器上运行时之间的巨大差异使我排除了应用程序中存在一些昂贵的堆外对象(例如字节缓冲区)的选项(而且我还没有使用任何这些).我知道JVM开销会有所不同,但是超过1/2的堆的开销听起来太大了.那可能是什么原因呢?或者这是正常的事情方式?

java

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

标签 统计

java ×8

collections ×2

servlets ×2

spring ×2

tomcat ×2

ejb-3.0 ×1

el ×1

hibernate ×1

jpa ×1

jsp ×1

junit ×1

reflection ×1

xml ×1