зеркало из
https://github.com/iharh/notes.git
synced 2025-11-02 06:36:06 +02:00
m
Этот коммит содержится в:
родитель
b179e012f2
Коммит
e368bfaeaf
@ -1,4 +1,28 @@
|
|||||||
|
https://code.visualstudio.com/docs/languages/java
|
||||||
|
https://code.visualstudio.com/docs/java/java-editing
|
||||||
|
!!! a lot of usefull props
|
||||||
|
|
||||||
|
https://marketplace.visualstudio.com/items?itemName=redhat.java
|
||||||
|
lombok support
|
||||||
|
https://marketplace.visualstudio.com/items?itemName=vmware.vscode-boot-dev-pack
|
||||||
|
https://marketplace.visualstudio.com/items?itemName=vmware.vscode-spring-boot
|
||||||
|
https://github.com/spring-projects/sts4/tree/main/vscode-extensions/vscode-spring-boot#usage
|
||||||
|
https://github.com/spring-projects/sts4
|
||||||
|
https://code.visualstudio.com/docs/java/java-spring-boot
|
||||||
|
|
||||||
|
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle
|
||||||
|
|
||||||
|
settings.json
|
||||||
|
{
|
||||||
|
"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable",
|
||||||
|
"java.compile.nullAnalysis.mode": "disabled"
|
||||||
|
}
|
||||||
|
|
||||||
|
???
|
||||||
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
|
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
|
||||||
|
? ms-based
|
||||||
|
https://github.com/redhat-developer/vscode-java
|
||||||
|
|
||||||
https://marketplace.visualstudio.com/items?itemName=pverest.java-ide-pack
|
https://marketplace.visualstudio.com/items?itemName=pverest.java-ide-pack
|
||||||
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug
|
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug
|
||||||
https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack
|
https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack
|
||||||
@ -6,7 +30,6 @@ https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack
|
|||||||
https://code.visualstudio.com/docs/languages/java
|
https://code.visualstudio.com/docs/languages/java
|
||||||
https://code.visualstudio.com/docs/java/java-tutorial
|
https://code.visualstudio.com/docs/java/java-tutorial
|
||||||
|
|
||||||
https://github.com/redhat-developer/vscode-java
|
|
||||||
|
|
||||||
https://github.com/microsoft/vscode-java-debug
|
https://github.com/microsoft/vscode-java-debug
|
||||||
https://github.com/microsoft/vscode-java-debug/wiki/Hot-Code-Replace
|
https://github.com/microsoft/vscode-java-debug/wiki/Hot-Code-Replace
|
||||||
|
|||||||
10
pl/cross/tools/ide/vscode/ext/sql/code-mssql.txt
Обычный файл
10
pl/cross/tools/ide/vscode/ext/sql/code-mssql.txt
Обычный файл
@ -0,0 +1,10 @@
|
|||||||
|
https://github.com/microsoft/vscode-mssql
|
||||||
|
https://learn.microsoft.com/en-us/sql/tools/visual-studio-code/sql-server-develop-use-vscode
|
||||||
|
|
||||||
|
Installing SQL tools service to
|
||||||
|
~/.vscode/extensions/ms-mssql.mssql-1.20.1/sqltoolsservice/4.8.1.2/Ubuntu16
|
||||||
|
downloading
|
||||||
|
https://github.com/Microsoft/sqltoolsservice/releases/download/4.8.1.2/microsoft.sqltools.servicelayer-rhel-x64-net7.0.tar.gz
|
||||||
|
|
||||||
|
snippets
|
||||||
|
sqlCreateDatabase
|
||||||
@ -1,6 +1,7 @@
|
|||||||
https://code.visualstudio.com/docs/getstarted/settings
|
https://code.visualstudio.com/docs/getstarted/settings
|
||||||
|
|
||||||
cfg:
|
cfg:
|
||||||
|
~/.config/Code/User/settings.json
|
||||||
https://code.visualstudio.com/docs/customization/userandworkspace
|
https://code.visualstudio.com/docs/customization/userandworkspace
|
||||||
C:/Users/<>/AppData/Roaming/Code/
|
C:/Users/<>/AppData/Roaming/Code/
|
||||||
User/
|
User/
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
https://fonts.google.com/?selection.family=Source+Code+Pro
|
https://fonts.google.com/?selection.family=Source+Code+Pro
|
||||||
// Place your settings in this file to overwrite the default settings
|
// Place your settings in this file to overwrite the default settings
|
||||||
|
|
||||||
{
|
{
|
||||||
"editor.fontSize": 18
|
"editor.fontSize": 18
|
||||||
"editor.fontFamily": "SourceCodePro-Medium",
|
"editor.fontFamily": "SourceCodePro-Medium",
|
||||||
@ -11,6 +12,9 @@ https://fonts.google.com/?selection.family=Source+Code+Pro
|
|||||||
"editor.fontLigatures": true,
|
"editor.fontLigatures": true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Explorer font size
|
||||||
|
"window.zoomLevel": 1.5
|
||||||
|
|
||||||
Change Background Color
|
Change Background Color
|
||||||
|
|
||||||
I use the dark theme (View > Theme > Dark theme).
|
I use the dark theme (View > Theme > Dark theme).
|
||||||
|
|||||||
@ -10,6 +10,10 @@ F10
|
|||||||
F11
|
F11
|
||||||
Step Into
|
Step Into
|
||||||
|
|
||||||
|
C-P
|
||||||
|
Open file
|
||||||
|
C-T
|
||||||
|
Open class
|
||||||
|
|
||||||
C+S+P
|
C+S+P
|
||||||
Command Palette
|
Command Palette
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
2023
|
2023
|
||||||
|
Mihalcea
|
||||||
|
https://www.youtube.com/watch?v=DY7BUOmtL0c
|
||||||
https://habr.com/ru/companies/naumen/articles/708244/
|
https://habr.com/ru/companies/naumen/articles/708244/
|
||||||
2022
|
2022
|
||||||
https://thorben-janssen.com/migrating-to-hibernate-6/
|
https://thorben-janssen.com/migrating-to-hibernate-6/
|
||||||
|
|||||||
@ -0,0 +1,279 @@
|
|||||||
|
LOG.tracev
|
||||||
|
AbstractEntityPersister
|
||||||
|
DefaultFlushEntityEventListener
|
||||||
|
|
||||||
|
|
||||||
|
https://thorben-janssen.com/flushmode-in-jpa-and-hibernate/
|
||||||
|
DefaultFlushEventListener
|
||||||
|
DefaultFlushEntityEventListener - too often callled
|
||||||
|
EntityUpdateAction -> good place for BP setting
|
||||||
|
|
||||||
|
https://github.com/stsypanov/dirty-checking-examples/blob/master/benchmarks/src/main/java/com/luxoft/logeek/benchmark/dirtychecking/hibernate/SimpleDirtyCheckingBenchmark.java
|
||||||
|
entity.$$_hibernate_getDirtyAttributes();
|
||||||
|
|
||||||
|
|
||||||
|
SessionEventListener
|
||||||
|
|
||||||
|
org.hibernate
|
||||||
|
cfg
|
||||||
|
AvailableSettings
|
||||||
|
tons of settings const-s
|
||||||
|
event
|
||||||
|
spi
|
||||||
|
...
|
||||||
|
DefaultFlushEntityEventListener {
|
||||||
|
protected void dirtyCheck(final FlushEntityEvent event) throws HibernateException {
|
||||||
|
...
|
||||||
|
if ( dirtyCheckPossible ) {
|
||||||
|
// dirty check against the usual snapshot of the entity
|
||||||
|
dirtyProperties = persister.findDirty( values, loadedState, entity, session );
|
||||||
|
}
|
||||||
|
...
|
||||||
|
logDirtyProperties
|
||||||
|
}
|
||||||
|
...
|
||||||
|
private void logDirtyProperties(Serializable id, int[] dirtyProperties, EntityPersister persister) {
|
||||||
|
...
|
||||||
|
LOG.tracev(
|
||||||
|
"Found dirty properties [{0}] : {1}",
|
||||||
|
MessageHelper.infoString( persister.getEntityName(), id ),
|
||||||
|
Arrays.toString( dirtyPropertyNames )
|
||||||
|
<logger name="org.hibernate.persister.entity.AbstractEntityPersister" level="trace" />
|
||||||
|
<logger name="org.hibernate.event.internal.DefaultFlushEntityEventListener" level="trace" />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshEventListener
|
||||||
|
ReplicateEventListener
|
||||||
|
ResolveNaturalIdEventListener
|
||||||
|
SaveOrUpdateEventListener
|
||||||
|
|
||||||
|
public final class EventType<T> {
|
||||||
|
public static final EventType<LoadEventListener> LOAD = create( "load", LoadEventListener.class );
|
||||||
|
public static final EventType<ResolveNaturalIdEventListener> RESOLVE_NATURAL_ID = create( "resolve-natural-id", ResolveNaturalIdEventListener.class );
|
||||||
|
|
||||||
|
public static final EventType<InitializeCollectionEventListener> INIT_COLLECTION = create( "load-collection", InitializeCollectionEventListener.class );
|
||||||
|
|
||||||
|
public static final EventType<SaveOrUpdateEventListener> SAVE_UPDATE = create( "save-update", SaveOrUpdateEventListener.class );
|
||||||
|
public static final EventType<SaveOrUpdateEventListener> UPDATE = create( "update", SaveOrUpdateEventListener.class );
|
||||||
|
public static final EventType<SaveOrUpdateEventListener> SAVE = create( "save", SaveOrUpdateEventListener.class );
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
AbstractSaveEventListener
|
||||||
|
saveWithRequestedId()
|
||||||
|
saveWithGeneratedId()
|
||||||
|
performSave
|
||||||
|
|
||||||
|
public class DefaultSaveOrUpdateEventListener extends AbstractSaveEventListener ... {
|
||||||
|
onSaveOrUpdate
|
||||||
|
performSaveOrUpdate
|
||||||
|
entityIsTransied
|
||||||
|
saveWithGeneratedId
|
||||||
|
calls AbstractSaveEventListener.performSave
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DefaultDirtyCheckEventListener extends AbstractFlushingEventListener implements DirtyCheckEventListener {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
org.hibernate.internal
|
||||||
|
public abstract class AbstractSharedSessionContract implements SharedSessionContractImplementor {
|
||||||
|
private static final EntityManagerMessageLogger log = HEMLogging.messageLogger( SessionImpl.class );
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
FastSessionServices {
|
||||||
|
public final EventListenerGroup<AutoFlushEventListener> eventListenerGroup_AUTO_FLUSH;
|
||||||
|
public final EventListenerGroup<ClearEventListener> eventListenerGroup_CLEAR;
|
||||||
|
public final EventListenerGroup<DeleteEventListener> eventListenerGroup_DELETE;
|
||||||
|
public final EventListenerGroup<DirtyCheckEventListener> eventListenerGroup_DIRTY_CHECK;
|
||||||
|
public final EventListenerGroup<EvictEventListener> eventListenerGroup_EVICT;
|
||||||
|
...
|
||||||
|
FastSessionServices(SessionFactoryImpl sf) {
|
||||||
|
Objects.requireNonNull( sf );
|
||||||
|
final ServiceRegistryImplementor sr = sf.getServiceRegistry();
|
||||||
|
...
|
||||||
|
// Pre-compute all iterators on Event listeners:
|
||||||
|
final EventListenerRegistry eventListenerRegistry = sr.getService( EventListenerRegistry.class );
|
||||||
|
...
|
||||||
|
}
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionImpl extends AbstractSharedSessionContract {
|
||||||
|
...
|
||||||
|
fastSessionServices.eventListenerGroup_NAME.fireLazyEvent...(...)
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityPersister getEntityPersister(final String entityName, final Object object) {
|
||||||
|
checkOpenOrWaitingForAutoClose();
|
||||||
|
if ( entityName == null ) {
|
||||||
|
return getFactory().getMetamodel().entityPersister( guessEntityName( object ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
...
|
||||||
|
return getFactory().getMetamodel().entityPersister( entityName )
|
||||||
|
.getSubclassEntityPersister( object, getFactory() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// saveOrUpdate() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@Override
|
||||||
|
public void saveOrUpdate(Object object) throws HibernateException {
|
||||||
|
saveOrUpdate( null, object );
|
||||||
|
}
|
||||||
|
...
|
||||||
|
// save() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
...
|
||||||
|
@Override
|
||||||
|
public boolean isDirty() throws HibernateException {
|
||||||
|
checkOpen();
|
||||||
|
pulseTransactionCoordinator();
|
||||||
|
log.debug( "Checking session dirtiness" );
|
||||||
|
if ( actionQueue.areInsertionsOrDeletionsQueued() ) {
|
||||||
|
log.debug( "Session dirty (scheduled updates and insertions)" );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
DirtyCheckEvent event = new DirtyCheckEvent( this );
|
||||||
|
fastSessionServices.eventListenerGroup_DIRTY_CHECK.fireEventOnEachListener( event, DirtyCheckEventListener::onDirtyCheck );
|
||||||
|
delayedAfterCompletion();
|
||||||
|
return event.isDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
org.hibernate
|
||||||
|
boot.internal
|
||||||
|
public class MetadataImpl implements MetadataImplementor, Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
collection.internal
|
||||||
|
AbstractPersistentCollection {
|
||||||
|
isDirty()
|
||||||
|
|
||||||
|
@Override
|
||||||
|
boolean equalsSnapshot() {
|
||||||
|
...
|
||||||
|
if ( oldValue == null || elementType.isDirty( oldValue, test, getSession() ) ) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type
|
||||||
|
https://docs.jboss.org/hibernate/orm/5.6/javadocs/org/hibernate/type/package-summary.html
|
||||||
|
|
||||||
|
public interface Type extends Serializable {
|
||||||
|
|
||||||
|
boolean isDirty(Object old, Object current, SharedSessionContractImplementor session) throws HibernateException {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OneToOneType
|
||||||
|
ManyToOneType
|
||||||
|
getIdentifierType.isSame(...)
|
||||||
|
CollectionType
|
||||||
|
ComponentType
|
||||||
|
@Override
|
||||||
|
public boolean isDirty(final Object x, final Object y, final SharedSessionContractImplementor session) throws HibernateException {
|
||||||
|
if ( x == y ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// null value and empty component are considered equivalent
|
||||||
|
for ( int i = 0; i < propertySpan; i++ ) {
|
||||||
|
if ( propertyTypes[i].isDirty( getPropertyValue( x, i ), getPropertyValue( y, i ), session ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AbstractType
|
||||||
|
AbstractStandardBasicType
|
||||||
|
dirty () {
|
||||||
|
!isSame
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class EntityType extends AbstractType implements AssociationType {
|
||||||
|
}
|
||||||
|
|
||||||
|
persister.entity
|
||||||
|
interface EntityPersister {
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractEntityPersister {
|
||||||
|
protected final BasicEntityPropertyMapping propertyMapping;
|
||||||
|
...
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] resolveDirtyAttributeIndexes(
|
||||||
|
final Object[] currentState,
|
||||||
|
final Object[] previousState,
|
||||||
|
final String[] attributeNames,
|
||||||
|
final SessionImplementor session) {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] findDirty(Object[] currentState, Object[] previousState, Object entity, SharedSessionContractImplementor session) throws HibernateException {
|
||||||
|
TypeHelper...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TypeHelper {
|
||||||
|
@Override
|
||||||
|
public static int[] findDirty(
|
||||||
|
final NonIdentifierAttribute[] properties,
|
||||||
|
final Object[] currentState,
|
||||||
|
final Object[] previousState,
|
||||||
|
final boolean[][] includeColumns,
|
||||||
|
final SharedSessionContractImplementor session) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SingleTableEntityPersister, JoinedSubclassEntityPersister, ... for test
|
||||||
|
|
||||||
|
persister.internal
|
||||||
|
|
||||||
|
public class StandardPersisterClassResolver implements PersisterClassResolver {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends EntityPersister> getEntityPersisterClass(PersistentClass metadata) {
|
||||||
|
// todo : make sure this is based on an attribute kept on the metamodel in the new code, not the concrete PersistentClass impl found!
|
||||||
|
if ( RootClass.class.isInstance( metadata ) ) {
|
||||||
|
if ( metadata.hasSubclasses() ) {
|
||||||
|
//If the class has children, we need to find of which kind
|
||||||
|
metadata = (PersistentClass) metadata.getDirectSubclasses().next();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return singleTableEntityPersister();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( JoinedSubclass.class.isInstance( metadata ) ) {
|
||||||
|
return joinedSubclassEntityPersister();
|
||||||
|
}
|
||||||
|
else if ( UnionSubclass.class.isInstance( metadata ) ) {
|
||||||
|
return unionSubclassEntityPersister();
|
||||||
|
}
|
||||||
|
else if ( SingleTableSubclass.class.isInstance( metadata ) ) {
|
||||||
|
return singleTableEntityPersister();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class PersisterFactoryImpl implements PersisterFactory, ServiceRegistryAwareService {
|
||||||
|
@Override
|
||||||
|
public EntityPersister createEntityPersister(
|
||||||
|
PersistentClass entityBinding,
|
||||||
|
EntityDataAccess entityCacheAccessStrategy,
|
||||||
|
NaturalIdDataAccess naturalIdCacheAccessStrategy,
|
||||||
|
PersisterCreationContext creationContext) throws HibernateException {
|
||||||
|
...
|
||||||
|
// called by MetamodelImpl
|
||||||
|
public class MetamodelImpl implements MetamodelImplementor, Serializable {
|
||||||
|
public void initialize(MetadataImplementor mappingMetadata, JpaMetaModelPopulationSetting jpaMetaModelPopulationSetting) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,3 +13,5 @@ https://habr.com/ru/post/715918/
|
|||||||
2022
|
2022
|
||||||
https://www.baeldung.com/database-auditing-jpa
|
https://www.baeldung.com/database-auditing-jpa
|
||||||
https://www.baeldung.com/spring-data-jpa-method-in-all-repositories
|
https://www.baeldung.com/spring-data-jpa-method-in-all-repositories
|
||||||
|
2014
|
||||||
|
https://habr.com/ru/articles/238487/
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
2023
|
2023
|
||||||
https://www.baeldung.com/spring-boot-redis-cache
|
https://www.baeldung.com/spring-boot-redis-cache
|
||||||
https://www.baeldung.com/spring-data-redis-properties
|
https://www.baeldung.com/spring-data-redis-properties
|
||||||
|
2020
|
||||||
|
https://habr.com/ru/articles/517246/
|
||||||
|
|||||||
1
pl/web/js/libfws/ui/visual/graph/litegraph.txt
Обычный файл
1
pl/web/js/libfws/ui/visual/graph/litegraph.txt
Обычный файл
@ -0,0 +1 @@
|
|||||||
|
https://github.com/jagenjo/litegraph.js
|
||||||
Загрузка…
x
Ссылка в новой задаче
Block a user