我有这个简单的界面:
public interface Node<E extends Node<E>>
{
public E getParent();
public List<E> getChildren();
default List<E> listNodes()
{
List<E> result = new ArrayList<>();
// ------> is this always safe? <-----
@SuppressWarnings("unchecked")
E root = (E) this;
Queue<E> queue = new ArrayDeque<>();
queue.add(root);
while(!queue.isEmpty())
{
E node = queue.remove();
result.add(node);
queue.addAll(node.getChildren());
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我看到它this总是Node<E>(根据定义)的一个实例.
但是我无法想象一个this不是实例的情况E......
因为E extends Node<E>,不应该也不Node<E>等同于E定义?
你能给出一个实例的对象的例子Node<E>,但它不是一个实例E吗?
与此同时,我的大脑正在融化......
上一课是一个简化的例子. …
我想执行一个匹配特定子类属性的查询,所以我正在尝试使用treat().
在这个例子中我想要:
名称以"a"开头的
所有科目,或所有科目,即姓名以"a"开头的人
private List<Subject> q1()
{
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<Subject> q = b.createQuery(Subject.class);
Root<Subject> r = q.from(Subject.class);
q.select(r);
q.distinct(true);
q.where(
b.or(
b.like(r.get(Subject_.name), "a%"),
b.like(b.treat(r, Person.class).get(Person_.lastName), "a%")));
return em.createQuery(q).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
显然,Person扩展Subject,Subject是抽象的,继承是SINGLE_TABLE,并 (非进水).Subject有@DiscriminatorOptions(force = true)其他原因
但生成的SQL是这样的:
select distinct subject0_.ID as ID2_71_, subject0_.CODE as CODE3_71_, ...
from SUBJECT subject0_
where subject0_.DTYPE='Person' and (subject0_.name like 'a%' or subject0_.lastName like 'a%')
Run Code Online (Sandbox Code Playgroud)
虽然我期待:
select distinct subject0_.ID as ID2_71_, …Run Code Online (Sandbox Code Playgroud) 我在@ViewScoped托管bean中读过@EJB会导致java.io.NotSerializableException,但是我的状态保存设置是server.
这是我有的:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>sispra</display-name>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>glass-x</param-value>
</context-param> …Run Code Online (Sandbox Code Playgroud) 我有这些课程:
public class EntityDataModel<T extends AbstractEntity>
{
...
}
public abstract class BarChartBean<E extends ChartEntry, T>
{
protected EntityDataModel<? extends T> currentModel;
...
}
Run Code Online (Sandbox Code Playgroud)
我可以在eclipse上编译和运行这段代码而没有问题,但是当我调用时mvn compile,抛出了这个错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project edea2: Compilation failure: Compilation failure:
[ERROR] C:\Develop\...\BarChartBean.java:[53,30] error: type argument ? extends T#1 is not within bounds of type-variable T#2
[ERROR] where T#1,T#2 are type-variables:
[ERROR] T#1 extends Object declared in class BarChartBean
[ERROR] T#2 extends AbstractEntity declared in class EntityDataModel
Run Code Online (Sandbox Code Playgroud)
错误是非常明显的,从理论上讲,javac是正确的,eclipse编译器是错误的.
为什么会有这样的差异? …
在我必须在glassfish 4上部署"myapp.war"之前
jdbc-connection-pool不能单独工作......从asadmin可以正常工作)jdbc-resource与上面相同)property javax.persistence.schema-generation.create-database-schemas,但是是伪造的)现在我在做:
asadmin add-resources ...asadmin create-auth-realm ...asadmin deploy ...asadmin disable myapp ...nano /.../glassfish/applications/myapp/WEB-INF/classes/META-INF/persistence.xmlctrl+o,enter,ctrl+x,enterasadmin enable myapp ...rm -Rf /tmp/install没有其他建议我打算:
chmod +x deploy.sh./deploy.sh并且脚本将处理所有事情.但我想上传仅通过HTTP的GlassFish控制台war文件,并获得相同的结果.
有没有办法让一个类或脚本之前 调用contextInitialized?
你会如何部署这个东西?
为了完整性,这里有一些额外的信息:
/myapp/WEB-INF/classes/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …Run Code Online (Sandbox Code Playgroud) 我有这个片段:
<h:form id="form">
<!-- other content -->
<p:panel id="panel" header="test">
<p:inputText id="input1" value="#{viewScope.prop1}" required="true" />
<p:commandButton id="button1" process="@form" update="@form @widgetVar(dialog)"
oncomplete="PF('dialog').show()" value="ok" />
</p:panel>
<!-- other content -->
</h:form>
<p:dialog id="dialog" header="dialog" widgetVar="dialog" modal="true">
<h:form id="form2">
<p:inputText id="input2" value="#{viewScope.prop1}" required="true" />
<p:commandButton id="button2" process="@form" update="@form" value="ok" />
</h:form>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
我想要达到的目的是:
<h:form id="form">
<!-- other content -->
<!-- fragment start -->
<!-- this fragment will be on its own file and included via ui:include (or inside composite component) -->
<p:panel …Run Code Online (Sandbox Code Playgroud) 我有这个简单的页面:
<h:form id="form">
<p:dataTable value="#{testBean.unitTypeModel}" var="elem" lazy="true" rows="10">
<p:column headerText="class">#{elem.class.simpleName}</p:column>
<p:column headerText="code">#{elem.code}</p:column>
<p:column headerText="description">#{elem.description}</p:column>
<p:column headerText="action">
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
<f:setPropertyActionListener target="#{testBean.selection}" value="#{elem}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
并且CommandButton内部DataTable不起作用,只刷新页面.但外面的人正在工作.
如果我改变value和lazy这种方式:
<h:form id="form">
<p:dataTable value="#{testBean.unitTypeModel.load(0, 10, null, null, null)}" var="elem" lazy="false" rows="10">
<p:column headerText="class">#{elem.class.simpleName}</p:column>
<p:column headerText="code">#{elem.code}</p:column>
<p:column headerText="description">#{elem.description}</p:column>
<p:column headerText="action">
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
<f:setPropertyActionListener target="#{testBean.selection}" value="#{elem}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
在CommanButton里面 …
/test.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite/components">
<f:view>
<h:head>
<title>Default Title</title>
</h:head>
<h:body>
<h:form id="form">
<composite:test id="composite"/>
</h:form>
</h:body>
</f:view>
</html>
Run Code Online (Sandbox Code Playgroud)
/resources/components/test.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:composite="http://java.sun.com/jsf/composite/components"
xmlns:p="http://primefaces.org/ui">
<head>
<title>(For validation only)</title>
</head>
<body>
<cc:interface>
</cc:interface>
<cc:implementation>
<p:panel header="header foo bar">
<p:panel>
<f:facet name="header">
<h:outputText value="foo"/>
<h:outputText value="bar"/>
</f:facet>
</p:panel>
</p:panel>
</cc:implementation>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这种组合给出:
GRAVE: Error Rendering View[/test.xhtml]
java.lang.IllegalStateException: Component ID form:composite:j_id2 …Run Code Online (Sandbox Code Playgroud) 除了组织您的变更日志外,我几乎同意Liquibase最佳实践中的每个字眼
我要实现两个主要目标:
1)在application-7.0.0上部署:
if not exists database 'app-db'
create database 'app-db' using database-7.0.0.ddl
sync database 'app-db' with changelog-7.0.0.xml
else
update database 'app-db' with changelog-7.0.0.xml
Run Code Online (Sandbox Code Playgroud)
2)在application-7.0.0版本上:
for each X : version of application (except 7.0.0)
create database 'test-source' using database-X.0.0.ddl
sync database 'test-source' with changelog-X.0.0.xml
update database 'test-source' with changelog-7.0.0.xml
create database 'test-target' using database-7.0.0.ddl
sync database 'test-target' with changelog-7.0.0.xml
diff databases 'test-target' with 'test-source'
if are not equals
throw ERROR
Run Code Online (Sandbox Code Playgroud)
我知道这有点多余,但是我想再次确定,也许您可以说服我(我希望如此),这是没有必要的。
对于第一个目标,使用主从策略来组织变更日志就足够了,但是对于第二个目标,则还不够,因为我没有每个版本的主文件。
所以我想出了一个新的策略:

每个changelog.xml …
我有一个界面
@Local
public interface TestService extends Serializable
{
public void aMethod();
}
Run Code Online (Sandbox Code Playgroud)
一个实现它的无状态 bean
@Stateless
public class MyappServiceBean implements TestService
{
private static final long serialVersionUID = 1L;
@Override
public void aMethod()
{
// do something...
}
}
Run Code Online (Sandbox Code Playgroud)
托管 bean
@ManagedBean
public class MyappBean implements Serializable
{
private static final long serialVersionUID = 1L;
@EJB
private TestService service;
...
}
Run Code Online (Sandbox Code Playgroud)
和这个 POJO
public class TestPojo implements Serializable
{
private static final long serialVersionUID = 1L;
private final TestService service;
public …Run Code Online (Sandbox Code Playgroud) java ×5
jsf-2 ×3
ejb ×2
primefaces ×2
criteria ×1
criteria-api ×1
datatables ×1
deployment ×1
dialog ×1
duplicates ×1
eclipse ×1
generics ×1
glassfish ×1
hibernate ×1
inheritance ×1
jndi ×1
jpa ×1
jsf ×1
jsf-2.2 ×1
lazy-loading ×1
liquibase ×1
managed-bean ×1
maven ×1
maven-3 ×1
myfaces ×1
mysql ×1
nested-forms ×1
resources ×1
this ×1