在我正在研究的Java EE 6项目中,有一个用@EJB注释的单独字段没有被注入.注射在其他地方工作正常.
作为Java EE的新手,我不知道它是否与抽象类中的字段有关,也不能从Glassfish(3.1.2)中找到关于为什么没有发生这种注入的任何输出.
在发生NullPointerException之前,服务器日志中没有错误或警告,因为dataSourceControl字段为null.我已经验证了DataSourceControl Singleton是通过在其构造函数中放入日志来实例化的.
据我所知,dataSourceControl字段没有被注入,但是日志没有给我这么做的理由.
public abstract class AbstractDataMap<T> {
@EJB
private DataSourceControl dataSourceControl; // This is not being injected
DataSourceControl getDataSourceControl() {
return dataSourceControl;
}
// Other methods
}
public abstract class AbstractDataMapDBProd<T> extends AbstractDataMap<T> {
@Override
protected Connection getDBConnection() {
return getDataSourceControl().getConnectionX(); // NullPointerException here
}
// Other methods
}
@Stateless
public class CountryMap extends AbstractDataMapDBProd<Country> {
public boolean update(final Country current, final Country legacy) {
Connection connection = getDBConnection();
// More code 'n stuff …Run Code Online (Sandbox Code Playgroud) 我正在经历规范可怕的遗留数据库的痛苦,并且发现了我认为DBMS的一个错误.
此查询返回我期望的结果:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_id, thing_name;
(16 rows)
Run Code Online (Sandbox Code Playgroud)
我第一次运行查询时,无意中在ORDER BY中使用了错误的列,如下所示:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_name, location;
(33 rows)
Run Code Online (Sandbox Code Playgroud)
请注意,唯一要更改的是ORDER BY,并且返回的行数从16增加到33.它提供的结果不是查询指定的DISTINCT.
我相信这是一个彻头彻尾的错误,但是同事说这是正常的,因为当我们通过"位置"进行排序时,会在结果中选择一个无形的.
ORDER BY是否会影响SELECT查询中返回的行数?
编辑:我有另一个人查看查询,我将查询复制到两个单独的文件,然后对它们运行diff命令.100%确定两个查询之间的唯一区别是ORDER BY中列出的列.
更新:Ingres已发布修补程序14301,其中包含错误修正:"错误126640(GENERIC)查询具有order-by表达式,而不同聚合返回的行数超出预期.order-by表达式中的列不在选择列表中."
即有问题的查询现在会导致错误,因为结果不正确.
尝试在批处理文件中设置Glassfish配置时,有一个命令在直接从命令行运行时有效 - 但在放入Windows批处理文件时失败.
命令:
call asadmin.bat create-auth-realm --classname com.sun.enterprise.security.auth.realm.ldap.LDAPRealm --property jaas-context="ldapRealm":directory="ldap\://domain.com\:389:base-dn=dc\=domain,dc\=com:group-base-dn=ou\=Groups,ou\=domain,dc\=com":search-bind-dn="CN\=username,OU\=Accounts,OU\=domain,DC\=com":search-bind-password="password":search-filter="(&(objectCategory\=user)(sAMAccountName\=%s))":group-search-filter="(&(objectCategory\=group)(member\=%d))" a-realm
Run Code Online (Sandbox Code Playgroud)
完全按照上面的命令行运行时,响应完成:
Command create-auth-realm executed successfully.
Run Code Online (Sandbox Code Playgroud)
完全按照上面的方式从批处理文件运行时,响应失败:
(member\ was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
请注意,某些等于字符的转义是针对Glassfish的,而不是尝试转义Windows批处理命令的字符.
我的猜测是,当在批处理文件中运行时,批处理文件将某些字符视为特殊字符.我试着逃避括号,没有运气.
该命令如何在批处理文件中工作!?