我的设置非常简单:我有一个网络前端,后端是弹簧接线.
我正在使用AOP在我的rpc服务上添加一层安全性.
这一切都很好,除了网络应用程序在发布时中止的事实:
[java] SEVERE: Context initialization failed
[java] org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop]
[java] Offending resource: ServletContext resource [/WEB-INF/gwthandler-servlet.xml]
这是我的xml配置文件的片段:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<aop:config>
<aop:aspect id="security" ref="securityAspect" >
<aop:pointcut id="securedServices" expression="@annotation(com.fb.boog.common.aspects.Secured)"/>
<aop:before method="checkSecurity" pointcut-ref="securedServices"/>
</aop:aspect>
</aop:config>
Run Code Online (Sandbox Code Playgroud)
我读过互联网,它可能是我的类加载问题的核心.令人怀疑,因为这是我的WEB-INF/lib目录:
./WEB-INF/lib
./WEB-INF/lib/aopalliance-alpha1.jar
./WEB-INF/lib/aspectj-1.6.6.jar
./WEB-INF/lib/commons-collections.jar
./WEB-INF/lib/commons-logging.jar
./WEB-INF/lib/ehcache-core-1.7.0.jar
./WEB-INF/lib/ejb3-persistence.jar
./WEB-INF/lib/hibernate
./WEB-INF/lib/hibernate/antlr.jar
./WEB-INF/lib/hibernate/asm.jar
./WEB-INF/lib/hibernate/bsh-2.0b1.jar
./WEB-INF/lib/hibernate/cglib.jar
./WEB-INF/lib/hibernate/dom4j.jar
./WEB-INF/lib/hibernate/freemarker.jar
./WEB-INF/lib/hibernate/hibernate-annotations.jar
./WEB-INF/lib/hibernate/hibernate-shards.jar
./WEB-INF/lib/hibernate/hibernate-tools.jar
./WEB-INF/lib/hibernate/hibernate.jar
./WEB-INF/lib/hibernate/jtidy-r8-20060801.jar
./WEB-INF/lib/jabsorb
./WEB-INF/lib/jabsorb/jabsorb-1.3.1.jar
./WEB-INF/lib/jta.jar
./WEB-INF/lib/jyaml-1.3.jar
./WEB-INF/lib/postgresql-8.4-701.jdbc4.jar
./WEB-INF/lib/sjsxp.jar
./WEB-INF/lib/spring
./WEB-INF/lib/spring/org.springframework.aop-3.0.0.RELEASE.jar
./WEB-INF/lib/spring/org.springframework.asm-3.0.0.RELEASE.jar
./WEB-INF/lib/spring/org.springframework.aspects-3.0.0.RELEASE.jar …Run Code Online (Sandbox Code Playgroud) 在 HappyFunPizzaCorp 中,我们有一个 POS 系统,它生成两个事件:new_order事件和payment事件。这两个事件都包含用于交叉引用的披萨order_id键。
这两个事件都被发送到交换器TheExchange。new_order事件总是在payment事件之前发出。
我们是一个非常繁忙的地方,比如说每秒销售 100000 个披萨,因此串行处理所有记录不是一个选择。
因此,问题是我们如何并行处理工作负载,同时仍然保证事件在同一个披萨的事件new_order之前得到处理?payment
具有多个消费者的简单队列是行不通的。我们在消费者之间获得循环行为,因此该事件可能与同一披萨的事件payment同时处理。new_order
另一种解决方案是使用分片交换并将其用作order_id分片键。虽然这听起来不错,但我们现在队列之间有一些固有的并行性,我们的消费者如何连接?我们可以有一组预定义的队列来防止重新分片以及由于重新分片而导致消息之间的并行性。但是如果我们有多个消费者实例,它们如何决定哪些队列来消费数据。最重要的是,我们希望自动扩展我们的消费者。
我们当前的解决方案是使用共识协议(通过zookeeper的raft/paxos)来确定每个消费者进程应该服务多少个队列以及哪些队列。我们在系统中预设了(大量)分片队列,不应更改。队列的消费者是排他的(最多提供一次交付保证),他们通过共识协议协调哪些队列应该由谁服务。
虽然这个设置似乎可以工作,但它似乎过于复杂,我想知道是否有我们缺少的参考解决方案。
我有一个简单的问题:我想根据对象是否在servlet容器中实例化,或者是否在独立应用程序中实例化来不同地配置对象.
该对象是数据库连接,我关心设置查询超时.
我能想出的第一个解决方案是:
if (insideServletContainer(this.getClass().getClassLoader()) {
/// do some servlet specific config
}
else {
/// do some standalone config
}
Run Code Online (Sandbox Code Playgroud)
当然,问题是我是否可以编写一个可靠的方法来判断该类是否已在servlet容器中加载.它充其量只是一种黑客行为.
第二种选择是假设默认情况是独立实例化,基于独立配置设置默认值,并在servlet上下文中覆盖它们.
所以,总结一下我的问题是:如果从servlet容器中加载了类,你知道一个好的/可靠的机制吗?如果没有,我将采取第二条路线.
缺口