让我告诉你我的故事,其间我会问问题
我在一个项目中工作,我必须使用JSF,没有其他选择。来自过去几年精彩的Spring世界,我真的很想使用一些功能,如Spring数据、Spring单例bean、自动连接bean到其他bean等。
所以我最初认为一切都会顺利,JSF(支持bean)将由CDI容器和@Service管理,@Respostory和数据库连接实体管理器由spring容器管理。我想让我的应用程序独立于JavaEE容器,但只是为了获取信息,我正在使用Wildfly 9。在Wildfly中,我创建了一个数据源(与oracle数据库的连接),以便稍后绑定到我的应用程序。
所以我的第一个困难是,几年前,我编写了一些JSF代码,我知道@ManagedBean anotations和JSF作用域,尽管所有这些都没有改变,但似乎还有另一种说法,根据我读到的内容,建议使用@Named等(CDI注释)而不是JSF注释。所以我想遵循这些建议,并以某种方式迫使我将CDI容器引入我的应用程序。
第一个问题:这是真的吗?是否建议使用旧的JSF注释?
我的JSF bean看起来像这样:
import java.io.Serializable;
import java.util.Locale;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.constraints.NotNull;
import co.com.psl.connectnetwork.service.AuthenticationService;
import lombok.Data;
@Named
@SessionScoped
@Data
public class LoginBean implements Serializable {
}
我的第一个问题是,正如我之前提到的,我想介绍Spring,所以我在我的应用程序上下文xml文件中
<context:annotation-config />
<context:component-scan base-package="co.com.package" />
这给我带来了问题,因为Spring似乎扫描了我的JSF管理bean,并将它们作为Spring bean处理,我对此没有任何问题,但实际上这些bean是单例的,对于一个管理登录用户状态的应用程序来说,这太可怕了。
所以我通过从spring容器中排除JSF bean来解决这个问题,我通过引入以下内容来解决:
<context:component-scan base-package="co.com.scannedpackage" >
<context:exclude-filter type="regex" expression="co.excludedpackage.*Bean" />
</context:component-scan>
因此,在我看来,这并没有那么糟糕,而且似乎存在一些不兼容性,我认为最好不要让Spring来管理JSFbean。
第二个问题:你同意吗?
正如我所说的,我将有一些@Service(Spring注释)bean,我最终将不得不将它们注入JSF管理的bean中。最初我使用@Inject将服务bean注入到JSF bean中,它工作得很好,唯一的问题是当JSF bean使用javax.enterprise.context.SessionScoped时,它强制所有属性都是可序列化的,所以我制作了@ServiceSpring bean实现了可序列化接口,我不认为它是好的,即使它工作,在我看来,它似乎是一个矛盾和一个Spring单例bean(无状态)被迫序列化。所以我试图在JSF管理的bean中使用@autowed anotation,但是bean没有被注入,我得到了一个空引用。基本上,我想我认为错误是,在一个不被Spring管理的bean中使用@autowmed。
第三个问题:我怎样才能让它工作?我真的认为使用@Autowired比让Springbeans可序列化要好。如果ApplicationScope/viewScope/SessionScope JSF bean被钝化,Spring bean会再次注入吗?,我不这么认为。如果使用@ManagedBean,它会工作吗?
我面临的另一个问题是,如果我的JSFbean由CDI管理,那么javax似乎是。面孔。豆ViewScoped不能很好地与CDI配合使用
第四个问题:是这样吗?你建议我使用@ManagedBean而不是@Named吗?如果使用@ManagedBean,如何注入Spring依赖项?有没有其他CDI作用域可以替代ViewScope?
现在从JSF转到Spring,我真的想在我的应用程序中使用Spring,Spring数据、Spring Security性等特性,Spring单例bean优于EJB无状态bean,这些都是我不想错过的。在我的应用程序中,我将在JavaEE服务器或JavaEE容器中创建一个数据源。然后,我将在应用程序内部绑定该数据源。所以在我的应用环境中。xml,我有:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/jndi-spring"/>
<property name="lookupOnStartup" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
<!-- <jee:jndi-lookup id="datasource" jndi-name="java:/ConnectNetworkDS"/> -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="persistenceUnitName" value="persistenceUnit2" />
<property name="packagesToScan" value="co.com.packagestoscan" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
</bean>
<jpa:repositories base-package="co.com.packagewhererepositoriearelocated" />
</beans>
请注意,我使用的是Spring数据和这条线
<jpa:repositories base-package="co.com.packagewhererepositoriearelocated" />
表示用@org注释的接口。springframework。刻板印象存储库。解决的
不幸的是,当我部署应用程序时,我得到:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."deployedwar.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."deployedwar.war".WeldStartService: Failed to start service
所以我在做互联网研究,我包括:
坚持的内容。xml是:http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd“version=“2.1”
<persistence-unit name="persistenceUnit">
<class>co.com.entityClass1</class>
<class>co.com.entityClass2</class>
<jta-data-source>java:/jndi-string</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
</properties>
</persistence-unit>
</persistence>
和CdiConfig类:
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
public class CdiConfig {
@Produces
@Dependent
@PersistenceContext
private EntityManager entityManager;
}
第五个问题:有人能告诉我为什么需要这样做吗?spring不应该将enntityManager注入@Repository spring beans吗?为什么是坚持。xml是必要的吗?为什么对@Repository Spring bean的注入似乎必须在Spring之前完成?我觉得这是多余的
不建议使用旧的JSF注释吗?
没错。在JSF中,我们正在从JSF原生bean和注入转向CDI。虽然官方还没有这样做,@ManagedBean
和朋友应该被视为不推荐使用。
@ViewScoped
应该可以很好地使用CDI,但是要确保导入的是正确的。旧的不起作用,新的起作用。您需要的是:
javax.faces.view.查看范围
请参阅CDI compatible@ViewScoped
我和ElasticSearch一起工作。当我执行此查询时: 我得到了我想要的(所有的结果,其中有参考黑莓,但不是Q10)。 但是,我想限制搜索的字段只限于“title”字段。例如,_source文档有标题、正文、标签等,我只想搜索标题。ElasticSearch“匹配”似乎很适合我... 虽然这只成功地搜索了标题,但它仍然返回标题中带有Q10的结果,这与上面的搜索不同。 我正在看比赛文档,但似乎不
本节描述在消费者端测试时可以使用的各种不同的请求/响应匹配技术。注意,以下演示的例子使用的是Ruby DSL,因为各种实现有所不同,请参考自己所使用的特定语言和框架。 注意 如果在消费者端编写测试时所使用的语言与提供者端不同,必须确保两者使用的是共同的Pact规范,否则就无法进行验证。 正则表达式 有时请求或响应中的某些键值是事先无法知道的——比如时间戳或者生成的ID。 你所需要的是能够以某种方式
一个简单的if/else往往是不够的,因为你可能有两个或更多个选项。这样else也会变得异常复杂。Rust 有一个match关键字,它可以让你有效的取代复杂的if/else组。看看下面的代码: let x = 5; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"),
我可以使用哪种匹配器? { test: /\.js$/, loader: 'babel-loader' } - Matches just .js { test: /\.(js|jsx)$/, loader: 'babel-loader' } - Matches both js and jsx Generally put it's just a JavaScript regex so standar
本文向大家介绍java模式匹配之蛮力匹配,包括了java模式匹配之蛮力匹配的使用技巧和注意事项,需要的朋友参考一下 java模式匹配之蛮力匹配 使用示例: 以上所述就是本文的全部内容了,希望大家能够喜欢。
问题内容: 我正在尝试匹配模式: 以下仅匹配第一次出现的情况: 结果是: 但是,[使用pythex似乎可以正常工作](http://pythex.org/?regex=%3C–(%5B%5Cw%5Cs%5D%2B)–%3E(%5B%5Cs%5CS%5D*%3F)(%3F%3D%5Cn%3C–%7C%24)&test_string=%3C–%20Option%201%20–%3E%0ANice%20