是否可以将此Query作为TypedQuery编写,让两个Long运行到一个内部有两个公共Long字段的Object中.
Query q = em.createQuery(
"SELECT c.id, COUNT(t.id) " +
"FROM PubText t " +
"JOIN t.comm c " +
"WHERE c.element = ?1 " +
"GROUP BY c.id");
q.setParameter(1, e);
List<?> rl = q.getResultList();
Iterator<?> it = rl.iterator();
HashMap<Long, Long> res = new HashMap<Long, Long>();
while (it.hasNext()) {
Object[] n = (Object[]) it.next();
res.put((Long)n[0], (Long)n[1]);
}
return res;
Run Code Online (Sandbox Code Playgroud) 当我将此常量字符串与MB内部与具有MB的变量进行比较时,结果为false.字符串常量看起来像"MB"([",M,B,"] = 4长度),我的变量是"MB"([M,B] = 2长度).这里有什么不对.Java无法将代码中的引号放入字符串中.


public static final String gc_TelCodeFixed = "FX";
if (!telcode.getId().equals(com.quoka.qis.db.constant.Constants.gc_TelCodeFixed))
throw new TelcodeTypeMismatchException(telcode.getType());
Run Code Online (Sandbox Code Playgroud) 我尝试异步保存统计信息登录过程的结果到数据库,以节省登录方法的时间.但是如果我向异步方法添加thread.sleep,登录过程会花费更长的时间.这是为什么?我认为authenticate方法不会等待writeResultToStats方法完成.
@Stateless
@LocalBean
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class CustomerBeanTest {
@PersistenceContext(unitName = WebPersistenceUnits.QISADS)
private EntityManager em_local;
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void authenticate(Long loginid, String cmppassword) {
try {
Login l = em_local.find(Login.class, loginid);
String s = l.getPassword();
if (!s.equalsIgnoreCase(cmppassword))
throw new PasswordMissmatchException();
writeResultToStats(loginid, true);
} catch (PasswordMissmatchException e) {
writeResultToStats(loginid, false);
}
}
@Asynchronous
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void writeResultToStats(Long loginID, boolean success) {
try { // just for testing
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LogUtils log …Run Code Online (Sandbox Code Playgroud) <property name="eclipselink.logging.level" value="FINE" />
Run Code Online (Sandbox Code Playgroud)
如何设置服务器的日志记录级别。我想在开发服务器上看到Level.FINE。但是,当然只有生产服务器上的Level.WARNING。
如果将上面的行放入persistence.xml中,则会在两台计算机上自动进行设置。我必须记得手动关闭它。那当然很危险。
非常感谢。
我该如何处理mdb中的异常?我有一种有趣的感觉,异常发生在try catch块之后,所以我无法捕获并记录它.Glassfish v3决定重复整个信息.它会运行到一个无限循环中,并在硬盘上写入很多日志文件.
我正在使用Glassfishv3.01 + Eclipselink 2.0.1
public class SaveAdMessageDrivenBean implements MessageListener {
@PersistenceContext(unitName="QIS")
private EntityManager em;
@Resource
private MessageDrivenContext mdc;
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
ObjectMessage obj = (ObjectMessage)message;
AnalyzerResult alyzres = (AnalyzerResult)obj.getObject();
save(alyzres);
}
} catch (Throwable e) {
mdc.setRollbackOnly();
log.log(Level.SEVERE, e);
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
private void save(AnalyzerResult alyzres) throws PrdItemNotFoundException {
Some s = em.find(Some.class, somepk);
s.setSomeField("newvalue");
// SQL Exception happens after leaving this method because of missing field for …Run Code Online (Sandbox Code Playgroud) 我想找到属于StringBuilder的toString方法的所有出现:
StringBuilder sb = new StringBuilder();
sb.append("sometext");
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
并替换为:
StringBuilder sb = new StringBuilder();
sb.append("sometext");
return Optimizer.stat(sb.toString());
Run Code Online (Sandbox Code Playgroud)
当然var"sb"并不总是以相同的方式编写:-)
我尝试了IntelliJ Ultimate Structural Search和Replace.但我找不到只能获得StringBuilder类的String的方法.
非常感谢.
glassfish-3 ×4
java ×3
jpa ×3
java-ee ×2
asynchronous ×1
debugging ×1
eclipse ×1
eclipselink ×1
ejb-3.0 ×1
ejb-3.1 ×1
jpql ×1