我目前正在JBoss AS 5.0.0.GA上开发基于EJB 3.0的应用程序,最近在服务器日志中出现了以下警告:
09:50:19,735 WARN [InterceptorsFactory] EJBTHREE-1246: Do not use InterceptorsFactory with a ManagedObjectAdvisor, InterceptorRegistry should be used via the bean container 09:50:19,735 WARN [InterceptorsFactory] EJBTHREE-1246: Do not use InterceptorsFactory with a ManagedObjectAdvisor, InterceptorRegistry should be used via the bean container 09:50:19,735 WARN [InterceptorRegistry] applicable interceptors is non-existent for ... ...
只要将EJB(无状态会话bean)注入到我的JSF Web应用程序的支持bean中,就会生成警告.虽然bean确实可以正常工作,但我仍然想知道警告来自哪里以及我可以做些什么来避免它.
我已经搜索了一下,但没有找到一个好的答案(有人说,bean开发人员不必担心,但它是一个警告,所以我想有一个更好的解决方案):
那么有没有人解释导致警告的原因(对于bean开发人员,而不是应用程序服务器开发人员)以及如何避免它?
我一直认为术语"国际化"和"本地化"(以及它们有趣的缩写词i18n和l10n)被普遍接受并用于谈论了解语言和文化差异的软件.但我最近读了一个关于这些主题的问题,这些主题提到了一种叫做"全球化"的东西,并且也被标记为这样.
因为在我想知道其他人是否真正使用这个术语以及它与我认为已经建立并且众所周知的术语相比之前我还没有听过这个术语,所以我去了标签页并检查了不同的术语:
所以这似乎是一个不太常见的术语.我发现它也令人困惑,因为它以某种方式混合了两个术语i18n和l10n(至少对我来说," 全球化 "让我想到像attac这样的组织:).据我所知,该术语源自.net/Microsoft行话.
所以我的问题是:您使用/偏好哪些条款以及您与这些条款相关联的内容是什么?此外,为什么微软选择使用不同的术语,甚至与不熟悉它的人有一些完全不同的含义?
我在从应用程序客户端访问有状态会话bean(SFSB)时遇到了一些麻烦.我正在使用JBoss 5.0.1.GA. 应用程序客户端和EJB都打包在一个部署的EAR中,我有其他应用程序客户端可以正常工作.到目前为止,我只使用了无状态会话bean(SLSB),但据我所知,SLSB和SFSB之间的差异不应影响从应用程序客户端访问它们的方式.
类/接口的结构:
@Local public interface A {...}
@Stateless public class ABean implements A {...}
@Remote public interface B {...}
@Stateful public class BBean implements B {
@EJB private A anInstanceOfA;
@PostConstruct private void init() {
this.anInstanceOfA.someMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序客户端通过"appclient-launcher"运行,如"如何在JBoss 5中使用应用程序客户端"中所述.执行"BBean"查找工作正常,直到在执行init()期间调用(本地)ABean上的someMethod().在该调用期间,容器抛出InvalidStateException("本地调用:安全上下文为空")(作为根本原因).当我将有状态bean更改为无状态bean时,一切正常(当然,除非保留状态).有趣的是,我可以使用Web应用程序(在JSF托管bean中)完全相同的SFSB.
难道我做错了什么?我应该如何从应用程序客户端使用SFSB?
到目前为止,我还没有找到任何关于这个特定问题的有用信 [#JBAS-4317]安全上下文中的类似上下文中提到了异常,但考虑到它被标记为已完成并在JBoss 5.0.0.Beta3中得到修复,似乎不是同一个问题.
我有一个模板和一个专门化定义如下:
template<typename T>
struct SomeTemplate final
{
};
template<>
struct SomeTemplate<int> final
{
};
int main()
{
SomeTemplate<int> test; // <-- error
}
Run Code Online (Sandbox Code Playgroud)
使用 Visual C++ 2012 编译出现以下错误:
error C2913: explicit specialization; 'SomeTemplate<T>' is not a specialization of a class template
with
[
T=int
]
Run Code Online (Sandbox Code Playgroud)
当我删除时它编译得很好并且做正确的事情
final
符template<>
专业化第一种情况对我来说有一定意义,因为它很可能final
也限制了模板的专业化(而不仅仅是继承)。第二种情况对我来说有点奇怪,因为我认为这应该是一个语法错误。
这种行为正确吗?
我目前正在努力获得以下代码进行编译.首先是包含带有方法模板的类的头文件:
// ConfigurationContext.h
class ConfigurationContext
{
public:
template<typename T> T getValue(const std::string& name, T& default) const
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
在其他地方,我想这样称呼这个方法:
int value = context.getValue<int>("foo", 5);
Run Code Online (Sandbox Code Playgroud)
在那里我收到以下错误:
error: no matching function for call to 'ConfigurationContext::getValue(const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int)'
Run Code Online (Sandbox Code Playgroud)
我检查了明显的错误,比如丢失包含和类似的东西.但一切似乎都是正确的.我尝试删除模板类型参数的pass-by-reference,如下所示:
template<typename T> T getValue(const std::string& name, T default) const ...
Run Code Online (Sandbox Code Playgroud)
然后它编译没有任何错误,也运行良好,但我仍然想在这里传递一个参考...
有谁知道这里发生了什么以及如何使这项工作?
c++ ×2
ejb-3.0 ×2
java ×1
jboss ×1
localization ×1
methods ×1
session-bean ×1
templates ×1
terminology ×1
warnings ×1