我花了几天的时间来弄清楚如何通过JNDI在Tomcat中配置javax.mail.Session并进行身份验证,现在我得到了它,但只是在深入研究代码之后.
在这段时间里,我看到了有史以来最糟糕的代码:javax.mail.Service #connect(String,String,String,String)Version 1.4.1
if (user == null) {
user = url.getUsername();
if (password == null) // get password too if we need it
password = url.getPassword();
} else {
if (password == null && user.equals(url.getUsername()))
// only get the password if it matches the username
password = url.getPassword();
}
Run Code Online (Sandbox Code Playgroud)
密码何时分配?为什么两次检查null? - 然后意识到其他不属于如果以上.(这是原始的缩进).回到主题.
至少我发现正确的资源定义是:
<Resource name="email/session"
type="javax.mail.Session"
auth="Container"
password="secret"
mail.debug="false"
mail.transport.protocol="smtp"
mail.smtp.auth="true"
mail.smtp.user="testi"
mail.smtp.host="smtp.xxx.org"
mail.smtp.from="test@example.com"
/>
Run Code Online (Sandbox Code Playgroud)
请注意它是"password"和"mail.smtp.user"或"mail.user"但不是"mail.smtp.password"或"user".
至少神奇是在雄猫队完成的org.apache.naming.factory.MailSessionFactory.javax.mail.Authenticator如果属性password和属性mail.smtp.user或mail.user退出,此工厂将添加到邮件会话. …
在JMock中是否有一种已经内置的标准方法来捕获方法参数,以便稍后使用标准JUnit功能测试参数对象?
就像是
final CapturedContainer<SimpleMailMessage>capturedArgumentContainer = new ...
context.checking(new Expectations() {{
oneOf(emailService.getJavaMailSender()).send(
with(captureTo(capturedArgumentContainer)));
}});
assertEquals("helloWorld", capturedArgumentContainer.getItem().getBody());
Run Code Online (Sandbox Code Playgroud)
CapturedContainer并且captureTo不存在 - 它们就是我要求的.
或者我需要自己实现这个?
JSR303 Bean Validation实现Hibernate-Validator(4.1.0)提供了org.hibernate.validator.constraints.ScriptAssert注释.
我得到了它来调用非静态方法.
@ScriptAssert(script="_this.isComplexSubValid(_this.attributeA,_this.attributeB)",
lang = "javascript")
...
public boolean isComplexSubValid(Object a, Object b)...
Run Code Online (Sandbox Code Playgroud)
但现在我想将isComplexSubValid静态方法外部化,以便在不同的类中重用它.但是我没有使用javascript验证器进行静态调用.
@ScriptAssert(script="ComplexValidation.isComplexSubValid(_this.attributeA,_this.attributeB)",
lang = "javascript")
public static boolean isComplexSubValid(Object a, Object b)...
Run Code Online (Sandbox Code Playgroud)
抛出:
isValid调用期间出现意外异常:org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:156)org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:140)org.hibernate.validator.metadata. MetaConstraint.validateConstraint(MetaConstraint.java:121)org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:327)org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:273)org.hibernate作为. validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:256)org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:210)org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119) org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86)org.springframework.validation.DataBinder.validate(DataBinder.java:692)org.springframework.web.bin d.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807)org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)org.springframework.web.bind.annotation.support. HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter. java:414)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)org.springframework.web.servlet.FrameworkServlet. processRequest(FrameworkServlet.java:644)org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:571)javax.servlet.http.HttpServlet.service(HttpServlet.java:640)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain. internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:368)org.springframework. security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)org.s pringframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain. doFilter(FilterChainProxy.java:380)org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org. springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter. doFilter(SecurityContextHolderAwareRequestFilter.java:54)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.ja va:380)org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security. web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter( AbstractAuthenticationProcessingFilter.java:187)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)组织. springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityC ontextPersistenceFilter.java:79)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:380)org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)org.springframework.web. filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)组织. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)de.humanfork.security.crsf.IdempotentCsrfPreventionFilter.doFilter(IdempotentCsrfPreventionFilter.java:99)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:74)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:206)org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:113)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)org. springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterC …
我使用Arquillian来测试具有显式本地和远程接口的无状态会话bean.但是在测试中,Arquillian不会在具有本地接口类型的字段中"注入"任何内容,但它适用于远程接口.
@Stateless
public class TestServiceImpl implements TestServiceLocal, TestServiceRemote {
public String greet() {
return "hallo";
}
}
Run Code Online (Sandbox Code Playgroud)
远程接口:
@Remote
public interface TestServiceRemote {
public String greet();
}
Run Code Online (Sandbox Code Playgroud)
语言环境界面:
@Local
public interface TestServiceLocal {
public String greet();
}
Run Code Online (Sandbox Code Playgroud)
这是测试:
@RunWith(Arquillian.class)
public class GenericEntityDaoEjbIntegrationTest {
@Deployment
public static JavaArchive createTestArchive()
throws UnsupportedEncodingException {
return ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClasses(
TestServiceLocal.class,
TestServiceRemote.class,
TestServiceImpl.class);
}
@EJB
private TestServiceLocal testServiceLocal;
@EJB
private TestServiceRemote testServiceRemote;
//Will Fail
@Test
public void testTestServiceLocal() {
assertNotNull(this.testServiceLocal);
}
//Success
@Test
public void …Run Code Online (Sandbox Code Playgroud) 我需要在JPQL(2.0)中形成一个查询来选择最大值(rank).
我用: SELECT max(rank) FROM test
这工作正常,除了表是空的情况,然后结果是null,但我需要0.
如果我能够用一个简单的if语句"捕获"null,那就不会有问题了,但是我不能这样做(框架只允许指定一个JPA Query但没有java代码).
有没有人知道如何调整该查询以获取0而不是null如果表是空的? - 数据库是MySQL,本机查询或存储过程是不可选的.
我有一个在集群和EJB 3.1应用程序中运行的Glassfish 3.1.2.我的应用程序中需要两种计划方法:
我不知道如何从这个集群开始 - 问题,这是可能的@Schedule(以及如何)或我还需要其他什么?
我想在Hibernate(版本1.1.1-Final)(在Spring应用程序中)使用JPA 2 Meta模型生成器.因为我使用Mapped Superclass作为所有实体的基础,并且这个类位于不同的jar中(供重用)我需要在XML中显式地映射这个类(仅用于元模型生成,因为它无需任何额外的工作准时的东西)---可能有人提示如何解决这个问题,但这不是问题.
此映射的超类(BusinessEntity)使用嵌入式类(BusinessId).
@SuppressWarnings("serial")
@MappedSuperclass
public abstract class BusinessEntity<T extends Serializable>
implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Embedded
private BusinessId<T> businessId;
...
}
@Embeddable
public class BusinessId<T> implements Serializable {
@Column(nullable = false, unique = true, name = "businessId")
private long businessId;
...
}
Run Code Online (Sandbox Code Playgroud)
但我没有得到映射与Generator一起工作:如果我使用它 orm.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<mapped-superclass class="BusinessEntity"
access="FIELD">
<attributes>
<id name="id">
<column nullable="false"/>
<generated-value strategy="AUTO"/>
</id>
<embedded name="businessId"/>
</attributes>
</mapped-superclass> …Run Code Online (Sandbox Code Playgroud) Spring EL支持一些预定义的变量
{#systemProperties. ... }{#systemEnvironment. ... }{#request. ...}{#session. ...}前两篇文章记录在Spring Reference:第6章Spring表达语言(SpEL)中.在Spring Reference中没有提到另外两个(或者我没有找到它们.)(我在这张幻灯片中找到了它们,以及它在spring social和this question中的用法).
所以我的问题是:是否有一个或多或少完整的预定义spring-el变量列表?
我想这些预定义变量中的一些并不是由spring core本身定义的,而是通过"激活"某些模块(如spring-mvc)来定义的.所以我对一个或多或少常见的spring + jpa + mvc +安全应用程序中可用的变量感兴趣.
我有一个maven-multi项目,当我从它创建一个新的eclipse项目时(来自SCM的M2E 1.0"Checkout Maven项目")我希望自动为该项目配置eclipse checkstyle插件.
所以我添加了maven-eclipse-plugin父pom的 <pluginManagement>部分并将其配置为生成.checkstyle文件以及其他项目性质CheckstyleNature.在模块中我添加maven-eclipse-plugin了构建部分中的名称.但是当我检查项目没有发生任何事情时,文件不会生成,并且不会添加性质.
所以我认为我做的事情完全错了,但它是如何做得对的呢?
父pom - 插件管理部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<wtpversion>2.0</wtpversion>
<additionalBuildcommands>
<buildCommand>
<name>org.eclipse.ajdt.core.ajbuilder</name>
<arguments>
<aspectPath>org.springframework.aspects</aspectPath>
</arguments>
</buildCommand>
<buildCommand>
<name>org.springframework.ide.eclipse.core.springbuilder</name>
</buildCommand>
</additionalBuildcommands>
<additionalProjectnatures>
<projectnature>org.eclipse.ajdt.ui.ajnature</projectnature>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
<projectnature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</projectnature>
</additionalProjectnatures>
<additionalConfig>
<file>
<name>.checkstyle</name>
<content>
<![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
<fileset name="all" enabled="true" check-config-name="My Checkstyle rules" local="false">
<file-match-pattern match-pattern="." include-pattern="true"/>
</fileset>
<filter name="FilesFromPackage" enabled="true">
<filter-data value="target" />
<filter-data value="src/main/resources"/>
<filter-data value="src/test/java"/>
<filter-data value="src/test/resources"/>
<filter-data value="src/main/webapp" …Run Code Online (Sandbox Code Playgroud)