我编写了一个无状态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)
我无法获得更多信息,也不明白问题是什么......
有人可以帮忙吗?
我想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.
我正在寻找一个集合:
Deque/ List- 即支持在"顶部"插入元素(最新项目到顶部) - deque.addFirst(..)/ list.add(0, ..).它可能是a Queue,但是迭代顺序应该是反向的 - 即最近添加的项应该首先出现.我可以LinkedBlockingDeque把它包装到我的自定义集合中,在add操作检查大小并丢弃最后一个项目时.有更好的选择吗?
最近我将我的开发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是否有权拒绝这些名字; 他们指的是哪个规范,你认为他们正确地解释它.
我正在尝试注入一个方面内的对象.但它总是无效.这个拦截器用于使用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) private List list;
Run Code Online (Sandbox Code Playgroud)
如果我们使用Collections.unmodifiableCollection(list),它会返回该集合的副本,还是比创建副本更快?我们可以做,other.addAll(list)但我们有600,000个对象的列表,所以addAll不太好.
调用者只需要一个只读集合.
Spring尝试针对xml架构验证xml配置文件.哪个没问题,但可能存在验证失败的情况(例如,过时的架构).有没有办法关闭xsd验证?
嗨,我有一个从Servlet返回数据到Java客户端的问题.这是我第一次使用servlet.我在网上看到的所有示例都将数据返回到HTML页面,但我想制作服务器客户端软件,其中服务器执行某些操作并返回字符串列表.
如何从GET/POST方法返回一个数组到客户端?我在setContentType中设置了什么?我不明白我怎么能回应我想要的信息(如int,array,String)并返回客户端.
如果有人可以举例说明Java客户端发出POST请求并且Servlet向他返回一个数组或ArrayList,我将非常高兴.
我有一个实用工具方法来查找特定字段的对象的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 …
我有一台服务器的内存问题.这是一个亚马逊微实例,所以它的内存非常有限(free -m表示603 MB).这就是我开始使用tomcat的原因
-server -Xmx290m -Xms290m -XX:MaxPermSize=65m
Run Code Online (Sandbox Code Playgroud)
但是,"java"进程大约占总内存的86%,即518M.518-355 = 163 MB开销.这看起来很多,并且是可疑的,尤其是:
有问题的服务器上的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的堆的开销听起来太大了.那可能是什么原因呢?或者这是正常的事情方式?