假设我有一个定义两个视图的EJB:
两个接口共享相同的方法签名,因此它类似于:
public interface MyBusinessCommon {
void myMethod(Object o);
}
@Local
public interface MyBusinessLocal extends MyBusinessCommon { }
@Remote
public interface MyBusinessRemote extends MyBusinessCommon { }
@Stateless
public class MyBusinessBean implements MyBusinessLocal, MyBusinessRemote {
public void myMethod(Object o) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法弄清楚EJB本身(或其拦截器?)内部调用的EJB视图?
假设我想根据使用的视图执行不同的授权程序.远程应该更加受限制,本地不应该.
我可以调用SessionContext#getInvokedBusinessInterface()但这只给了我关于类对象的信息 - 而不是关于它的EJB语义.明确地使用反射来检查接口或bean上的注释是否存在是不够的(在ejb-jar.xml?中定义的视图怎么样?)
我怀疑是否有可能使用直接的EJB规范,但也许我错过了一些东西.
如果没有,是否可以从应用程序服务器的内部获取此信息?(我们只考虑JBoss AS 7.x,Glassfish 3.x和TomEE 1.5.1).
我必须使用不同的NLS_NUMERIC_CHARACTERSaka逗号分隔符在不同地区运行以数字小数作为参数的报告。
NLS_NUMERIC_CHARACTERS在会话级别设置,例如 与
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
Run Code Online (Sandbox Code Playgroud)
表达式NLS_NUMERIC_CHARACTERS = ',.' 表示小数点标记是逗号,千位标记是点。
为了使用户在所有不同区域中都能正确输入内容,我假设NLS_NUMERIC_CHARACTERS正确设置了会话的设置。我想将该会话状态评估为一个字段值,s_nlsparam并使用它正确地将报告参数转换为
.. to_number(expr,format, v_nlsparam) ...
Run Code Online (Sandbox Code Playgroud)
到目前为止的计划。这将ORA-01722: invalid number在多国环境中遏制任何潜力。
现在,我找不到一种方法来读取设置的当前会话状态NLS_NUMERIC_CHARACTERS。我检查了该视图v$session,但没有提供任何此类字段。我都没有使用以下方法找到这样的参数:
select sys_context('USERENV', .... ) from dual
Run Code Online (Sandbox Code Playgroud)
有办法吗?